|
@@ -14806,8 +14806,9 @@ static int alc269_resume(struct hda_codec *codec)
|
|
|
|
|
|
enum {
|
|
|
ALC269_FIXUP_SONY_VAIO,
|
|
|
+ ALC275_FIX_SONY_VAIO_GPIO2,
|
|
|
ALC269_FIXUP_DELL_M101Z,
|
|
|
- ALC269_FIXUP_LENOVO_EDGE14,
|
|
|
+ ALC269_FIXUP_SKU_IGNORE,
|
|
|
ALC269_FIXUP_ASUS_G73JW,
|
|
|
};
|
|
|
|
|
@@ -14818,6 +14819,14 @@ static const struct alc_fixup alc269_fixups[] = {
|
|
|
{}
|
|
|
}
|
|
|
},
|
|
|
+ [ALC275_FIX_SONY_VAIO_GPIO2] = {
|
|
|
+ .verbs = (const struct hda_verb[]) {
|
|
|
+ {0x01, AC_VERB_SET_GPIO_MASK, 0x04},
|
|
|
+ {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04},
|
|
|
+ {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
|
|
|
+ { }
|
|
|
+ }
|
|
|
+ },
|
|
|
[ALC269_FIXUP_DELL_M101Z] = {
|
|
|
.verbs = (const struct hda_verb[]) {
|
|
|
/* Enables internal speaker */
|
|
@@ -14826,7 +14835,7 @@ static const struct alc_fixup alc269_fixups[] = {
|
|
|
{}
|
|
|
}
|
|
|
},
|
|
|
- [ALC269_FIXUP_LENOVO_EDGE14] = {
|
|
|
+ [ALC269_FIXUP_SKU_IGNORE] = {
|
|
|
.sku = ALC_FIXUP_SKU_IGNORE,
|
|
|
},
|
|
|
[ALC269_FIXUP_ASUS_G73JW] = {
|
|
@@ -14838,9 +14847,13 @@ static const struct alc_fixup alc269_fixups[] = {
|
|
|
};
|
|
|
|
|
|
static struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
+ SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2),
|
|
|
+ SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2),
|
|
|
+ SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2),
|
|
|
SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
|
|
|
SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
|
|
|
- SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_LENOVO_EDGE14),
|
|
|
+ SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
|
|
|
+ SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
|
|
|
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
|
|
|
{}
|
|
|
};
|
|
@@ -15091,28 +15104,29 @@ static int patch_alc269(struct hda_codec *codec)
|
|
|
|
|
|
alc_auto_parse_customize_define(codec);
|
|
|
|
|
|
- coef = alc_read_coef_idx(codec, 0);
|
|
|
- if ((coef & 0x00f0) == 0x0010) {
|
|
|
- if (codec->bus->pci->subsystem_vendor == 0x1025 &&
|
|
|
- spec->cdefine.platform_type == 1) {
|
|
|
- alc_codec_rename(codec, "ALC271X");
|
|
|
- spec->codec_variant = ALC269_TYPE_ALC271X;
|
|
|
- } else if ((coef & 0xf000) == 0x1000) {
|
|
|
- spec->codec_variant = ALC269_TYPE_ALC270;
|
|
|
- } else if ((coef & 0xf000) == 0x2000) {
|
|
|
- alc_codec_rename(codec, "ALC259");
|
|
|
- spec->codec_variant = ALC269_TYPE_ALC259;
|
|
|
- } else if ((coef & 0xf000) == 0x3000) {
|
|
|
- alc_codec_rename(codec, "ALC258");
|
|
|
- spec->codec_variant = ALC269_TYPE_ALC258;
|
|
|
- } else {
|
|
|
- alc_codec_rename(codec, "ALC269VB");
|
|
|
- spec->codec_variant = ALC269_TYPE_ALC269VB;
|
|
|
- }
|
|
|
- } else
|
|
|
- alc_fix_pll_init(codec, 0x20, 0x04, 15);
|
|
|
-
|
|
|
- alc269_fill_coef(codec);
|
|
|
+ if (codec->vendor_id == 0x10ec0269) {
|
|
|
+ coef = alc_read_coef_idx(codec, 0);
|
|
|
+ if ((coef & 0x00f0) == 0x0010) {
|
|
|
+ if (codec->bus->pci->subsystem_vendor == 0x1025 &&
|
|
|
+ spec->cdefine.platform_type == 1) {
|
|
|
+ alc_codec_rename(codec, "ALC271X");
|
|
|
+ spec->codec_variant = ALC269_TYPE_ALC271X;
|
|
|
+ } else if ((coef & 0xf000) == 0x1000) {
|
|
|
+ spec->codec_variant = ALC269_TYPE_ALC270;
|
|
|
+ } else if ((coef & 0xf000) == 0x2000) {
|
|
|
+ alc_codec_rename(codec, "ALC259");
|
|
|
+ spec->codec_variant = ALC269_TYPE_ALC259;
|
|
|
+ } else if ((coef & 0xf000) == 0x3000) {
|
|
|
+ alc_codec_rename(codec, "ALC258");
|
|
|
+ spec->codec_variant = ALC269_TYPE_ALC258;
|
|
|
+ } else {
|
|
|
+ alc_codec_rename(codec, "ALC269VB");
|
|
|
+ spec->codec_variant = ALC269_TYPE_ALC269VB;
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ alc_fix_pll_init(codec, 0x20, 0x04, 15);
|
|
|
+ alc269_fill_coef(codec);
|
|
|
+ }
|
|
|
|
|
|
board_config = snd_hda_check_board_config(codec, ALC269_MODEL_LAST,
|
|
|
alc269_models,
|