aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_conexant.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/patch_conexant.c')
-rw-r--r--sound/pci/hda/patch_conexant.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index f3b79031fcca..5a56fda83625 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -3470,7 +3470,7 @@ static int cx_automute_mode_info(struct snd_kcontrol *kcontrol,
3470 "Disabled", "Enabled" 3470 "Disabled", "Enabled"
3471 }; 3471 };
3472 static const char * const texts3[] = { 3472 static const char * const texts3[] = {
3473 "Disabled", "Speaker Only", "Line-Out+Speaker" 3473 "Disabled", "Speaker Only", "Line Out+Speaker"
3474 }; 3474 };
3475 const char * const *texts; 3475 const char * const *texts;
3476 3476
@@ -4112,7 +4112,8 @@ static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename,
4112 err = snd_hda_ctl_add(codec, nid, kctl); 4112 err = snd_hda_ctl_add(codec, nid, kctl);
4113 if (err < 0) 4113 if (err < 0)
4114 return err; 4114 return err;
4115 if (!(query_amp_caps(codec, nid, hda_dir) & AC_AMPCAP_MUTE)) 4115 if (!(query_amp_caps(codec, nid, hda_dir) &
4116 (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)))
4116 break; 4117 break;
4117 } 4118 }
4118 return 0; 4119 return 0;
@@ -4413,6 +4414,22 @@ static const struct snd_pci_quirk cxt_fixups[] = {
4413 {} 4414 {}
4414}; 4415};
4415 4416
4417/* add "fake" mute amp-caps to DACs on cx5051 so that mixer mute switches
4418 * can be created (bko#42825)
4419 */
4420static void add_cx5051_fake_mutes(struct hda_codec *codec)
4421{
4422 static hda_nid_t out_nids[] = {
4423 0x10, 0x11, 0
4424 };
4425 hda_nid_t *p;
4426
4427 for (p = out_nids; *p; p++)
4428 snd_hda_override_amp_caps(codec, *p, HDA_OUTPUT,
4429 AC_AMPCAP_MIN_MUTE |
4430 query_amp_caps(codec, *p, HDA_OUTPUT));
4431}
4432
4416static int patch_conexant_auto(struct hda_codec *codec) 4433static int patch_conexant_auto(struct hda_codec *codec)
4417{ 4434{
4418 struct conexant_spec *spec; 4435 struct conexant_spec *spec;
@@ -4431,6 +4448,9 @@ static int patch_conexant_auto(struct hda_codec *codec)
4431 case 0x14f15045: 4448 case 0x14f15045:
4432 spec->single_adc_amp = 1; 4449 spec->single_adc_amp = 1;
4433 break; 4450 break;
4451 case 0x14f15051:
4452 add_cx5051_fake_mutes(codec);
4453 break;
4434 } 4454 }
4435 4455
4436 apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl); 4456 apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl);