Merge branch 'fix/hda' into topic/hda
This commit is contained in:
commit
8e89995c58
|
@ -99,7 +99,14 @@ struct snd_sb_csp_info {
|
|||
/* get CSP information */
|
||||
#define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info)
|
||||
/* load microcode to CSP */
|
||||
#define SNDRV_SB_CSP_IOCTL_LOAD_CODE _IOW('H', 0x11, struct snd_sb_csp_microcode)
|
||||
/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits)
|
||||
* defined for some architectures like MIPS, and it leads to build errors.
|
||||
* (x86 and co have 14-bit size, thus it's valid, though.)
|
||||
* As a workaround for skipping the size-limit check, here we don't use the
|
||||
* normal _IOW() macro but _IOC() with the manual argument.
|
||||
*/
|
||||
#define SNDRV_SB_CSP_IOCTL_LOAD_CODE \
|
||||
_IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode))
|
||||
/* unload microcode from CSP */
|
||||
#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12)
|
||||
/* start CSP */
|
||||
|
|
|
@ -599,4 +599,4 @@ module_exit(atmel_abdac_exit);
|
|||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Driver for Atmel Audio Bitstream DAC (ABDAC)");
|
||||
MODULE_AUTHOR("Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>");
|
||||
MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");
|
||||
|
|
|
@ -1199,4 +1199,4 @@ module_exit(atmel_ac97c_exit);
|
|||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Driver for Atmel AC97 controller");
|
||||
MODULE_AUTHOR("Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>");
|
||||
MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");
|
||||
|
|
|
@ -149,7 +149,7 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au,
|
|||
&((struct cs5535audio_dma_desc *) dma->desc_buf.area)[i];
|
||||
desc->addr = cpu_to_le32(addr);
|
||||
desc->size = cpu_to_le32(period_bytes);
|
||||
desc->ctlreserved = cpu_to_le32(PRD_EOP);
|
||||
desc->ctlreserved = cpu_to_le16(PRD_EOP);
|
||||
desc_addr += sizeof(struct cs5535audio_dma_desc);
|
||||
addr += period_bytes;
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au,
|
|||
lastdesc = &((struct cs5535audio_dma_desc *) dma->desc_buf.area)[periods];
|
||||
lastdesc->addr = cpu_to_le32((u32) dma->desc_buf.addr);
|
||||
lastdesc->size = 0;
|
||||
lastdesc->ctlreserved = cpu_to_le32(PRD_JMP);
|
||||
lastdesc->ctlreserved = cpu_to_le16(PRD_JMP);
|
||||
jmpprd_addr = cpu_to_le32(lastdesc->addr +
|
||||
(sizeof(struct cs5535audio_dma_desc)*periods));
|
||||
|
||||
|
|
|
@ -294,7 +294,7 @@ static int hdmi_update_eld(struct hdmi_eld *e,
|
|||
snd_printd(KERN_INFO "HDMI: out of range MNL %d\n", mnl);
|
||||
goto out_fail;
|
||||
} else
|
||||
strlcpy(e->monitor_name, buf + ELD_FIXED_BYTES, mnl);
|
||||
strlcpy(e->monitor_name, buf + ELD_FIXED_BYTES, mnl + 1);
|
||||
|
||||
for (i = 0; i < e->sad_count; i++) {
|
||||
if (ELD_FIXED_BYTES + mnl + 3 * (i + 1) > size) {
|
||||
|
|
|
@ -2707,17 +2707,30 @@ typedef int (*getput_call_t)(struct snd_kcontrol *kcontrol,
|
|||
|
||||
static int alc_cap_getput_caller(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol,
|
||||
getput_call_t func)
|
||||
getput_call_t func, bool check_adc_switch)
|
||||
{
|
||||
struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct alc_spec *spec = codec->spec;
|
||||
unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
|
||||
int err;
|
||||
int i, err;
|
||||
|
||||
mutex_lock(&codec->control_mutex);
|
||||
kcontrol->private_value = HDA_COMPOSE_AMP_VAL(spec->adc_nids[adc_idx],
|
||||
if (check_adc_switch && spec->dual_adc_switch) {
|
||||
for (i = 0; i < spec->num_adc_nids; i++) {
|
||||
kcontrol->private_value =
|
||||
HDA_COMPOSE_AMP_VAL(spec->adc_nids[i],
|
||||
3, 0, HDA_INPUT);
|
||||
err = func(kcontrol, ucontrol);
|
||||
if (err < 0)
|
||||
goto error;
|
||||
}
|
||||
} else {
|
||||
i = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
|
||||
kcontrol->private_value =
|
||||
HDA_COMPOSE_AMP_VAL(spec->adc_nids[i],
|
||||
3, 0, HDA_INPUT);
|
||||
err = func(kcontrol, ucontrol);
|
||||
}
|
||||
error:
|
||||
mutex_unlock(&codec->control_mutex);
|
||||
return err;
|
||||
}
|
||||
|
@ -2726,14 +2739,14 @@ static int alc_cap_vol_get(struct snd_kcontrol *kcontrol,
|
|||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
return alc_cap_getput_caller(kcontrol, ucontrol,
|
||||
snd_hda_mixer_amp_volume_get);
|
||||
snd_hda_mixer_amp_volume_get, false);
|
||||
}
|
||||
|
||||
static int alc_cap_vol_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
return alc_cap_getput_caller(kcontrol, ucontrol,
|
||||
snd_hda_mixer_amp_volume_put);
|
||||
snd_hda_mixer_amp_volume_put, true);
|
||||
}
|
||||
|
||||
/* capture mixer elements */
|
||||
|
@ -2743,14 +2756,14 @@ static int alc_cap_sw_get(struct snd_kcontrol *kcontrol,
|
|||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
return alc_cap_getput_caller(kcontrol, ucontrol,
|
||||
snd_hda_mixer_amp_switch_get);
|
||||
snd_hda_mixer_amp_switch_get, false);
|
||||
}
|
||||
|
||||
static int alc_cap_sw_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
return alc_cap_getput_caller(kcontrol, ucontrol,
|
||||
snd_hda_mixer_amp_switch_put);
|
||||
snd_hda_mixer_amp_switch_put, true);
|
||||
}
|
||||
|
||||
#define _DEFINE_CAPMIX(num) \
|
||||
|
|
|
@ -896,11 +896,11 @@ struct hdspm {
|
|||
unsigned char max_channels_in;
|
||||
unsigned char max_channels_out;
|
||||
|
||||
char *channel_map_in;
|
||||
char *channel_map_out;
|
||||
signed char *channel_map_in;
|
||||
signed char *channel_map_out;
|
||||
|
||||
char *channel_map_in_ss, *channel_map_in_ds, *channel_map_in_qs;
|
||||
char *channel_map_out_ss, *channel_map_out_ds, *channel_map_out_qs;
|
||||
signed char *channel_map_in_ss, *channel_map_in_ds, *channel_map_in_qs;
|
||||
signed char *channel_map_out_ss, *channel_map_out_ds, *channel_map_out_qs;
|
||||
|
||||
char **port_names_in;
|
||||
char **port_names_out;
|
||||
|
|
|
@ -1124,6 +1124,6 @@ static void __exit at73c213_exit(void)
|
|||
}
|
||||
module_exit(at73c213_exit);
|
||||
|
||||
MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>");
|
||||
MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");
|
||||
MODULE_DESCRIPTION("Sound driver for AT73C213 with Atmel SSC");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
Loading…
Reference in New Issue