|
@@ -4079,7 +4079,8 @@ static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename,
|
|
|
err = snd_hda_ctl_add(codec, nid, kctl);
|
|
|
if (err < 0)
|
|
|
return err;
|
|
|
- if (!(query_amp_caps(codec, nid, hda_dir) & AC_AMPCAP_MUTE))
|
|
|
+ if (!(query_amp_caps(codec, nid, hda_dir) &
|
|
|
+ (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)))
|
|
|
break;
|
|
|
}
|
|
|
return 0;
|
|
@@ -4379,6 +4380,22 @@ static const struct snd_pci_quirk cxt_fixups[] = {
|
|
|
{}
|
|
|
};
|
|
|
|
|
|
+/* add "fake" mute amp-caps to DACs on cx5051 so that mixer mute switches
|
|
|
+ * can be created (bko#42825)
|
|
|
+ */
|
|
|
+static void add_cx5051_fake_mutes(struct hda_codec *codec)
|
|
|
+{
|
|
|
+ static hda_nid_t out_nids[] = {
|
|
|
+ 0x10, 0x11, 0
|
|
|
+ };
|
|
|
+ hda_nid_t *p;
|
|
|
+
|
|
|
+ for (p = out_nids; *p; p++)
|
|
|
+ snd_hda_override_amp_caps(codec, *p, HDA_OUTPUT,
|
|
|
+ AC_AMPCAP_MIN_MUTE |
|
|
|
+ query_amp_caps(codec, *p, HDA_OUTPUT));
|
|
|
+}
|
|
|
+
|
|
|
static int patch_conexant_auto(struct hda_codec *codec)
|
|
|
{
|
|
|
struct conexant_spec *spec;
|
|
@@ -4397,6 +4414,9 @@ static int patch_conexant_auto(struct hda_codec *codec)
|
|
|
case 0x14f15045:
|
|
|
spec->single_adc_amp = 1;
|
|
|
break;
|
|
|
+ case 0x14f15051:
|
|
|
+ add_cx5051_fake_mutes(codec);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl);
|