|
@@ -330,6 +330,7 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
|
|
|
case 0x10ec0236:
|
|
|
case 0x10ec0255:
|
|
|
case 0x10ec0256:
|
|
|
+ case 0x10ec0257:
|
|
|
case 0x10ec0282:
|
|
|
case 0x10ec0283:
|
|
|
case 0x10ec0286:
|
|
@@ -2772,6 +2773,7 @@ enum {
|
|
|
ALC269_TYPE_ALC298,
|
|
|
ALC269_TYPE_ALC255,
|
|
|
ALC269_TYPE_ALC256,
|
|
|
+ ALC269_TYPE_ALC257,
|
|
|
ALC269_TYPE_ALC215,
|
|
|
ALC269_TYPE_ALC225,
|
|
|
ALC269_TYPE_ALC294,
|
|
@@ -2805,6 +2807,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
|
|
|
case ALC269_TYPE_ALC298:
|
|
|
case ALC269_TYPE_ALC255:
|
|
|
case ALC269_TYPE_ALC256:
|
|
|
+ case ALC269_TYPE_ALC257:
|
|
|
case ALC269_TYPE_ALC215:
|
|
|
case ALC269_TYPE_ALC225:
|
|
|
case ALC269_TYPE_ALC294:
|
|
@@ -5182,6 +5185,22 @@ static void alc233_alc662_fixup_lenovo_dual_codecs(struct hda_codec *codec,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/* Forcibly assign NID 0x03 to HP/LO while NID 0x02 to SPK for EQ */
|
|
|
+static void alc274_fixup_bind_dacs(struct hda_codec *codec,
|
|
|
+ const struct hda_fixup *fix, int action)
|
|
|
+{
|
|
|
+ struct alc_spec *spec = codec->spec;
|
|
|
+ static hda_nid_t preferred_pairs[] = {
|
|
|
+ 0x21, 0x03, 0x1b, 0x03, 0x16, 0x02,
|
|
|
+ 0
|
|
|
+ };
|
|
|
+
|
|
|
+ if (action != HDA_FIXUP_ACT_PRE_PROBE)
|
|
|
+ return;
|
|
|
+
|
|
|
+ spec->gen.preferred_dacs = preferred_pairs;
|
|
|
+}
|
|
|
+
|
|
|
/* for hda_fixup_thinkpad_acpi() */
|
|
|
#include "thinkpad_helper.c"
|
|
|
|
|
@@ -5299,6 +5318,8 @@ enum {
|
|
|
ALC233_FIXUP_LENOVO_MULTI_CODECS,
|
|
|
ALC294_FIXUP_LENOVO_MIC_LOCATION,
|
|
|
ALC700_FIXUP_INTEL_REFERENCE,
|
|
|
+ ALC274_FIXUP_DELL_BIND_DACS,
|
|
|
+ ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
|
|
|
};
|
|
|
|
|
|
static const struct hda_fixup alc269_fixups[] = {
|
|
@@ -6109,6 +6130,21 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
|
{}
|
|
|
}
|
|
|
},
|
|
|
+ [ALC274_FIXUP_DELL_BIND_DACS] = {
|
|
|
+ .type = HDA_FIXUP_FUNC,
|
|
|
+ .v.func = alc274_fixup_bind_dacs,
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
|
|
|
+ },
|
|
|
+ [ALC274_FIXUP_DELL_AIO_LINEOUT_VERB] = {
|
|
|
+ .type = HDA_FIXUP_PINS,
|
|
|
+ .v.pins = (const struct hda_pintbl[]) {
|
|
|
+ { 0x1b, 0x0401102f },
|
|
|
+ { }
|
|
|
+ },
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC274_FIXUP_DELL_BIND_DACS
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
@@ -6575,7 +6611,7 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
|
|
{0x14, 0x90170110},
|
|
|
{0x1b, 0x90a70130},
|
|
|
{0x21, 0x03211020}),
|
|
|
- SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
|
|
|
+ SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
|
|
|
{0x12, 0xb7a60130},
|
|
|
{0x13, 0xb8a61140},
|
|
|
{0x16, 0x90170110},
|
|
@@ -6867,6 +6903,10 @@ static int patch_alc269(struct hda_codec *codec)
|
|
|
spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
|
|
|
alc_update_coef_idx(codec, 0x36, 1 << 13, 1 << 5); /* Switch pcbeep path to Line in path*/
|
|
|
break;
|
|
|
+ case 0x10ec0257:
|
|
|
+ spec->codec_variant = ALC269_TYPE_ALC257;
|
|
|
+ spec->gen.mixer_nid = 0;
|
|
|
+ break;
|
|
|
case 0x10ec0215:
|
|
|
case 0x10ec0285:
|
|
|
case 0x10ec0289:
|
|
@@ -7914,6 +7954,7 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
|
|
|
HDA_CODEC_ENTRY(0x10ec0236, "ALC236", patch_alc269),
|
|
|
HDA_CODEC_ENTRY(0x10ec0255, "ALC255", patch_alc269),
|
|
|
HDA_CODEC_ENTRY(0x10ec0256, "ALC256", patch_alc269),
|
|
|
+ HDA_CODEC_ENTRY(0x10ec0257, "ALC257", patch_alc269),
|
|
|
HDA_CODEC_ENTRY(0x10ec0260, "ALC260", patch_alc260),
|
|
|
HDA_CODEC_ENTRY(0x10ec0262, "ALC262", patch_alc262),
|
|
|
HDA_CODEC_ENTRY(0x10ec0267, "ALC267", patch_alc268),
|