aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_realtek.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r--sound/pci/hda/patch_realtek.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index b5b36b893b1e..e1563f48243f 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -10389,6 +10389,18 @@ static void alc262_lenovo_3000_unsol_event(struct hda_codec *codec,
10389 alc262_lenovo_3000_automute(codec, 1); 10389 alc262_lenovo_3000_automute(codec, 1);
10390} 10390}
10391 10391
10392static int amp_stereo_mute_update(struct hda_codec *codec, hda_nid_t nid,
10393 int dir, int idx, long *valp)
10394{
10395 int i, change = 0;
10396
10397 for (i = 0; i < 2; i++, valp++)
10398 change |= snd_hda_codec_amp_update(codec, nid, i, dir, idx,
10399 HDA_AMP_MUTE,
10400 *valp ? 0 : HDA_AMP_MUTE);
10401 return change;
10402}
10403
10392/* bind hp and internal speaker mute (with plug check) */ 10404/* bind hp and internal speaker mute (with plug check) */
10393static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol, 10405static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol,
10394 struct snd_ctl_elem_value *ucontrol) 10406 struct snd_ctl_elem_value *ucontrol)
@@ -10397,13 +10409,8 @@ static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol,
10397 long *valp = ucontrol->value.integer.value; 10409 long *valp = ucontrol->value.integer.value;
10398 int change; 10410 int change;
10399 10411
10400 change = snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0, 10412 change = amp_stereo_mute_update(codec, 0x14, HDA_OUTPUT, 0, valp);
10401 HDA_AMP_MUTE, 10413 change |= amp_stereo_mute_update(codec, 0x1b, HDA_OUTPUT, 0, valp);
10402 valp ? 0 : HDA_AMP_MUTE);
10403 change |= snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0,
10404 HDA_AMP_MUTE,
10405 valp ? 0 : HDA_AMP_MUTE);
10406
10407 if (change) 10414 if (change)
10408 alc262_fujitsu_automute(codec, 0); 10415 alc262_fujitsu_automute(codec, 0);
10409 return change; 10416 return change;
@@ -10438,10 +10445,7 @@ static int alc262_lenovo_3000_master_sw_put(struct snd_kcontrol *kcontrol,
10438 long *valp = ucontrol->value.integer.value; 10445 long *valp = ucontrol->value.integer.value;
10439 int change; 10446 int change;
10440 10447
10441 change = snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0, 10448 change = amp_stereo_mute_update(codec, 0x1b, HDA_OUTPUT, 0, valp);
10442 HDA_AMP_MUTE,
10443 valp ? 0 : HDA_AMP_MUTE);
10444
10445 if (change) 10449 if (change)
10446 alc262_lenovo_3000_automute(codec, 0); 10450 alc262_lenovo_3000_automute(codec, 0);
10447 return change; 10451 return change;
@@ -11612,12 +11616,7 @@ static int alc268_acer_master_sw_put(struct snd_kcontrol *kcontrol,
11612 long *valp = ucontrol->value.integer.value; 11616 long *valp = ucontrol->value.integer.value;
11613 int change; 11617 int change;
11614 11618
11615 change = snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0, 11619 change = amp_stereo_mute_update(codec, 0x14, HDA_OUTPUT, 0, valp);
11616 HDA_AMP_MUTE,
11617 valp[0] ? 0 : HDA_AMP_MUTE);
11618 change |= snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
11619 HDA_AMP_MUTE,
11620 valp[1] ? 0 : HDA_AMP_MUTE);
11621 if (change) 11620 if (change)
11622 alc268_acer_automute(codec, 0); 11621 alc268_acer_automute(codec, 0);
11623 return change; 11622 return change;