|
@@ -1512,6 +1512,7 @@ enum {
|
|
|
ALC260_FIXUP_KN1,
|
|
|
ALC260_FIXUP_FSC_S7020,
|
|
|
ALC260_FIXUP_FSC_S7020_JWSE,
|
|
|
+ ALC260_FIXUP_VAIO_PINS,
|
|
|
};
|
|
|
|
|
|
static void alc260_gpio1_automute(struct hda_codec *codec)
|
|
@@ -1652,6 +1653,24 @@ static const struct hda_fixup alc260_fixups[] = {
|
|
|
.chained = true,
|
|
|
.chain_id = ALC260_FIXUP_FSC_S7020,
|
|
|
},
|
|
|
+ [ALC260_FIXUP_VAIO_PINS] = {
|
|
|
+ .type = HDA_FIXUP_PINS,
|
|
|
+ .v.pins = (const struct hda_pintbl[]) {
|
|
|
+ /* Pin configs are missing completely on some VAIOs */
|
|
|
+ { 0x0f, 0x01211020 },
|
|
|
+ { 0x10, 0x0001003f },
|
|
|
+ { 0x11, 0x411111f0 },
|
|
|
+ { 0x12, 0x01a15930 },
|
|
|
+ { 0x13, 0x411111f0 },
|
|
|
+ { 0x14, 0x411111f0 },
|
|
|
+ { 0x15, 0x411111f0 },
|
|
|
+ { 0x16, 0x411111f0 },
|
|
|
+ { 0x17, 0x411111f0 },
|
|
|
+ { 0x18, 0x411111f0 },
|
|
|
+ { 0x19, 0x411111f0 },
|
|
|
+ { }
|
|
|
+ }
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static const struct snd_pci_quirk alc260_fixup_tbl[] = {
|
|
@@ -1660,6 +1679,8 @@ static const struct snd_pci_quirk alc260_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x1025, 0x008f, "Acer", ALC260_FIXUP_GPIO1),
|
|
|
SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", ALC260_FIXUP_HP_DC5750),
|
|
|
SND_PCI_QUIRK(0x103c, 0x30ba, "HP Presario B1900", ALC260_FIXUP_HP_B1900),
|
|
|
+ SND_PCI_QUIRK(0x104d, 0x81bb, "Sony VAIO", ALC260_FIXUP_VAIO_PINS),
|
|
|
+ SND_PCI_QUIRK(0x104d, 0x81e2, "Sony VAIO TX", ALC260_FIXUP_HP_PIN_0F),
|
|
|
SND_PCI_QUIRK(0x10cf, 0x1326, "FSC LifeBook S7020", ALC260_FIXUP_FSC_S7020),
|
|
|
SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FIXUP_GPIO1),
|
|
|
SND_PCI_QUIRK(0x152d, 0x0729, "Quanta KN1", ALC260_FIXUP_KN1),
|
|
@@ -3393,7 +3414,7 @@ static void alc_update_headset_mode_hook(struct hda_codec *codec,
|
|
|
static void alc_update_headset_jack_cb(struct hda_codec *codec, struct hda_jack_tbl *jack)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- spec->current_headset_type = ALC_HEADSET_MODE_UNKNOWN;
|
|
|
+ spec->current_headset_type = ALC_HEADSET_TYPE_UNKNOWN;
|
|
|
snd_hda_gen_hp_automute(codec, jack);
|
|
|
}
|
|
|
|
|
@@ -3652,9 +3673,29 @@ static void alc290_fixup_mono_speakers(struct hda_codec *codec,
|
|
|
#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
|
|
|
|
|
|
#include <linux/thinkpad_acpi.h>
|
|
|
+#include <acpi/acpi.h>
|
|
|
|
|
|
static int (*led_set_func)(int, bool);
|
|
|
|
|
|
+static acpi_status acpi_check_cb(acpi_handle handle, u32 lvl, void *context,
|
|
|
+ void **rv)
|
|
|
+{
|
|
|
+ bool *found = context;
|
|
|
+ *found = true;
|
|
|
+ return AE_OK;
|
|
|
+}
|
|
|
+
|
|
|
+static bool is_thinkpad(struct hda_codec *codec)
|
|
|
+{
|
|
|
+ bool found = false;
|
|
|
+ if (codec->subsystem_id >> 16 != 0x17aa)
|
|
|
+ return false;
|
|
|
+ if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, &found, NULL)) && found)
|
|
|
+ return true;
|
|
|
+ found = false;
|
|
|
+ return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb, &found, NULL)) && found;
|
|
|
+}
|
|
|
+
|
|
|
static void update_tpacpi_mute_led(void *private_data, int enabled)
|
|
|
{
|
|
|
if (led_set_func)
|
|
@@ -3680,6 +3721,8 @@ static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
|
|
|
bool removefunc = false;
|
|
|
|
|
|
if (action == HDA_FIXUP_ACT_PROBE) {
|
|
|
+ if (!is_thinkpad(codec))
|
|
|
+ return;
|
|
|
if (!led_set_func)
|
|
|
led_set_func = symbol_request(tpacpi_led_set);
|
|
|
if (!led_set_func) {
|
|
@@ -3923,6 +3966,8 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
|
[ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
|
|
|
.type = HDA_FIXUP_FUNC,
|
|
|
.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC269_FIXUP_THINKPAD_ACPI,
|
|
|
},
|
|
|
[ALC269_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
|
|
.type = HDA_FIXUP_PINS,
|
|
@@ -4027,6 +4072,8 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
|
[ALC269_FIXUP_LIMIT_INT_MIC_BOOST] = {
|
|
|
.type = HDA_FIXUP_FUNC,
|
|
|
.v.func = alc269_fixup_limit_int_mic_boost,
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC269_FIXUP_THINKPAD_ACPI,
|
|
|
},
|
|
|
[ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED] = {
|
|
|
.type = HDA_FIXUP_FUNC,
|
|
@@ -4070,8 +4117,6 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
|
[ALC269_FIXUP_THINKPAD_ACPI] = {
|
|
|
.type = HDA_FIXUP_FUNC,
|
|
|
.v.func = alc_fixup_thinkpad_acpi,
|
|
|
- .chained = true,
|
|
|
- .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
|
|
|
},
|
|
|
[ALC255_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
|
|
.type = HDA_FIXUP_PINS,
|
|
@@ -4128,6 +4173,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
|
+ SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
|
|
|
SND_PCI_QUIRK(0x1028, 0x061f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
@@ -4173,7 +4219,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
- SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_THINKPAD_ACPI),
|
|
|
+ SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
|
|
@@ -4181,6 +4227,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
|
|
|
+ SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", ALC269_FIXUP_THINKPAD_ACPI),
|
|
|
SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
|
|
|
|
|
|
#if 0
|
|
@@ -4698,6 +4745,8 @@ enum {
|
|
|
ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
|
|
|
ALC668_FIXUP_HEADSET_MODE,
|
|
|
ALC662_FIXUP_BASS_CHMAP,
|
|
|
+ ALC662_FIXUP_BASS_1A,
|
|
|
+ ALC662_FIXUP_BASS_1A_CHMAP,
|
|
|
};
|
|
|
|
|
|
static const struct hda_fixup alc662_fixups[] = {
|
|
@@ -4878,6 +4927,19 @@ static const struct hda_fixup alc662_fixups[] = {
|
|
|
.chained = true,
|
|
|
.chain_id = ALC662_FIXUP_ASUS_MODE4
|
|
|
},
|
|
|
+ [ALC662_FIXUP_BASS_1A] = {
|
|
|
+ .type = HDA_FIXUP_PINS,
|
|
|
+ .v.pins = (const struct hda_pintbl[]) {
|
|
|
+ {0x1a, 0x80106111}, /* bass speaker */
|
|
|
+ {}
|
|
|
+ },
|
|
|
+ },
|
|
|
+ [ALC662_FIXUP_BASS_1A_CHMAP] = {
|
|
|
+ .type = HDA_FIXUP_FUNC,
|
|
|
+ .v.func = alc662_fixup_bass_chmap,
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC662_FIXUP_BASS_1A,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static const struct snd_pci_quirk alc662_fixup_tbl[] = {
|
|
@@ -4890,8 +4952,10 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
|
|
|
+ SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x1028, 0x0626, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
|
|
|
SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
|
|
|
+ SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_BASS_1A_CHMAP),
|
|
|
SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
|
|
|
SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_CHMAP),
|
|
|
SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
|