|
|
|
@@ -937,6 +937,9 @@ static int alc_init(struct hda_codec *codec)
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define alc_free snd_hda_gen_free
|
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
|
|
|
static inline void alc_shutup(struct hda_codec *codec)
|
|
|
|
|
{
|
|
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
|
@@ -950,9 +953,6 @@ static inline void alc_shutup(struct hda_codec *codec)
|
|
|
|
|
alc_shutup_pins(codec);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define alc_free snd_hda_gen_free
|
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
|
|
|
static void alc_power_eapd(struct hda_codec *codec)
|
|
|
|
|
{
|
|
|
|
|
alc_auto_setup_eapd(codec, false);
|
|
|
|
@@ -966,9 +966,7 @@ static int alc_suspend(struct hda_codec *codec)
|
|
|
|
|
spec->power_hook(codec);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
|
|
|
static int alc_resume(struct hda_codec *codec)
|
|
|
|
|
{
|
|
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
|
@@ -6780,6 +6778,41 @@ static void alc256_fixup_mic_no_presence_and_resume(struct hda_codec *codec,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void alc_fixup_dell4_mic_no_presence_quiet(struct hda_codec *codec,
|
|
|
|
|
const struct hda_fixup *fix,
|
|
|
|
|
int action)
|
|
|
|
|
{
|
|
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
|
|
struct hda_input_mux *imux = &spec->gen.input_mux;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
alc269_fixup_limit_int_mic_boost(codec, fix, action);
|
|
|
|
|
|
|
|
|
|
switch (action) {
|
|
|
|
|
case HDA_FIXUP_ACT_PRE_PROBE:
|
|
|
|
|
/**
|
|
|
|
|
* Set the vref of pin 0x19 (Headset Mic) and pin 0x1b (Headphone Mic)
|
|
|
|
|
* to Hi-Z to avoid pop noises at startup and when plugging and
|
|
|
|
|
* unplugging headphones.
|
|
|
|
|
*/
|
|
|
|
|
snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
|
|
|
|
|
snd_hda_codec_set_pin_target(codec, 0x1b, PIN_VREFHIZ);
|
|
|
|
|
break;
|
|
|
|
|
case HDA_FIXUP_ACT_PROBE:
|
|
|
|
|
/**
|
|
|
|
|
* Make the internal mic (0x12) the default input source to
|
|
|
|
|
* prevent pop noises on cold boot.
|
|
|
|
|
*/
|
|
|
|
|
for (i = 0; i < imux->num_items; i++) {
|
|
|
|
|
if (spec->gen.imux_pins[i] == 0x12) {
|
|
|
|
|
spec->gen.cur_mux[0] = i;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
enum {
|
|
|
|
|
ALC269_FIXUP_GPIO2,
|
|
|
|
|
ALC269_FIXUP_SONY_VAIO,
|
|
|
|
@@ -6821,6 +6854,7 @@ enum {
|
|
|
|
|
ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
|
|
|
|
|
ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
|
|
|
|
|
ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
|
|
|
|
|
ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET,
|
|
|
|
|
ALC269_FIXUP_HEADSET_MODE,
|
|
|
|
|
ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
|
|
|
|
|
ALC269_FIXUP_ASPIRE_HEADSET_MIC,
|
|
|
|
@@ -7012,6 +7046,7 @@ enum {
|
|
|
|
|
ALC245_FIXUP_CS35L41_SPI_4,
|
|
|
|
|
ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED,
|
|
|
|
|
ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED,
|
|
|
|
|
ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static const struct hda_fixup alc269_fixups[] = {
|
|
|
|
@@ -8808,6 +8843,21 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
|
|
|
.chained = true,
|
|
|
|
|
.chain_id = ALC285_FIXUP_HP_MUTE_LED,
|
|
|
|
|
},
|
|
|
|
|
[ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET] = {
|
|
|
|
|
.type = HDA_FIXUP_FUNC,
|
|
|
|
|
.v.func = alc_fixup_dell4_mic_no_presence_quiet,
|
|
|
|
|
.chained = true,
|
|
|
|
|
.chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
|
|
|
|
|
},
|
|
|
|
|
[ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE] = {
|
|
|
|
|
.type = HDA_FIXUP_PINS,
|
|
|
|
|
.v.pins = (const struct hda_pintbl[]) {
|
|
|
|
|
{ 0x19, 0x02a1112c }, /* use as headset mic, without its own jack detect */
|
|
|
|
|
{ }
|
|
|
|
|
},
|
|
|
|
|
.chained = true,
|
|
|
|
|
.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
|
@@ -8898,6 +8948,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x09bf, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x0a2e, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x0a30, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x0a38, "Dell Latitude 7520", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET),
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x0a58, "Dell", ALC255_FIXUP_DELL_HEADSET_MIC),
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x0a61, "Dell XPS 15 9510", ALC289_FIXUP_DUAL_SPK),
|
|
|
|
|
SND_PCI_QUIRK(0x1028, 0x0a62, "Dell Precision 5560", ALC289_FIXUP_DUAL_SPK),
|
|
|
|
@@ -9040,6 +9091,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x8995, "HP EliteBook 855 G9", ALC287_FIXUP_CS35L41_I2C_2),
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x89a4, "HP ProBook 440 G9", ALC236_FIXUP_HP_GPIO_LED),
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x89a6, "HP ProBook 450 G9", ALC236_FIXUP_HP_GPIO_LED),
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x89aa, "HP EliteBook 630 G9", ALC236_FIXUP_HP_GPIO_LED),
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x89ac, "HP EliteBook 640 G9", ALC236_FIXUP_HP_GPIO_LED),
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x89ae, "HP EliteBook 650 G9", ALC236_FIXUP_HP_GPIO_LED),
|
|
|
|
|
SND_PCI_QUIRK(0x103c, 0x89c3, "Zbook Studio G9", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
|
|
|
|
@@ -9290,6 +9342,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
|
|
SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
|
|
|
|
|
SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_SET_COEF_DEFAULTS),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1096, "TongFang GMxMRxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1100, "TongFang GKxNRxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1111, "TongFang GMxZGxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1119, "TongFang GMxZGxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1129, "TongFang GMxZGxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x1147, "TongFang GMxTGxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x115c, "TongFang GMxTGxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d05, 0x121b, "TongFang GMxAGxx", ALC269_FIXUP_NO_SHUTUP),
|
|
|
|
|
SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
|
|
|
|
|
SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
|
|
|
SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
|
|
|
|
@@ -9297,6 +9357,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|
|
|
|
SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
|
|
|
|
|
SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
|
|
|
|
|
SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
|
|
|
|
|
SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
/* Below is a quirk table taken from the old code.
|
|
|
|
|