Commit 4bfd6247 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda/via: Fix runtime PM for Clevo W35xSS

Clevo W35xSS_370SS with VIA codec has had the runtime PM problem that
looses the power state of some nodes after the runtime resume.  This
was worked around by disabling the default runtime PM via a denylist
entry.  Since 5.10.x made the runtime PM applied (casually) even
though it's disabled in the denylist, this problem was revisited.  The
result was that disabling power_save_node feature suffices for the
runtime PM problem.

This patch implements the disablement of power_save_node feature in
VIA codec for the device.  It also drops the former denylist entry,
too, as the runtime PM should work in the codec side properly now.

Fixes: b529ef24 ("ALSA: hda: Add Clevo W35xSS_370SS to the power_save blacklist")
Reported-by: default avatarChristian Labisch <clnetbox@gmail.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210104153046.19993-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b0e13063
...@@ -2220,8 +2220,6 @@ static const struct snd_pci_quirk power_save_denylist[] = { ...@@ -2220,8 +2220,6 @@ static const struct snd_pci_quirk power_save_denylist[] = {
SND_PCI_QUIRK(0x1849, 0x7662, "Asrock H81M-HDS", 0), SND_PCI_QUIRK(0x1849, 0x7662, "Asrock H81M-HDS", 0),
/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */ /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
SND_PCI_QUIRK(0x1043, 0x8733, "Asus Prime X370-Pro", 0), SND_PCI_QUIRK(0x1043, 0x8733, "Asus Prime X370-Pro", 0),
/* https://bugzilla.redhat.com/show_bug.cgi?id=1581607 */
SND_PCI_QUIRK(0x1558, 0x3501, "Clevo W35xSS_370SS", 0),
/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */ /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
SND_PCI_QUIRK(0x1558, 0x6504, "Clevo W65_67SB", 0), SND_PCI_QUIRK(0x1558, 0x6504, "Clevo W65_67SB", 0),
/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */ /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
......
...@@ -1002,6 +1002,7 @@ static const struct hda_verb vt1802_init_verbs[] = { ...@@ -1002,6 +1002,7 @@ static const struct hda_verb vt1802_init_verbs[] = {
enum { enum {
VIA_FIXUP_INTMIC_BOOST, VIA_FIXUP_INTMIC_BOOST,
VIA_FIXUP_ASUS_G75, VIA_FIXUP_ASUS_G75,
VIA_FIXUP_POWER_SAVE,
}; };
static void via_fixup_intmic_boost(struct hda_codec *codec, static void via_fixup_intmic_boost(struct hda_codec *codec,
...@@ -1011,6 +1012,13 @@ static void via_fixup_intmic_boost(struct hda_codec *codec, ...@@ -1011,6 +1012,13 @@ static void via_fixup_intmic_boost(struct hda_codec *codec,
override_mic_boost(codec, 0x30, 0, 2, 40); override_mic_boost(codec, 0x30, 0, 2, 40);
} }
static void via_fixup_power_save(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
{
if (action == HDA_FIXUP_ACT_PRE_PROBE)
codec->power_save_node = 0;
}
static const struct hda_fixup via_fixups[] = { static const struct hda_fixup via_fixups[] = {
[VIA_FIXUP_INTMIC_BOOST] = { [VIA_FIXUP_INTMIC_BOOST] = {
.type = HDA_FIXUP_FUNC, .type = HDA_FIXUP_FUNC,
...@@ -1025,11 +1033,16 @@ static const struct hda_fixup via_fixups[] = { ...@@ -1025,11 +1033,16 @@ static const struct hda_fixup via_fixups[] = {
{ } { }
} }
}, },
[VIA_FIXUP_POWER_SAVE] = {
.type = HDA_FIXUP_FUNC,
.v.func = via_fixup_power_save,
},
}; };
static const struct snd_pci_quirk vt2002p_fixups[] = { static const struct snd_pci_quirk vt2002p_fixups[] = {
SND_PCI_QUIRK(0x1043, 0x1487, "Asus G75", VIA_FIXUP_ASUS_G75), SND_PCI_QUIRK(0x1043, 0x1487, "Asus G75", VIA_FIXUP_ASUS_G75),
SND_PCI_QUIRK(0x1043, 0x8532, "Asus X202E", VIA_FIXUP_INTMIC_BOOST), SND_PCI_QUIRK(0x1043, 0x8532, "Asus X202E", VIA_FIXUP_INTMIC_BOOST),
SND_PCI_QUIRK(0x1558, 0x3501, "Clevo W35xSS_370SS", VIA_FIXUP_POWER_SAVE),
{} {}
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment