diff options
Diffstat (limited to 'sound/pci/hda/patch_conexant.c')
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 24 |
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 | */ | ||
4420 | static 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 | |||
4416 | static int patch_conexant_auto(struct hda_codec *codec) | 4433 | static 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); |