mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 16:44:10 +08:00
ALSA: hda - Allow auto_mute_via_amp on bind mute controls
The auto-mute using the amp currently works only for a single amp on a pin. Make it working also with HDA_CTL_BIND_MUTE type, too. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
f672f31ab5
commit
bc2eee29fc
@ -816,6 +816,8 @@ static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
|
||||
|
||||
static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
|
||||
enum {
|
||||
HDA_CTL_WIDGET_VOL,
|
||||
@ -833,7 +835,13 @@ static const struct snd_kcontrol_new control_templates[] = {
|
||||
.put = hda_gen_mixer_mute_put, /* replaced */
|
||||
.private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
|
||||
},
|
||||
HDA_BIND_MUTE(NULL, 0, 0, 0),
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.info = snd_hda_mixer_amp_switch_info,
|
||||
.get = snd_hda_mixer_bind_switch_get,
|
||||
.put = hda_gen_bind_mute_put, /* replaced */
|
||||
.private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
|
||||
},
|
||||
};
|
||||
|
||||
/* add dynamic controls from template */
|
||||
@ -940,8 +948,8 @@ static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
|
||||
}
|
||||
|
||||
/* playback mute control with the software mute bit check */
|
||||
static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
static void sync_auto_mute_bits(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct hda_gen_spec *spec = codec->spec;
|
||||
@ -952,10 +960,22 @@ static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
|
||||
ucontrol->value.integer.value[0] &= enabled;
|
||||
ucontrol->value.integer.value[1] &= enabled;
|
||||
}
|
||||
}
|
||||
|
||||
static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
sync_auto_mute_bits(kcontrol, ucontrol);
|
||||
return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
|
||||
}
|
||||
|
||||
static int hda_gen_bind_mute_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
sync_auto_mute_bits(kcontrol, ucontrol);
|
||||
return snd_hda_mixer_bind_switch_put(kcontrol, ucontrol);
|
||||
}
|
||||
|
||||
/* any ctl assigned to the path with the given index? */
|
||||
static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user