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 a7a5733aa4d2..d29d6d377904 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
| @@ -3482,7 +3482,7 @@ static int cx_automute_mode_info(struct snd_kcontrol *kcontrol, | |||
| 3482 | "Disabled", "Enabled" | 3482 | "Disabled", "Enabled" |
| 3483 | }; | 3483 | }; |
| 3484 | static const char * const texts3[] = { | 3484 | static const char * const texts3[] = { |
| 3485 | "Disabled", "Speaker Only", "Line-Out+Speaker" | 3485 | "Disabled", "Speaker Only", "Line Out+Speaker" |
| 3486 | }; | 3486 | }; |
| 3487 | const char * const *texts; | 3487 | const char * const *texts; |
| 3488 | 3488 | ||
| @@ -4079,7 +4079,8 @@ static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename, | |||
| 4079 | err = snd_hda_ctl_add(codec, nid, kctl); | 4079 | err = snd_hda_ctl_add(codec, nid, kctl); |
| 4080 | if (err < 0) | 4080 | if (err < 0) |
| 4081 | return err; | 4081 | return err; |
| 4082 | if (!(query_amp_caps(codec, nid, hda_dir) & AC_AMPCAP_MUTE)) | 4082 | if (!(query_amp_caps(codec, nid, hda_dir) & |
| 4083 | (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE))) | ||
| 4083 | break; | 4084 | break; |
| 4084 | } | 4085 | } |
| 4085 | return 0; | 4086 | return 0; |
| @@ -4379,6 +4380,22 @@ static const struct snd_pci_quirk cxt_fixups[] = { | |||
| 4379 | {} | 4380 | {} |
| 4380 | }; | 4381 | }; |
| 4381 | 4382 | ||
| 4383 | /* add "fake" mute amp-caps to DACs on cx5051 so that mixer mute switches | ||
| 4384 | * can be created (bko#42825) | ||
| 4385 | */ | ||
| 4386 | static void add_cx5051_fake_mutes(struct hda_codec *codec) | ||
| 4387 | { | ||
| 4388 | static hda_nid_t out_nids[] = { | ||
| 4389 | 0x10, 0x11, 0 | ||
| 4390 | }; | ||
| 4391 | hda_nid_t *p; | ||
| 4392 | |||
| 4393 | for (p = out_nids; *p; p++) | ||
| 4394 | snd_hda_override_amp_caps(codec, *p, HDA_OUTPUT, | ||
| 4395 | AC_AMPCAP_MIN_MUTE | | ||
| 4396 | query_amp_caps(codec, *p, HDA_OUTPUT)); | ||
| 4397 | } | ||
| 4398 | |||
| 4382 | static int patch_conexant_auto(struct hda_codec *codec) | 4399 | static int patch_conexant_auto(struct hda_codec *codec) |
| 4383 | { | 4400 | { |
| 4384 | struct conexant_spec *spec; | 4401 | struct conexant_spec *spec; |
| @@ -4397,6 +4414,9 @@ static int patch_conexant_auto(struct hda_codec *codec) | |||
| 4397 | case 0x14f15045: | 4414 | case 0x14f15045: |
| 4398 | spec->single_adc_amp = 1; | 4415 | spec->single_adc_amp = 1; |
| 4399 | break; | 4416 | break; |
| 4417 | case 0x14f15051: | ||
| 4418 | add_cx5051_fake_mutes(codec); | ||
| 4419 | break; | ||
| 4400 | } | 4420 | } |
| 4401 | 4421 | ||
| 4402 | apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl); | 4422 | apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl); |
