|
@@ -883,6 +883,7 @@ static struct alc_codec_rename_pci_table rename_pci_tbl[] = {
|
|
|
{ 0x10ec0668, 0x1028, 0, "ALC3661" },
|
|
|
{ 0x10ec0275, 0x1028, 0, "ALC3260" },
|
|
|
{ 0x10ec0899, 0x1028, 0, "ALC3861" },
|
|
|
+ { 0x10ec0298, 0x1028, 0, "ALC3266" },
|
|
|
{ 0x10ec0670, 0x1025, 0, "ALC669X" },
|
|
|
{ 0x10ec0676, 0x1025, 0, "ALC679X" },
|
|
|
{ 0x10ec0282, 0x1043, 0, "ALC3229" },
|
|
@@ -3673,6 +3674,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
|
|
alc_process_coef_fw(codec, coef0293);
|
|
|
snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
|
|
break;
|
|
|
+ case 0x10ec0662:
|
|
|
+ snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
|
|
+ snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
|
|
+ break;
|
|
|
case 0x10ec0668:
|
|
|
alc_write_coef_idx(codec, 0x11, 0x0001);
|
|
|
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
|
@@ -3738,7 +3743,6 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
|
|
case 0x10ec0288:
|
|
|
alc_process_coef_fw(codec, coef0288);
|
|
|
break;
|
|
|
- break;
|
|
|
case 0x10ec0292:
|
|
|
alc_process_coef_fw(codec, coef0292);
|
|
|
break;
|
|
@@ -4012,7 +4016,7 @@ static void alc_update_headset_mode(struct hda_codec *codec)
|
|
|
if (new_headset_mode != ALC_HEADSET_MODE_MIC) {
|
|
|
snd_hda_set_pin_ctl_cache(codec, hp_pin,
|
|
|
AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
|
|
|
- if (spec->headphone_mic_pin)
|
|
|
+ if (spec->headphone_mic_pin && spec->headphone_mic_pin != hp_pin)
|
|
|
snd_hda_set_pin_ctl_cache(codec, spec->headphone_mic_pin,
|
|
|
PIN_VREFHIZ);
|
|
|
}
|
|
@@ -4215,6 +4219,18 @@ static void alc_fixup_dell_xps13(struct hda_codec *codec,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void alc_fixup_headset_mode_alc662(struct hda_codec *codec,
|
|
|
+ const struct hda_fixup *fix, int action)
|
|
|
+{
|
|
|
+ struct alc_spec *spec = codec->spec;
|
|
|
+
|
|
|
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
|
|
|
+ spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
|
|
|
+ spec->gen.hp_mic = 1; /* Mic-in is same pin as headphone */
|
|
|
+ } else
|
|
|
+ alc_fixup_headset_mode(codec, fix, action);
|
|
|
+}
|
|
|
+
|
|
|
static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
|
|
|
const struct hda_fixup *fix, int action)
|
|
|
{
|
|
@@ -5119,6 +5135,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
|
|
|
SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
|
|
|
SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
|
|
+ SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
|
|
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
|
|
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
|
|
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
|
|
@@ -5148,6 +5165,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
|
|
|
SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
|
|
|
+ SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
|
|
|
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),
|
|
@@ -5345,6 +5363,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
|
|
{0x17, 0x40000000},
|
|
|
{0x1d, 0x40700001},
|
|
|
{0x21, 0x02211050}),
|
|
|
+ SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5548", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
|
|
+ ALC255_STANDARD_PINS,
|
|
|
+ {0x12, 0x90a60180},
|
|
|
+ {0x14, 0x90170130},
|
|
|
+ {0x17, 0x40000000},
|
|
|
+ {0x1d, 0x40700001},
|
|
|
+ {0x21, 0x02211040}),
|
|
|
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
|
|
ALC256_STANDARD_PINS,
|
|
|
{0x13, 0x40000000}),
|
|
@@ -5598,7 +5623,8 @@ static int patch_alc269(struct hda_codec *codec)
|
|
|
|
|
|
spec = codec->spec;
|
|
|
spec->gen.shared_mic_vref_pin = 0x18;
|
|
|
- codec->power_save_node = 1;
|
|
|
+ if (codec->core.vendor_id != 0x10ec0292)
|
|
|
+ codec->power_save_node = 1;
|
|
|
|
|
|
snd_hda_pick_fixup(codec, alc269_fixup_models,
|
|
|
alc269_fixup_tbl, alc269_fixups);
|
|
@@ -6079,7 +6105,9 @@ enum {
|
|
|
ALC662_FIXUP_NO_JACK_DETECT,
|
|
|
ALC662_FIXUP_ZOTAC_Z68,
|
|
|
ALC662_FIXUP_INV_DMIC,
|
|
|
+ ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
|
|
|
ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
|
|
|
+ ALC662_FIXUP_HEADSET_MODE,
|
|
|
ALC668_FIXUP_HEADSET_MODE,
|
|
|
ALC662_FIXUP_BASS_MODE4_CHMAP,
|
|
|
ALC662_FIXUP_BASS_16,
|
|
@@ -6272,6 +6300,20 @@ static const struct hda_fixup alc662_fixups[] = {
|
|
|
.chained = true,
|
|
|
.chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
|
|
|
},
|
|
|
+ [ALC662_FIXUP_DELL_MIC_NO_PRESENCE] = {
|
|
|
+ .type = HDA_FIXUP_PINS,
|
|
|
+ .v.pins = (const struct hda_pintbl[]) {
|
|
|
+ { 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
|
|
|
+ /* headphone mic by setting pin control of 0x1b (headphone out) to in + vref_50 */
|
|
|
+ { }
|
|
|
+ },
|
|
|
+ .chained = true,
|
|
|
+ .chain_id = ALC662_FIXUP_HEADSET_MODE
|
|
|
+ },
|
|
|
+ [ALC662_FIXUP_HEADSET_MODE] = {
|
|
|
+ .type = HDA_FIXUP_FUNC,
|
|
|
+ .v.func = alc_fixup_headset_mode_alc662,
|
|
|
+ },
|
|
|
[ALC668_FIXUP_DELL_MIC_NO_PRESENCE] = {
|
|
|
.type = HDA_FIXUP_PINS,
|
|
|
.v.pins = (const struct hda_pintbl[]) {
|
|
@@ -6423,6 +6465,18 @@ static const struct hda_model_fixup alc662_fixup_models[] = {
|
|
|
};
|
|
|
|
|
|
static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
|
|
|
+ SND_HDA_PIN_QUIRK(0x10ec0662, 0x1028, "Dell", ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
|
|
|
+ {0x12, 0x4004c000},
|
|
|
+ {0x14, 0x01014010},
|
|
|
+ {0x15, 0x411111f0},
|
|
|
+ {0x16, 0x411111f0},
|
|
|
+ {0x18, 0x01a19020},
|
|
|
+ {0x19, 0x411111f0},
|
|
|
+ {0x1a, 0x0181302f},
|
|
|
+ {0x1b, 0x0221401f},
|
|
|
+ {0x1c, 0x411111f0},
|
|
|
+ {0x1d, 0x4054c601},
|
|
|
+ {0x1e, 0x411111f0}),
|
|
|
SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
|
|
|
{0x12, 0x99a30130},
|
|
|
{0x14, 0x90170110},
|