mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 05:20:53 +07:00
ALSA: hda/realtek: Quirk for HP Spectre x360 14 amp setup
commit c3bb2b521944ffbbc8c24b849f81977a9915fb5e upstream. HP Spectre x360 14 model (PCI SSID 103c:87f7) seems requiring a unique setup for its external amp: the GPIO0 needs to be toggled on and off shortly at each device initialization via runtime PM. This patch implements that workaround as well as the model option string, so that users with other devices may try the same workaround more easily. BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=210633 Cc: <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20210215082540.4520-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5c8561ae3e
commit
1365914e02
@ -4291,6 +4291,28 @@ static void alc280_fixup_hp_gpio4(struct hda_codec *codec,
|
||||
}
|
||||
}
|
||||
|
||||
/* HP Spectre x360 14 model needs a unique workaround for enabling the amp;
|
||||
* it needs to toggle the GPIO0 once on and off at each time (bko#210633)
|
||||
*/
|
||||
static void alc245_fixup_hp_x360_amp(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
||||
switch (action) {
|
||||
case HDA_FIXUP_ACT_PRE_PROBE:
|
||||
spec->gpio_mask |= 0x01;
|
||||
spec->gpio_dir |= 0x01;
|
||||
break;
|
||||
case HDA_FIXUP_ACT_INIT:
|
||||
/* need to toggle GPIO to enable the amp */
|
||||
alc_update_gpio_data(codec, 0x01, true);
|
||||
msleep(100);
|
||||
alc_update_gpio_data(codec, 0x01, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void alc_update_coef_led(struct hda_codec *codec,
|
||||
struct alc_coef_led *led,
|
||||
bool polarity, bool on)
|
||||
@ -6277,6 +6299,7 @@ enum {
|
||||
ALC280_FIXUP_HP_DOCK_PINS,
|
||||
ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
|
||||
ALC280_FIXUP_HP_9480M,
|
||||
ALC245_FIXUP_HP_X360_AMP,
|
||||
ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC288_FIXUP_DELL_XPS_13,
|
||||
@ -6982,6 +7005,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc280_fixup_hp_9480m,
|
||||
},
|
||||
[ALC245_FIXUP_HP_X360_AMP] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc245_fixup_hp_x360_amp,
|
||||
},
|
||||
[ALC288_FIXUP_DELL_HEADSET_MODE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_headset_mode_dell_alc288,
|
||||
@ -7996,6 +8023,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
|
||||
SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
|
||||
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
@ -8368,6 +8396,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
||||
{.id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc298-samsung-headphone"},
|
||||
{.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
|
||||
{.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
|
||||
{.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"},
|
||||
{}
|
||||
};
|
||||
#define ALC225_STANDARD_PINS \
|
||||
|
Loading…
Reference in New Issue
Block a user