提交 bf68665d 编写于 作者: T Takashi Iwai

ALSA: hda - Avoid codec D3 for keeping mute LED up on Lenovo Yxx0

The GPIO line used for the mute LED control on Lenovo Yxx0 laptops is
cleared unexpectedly when the codec goes to D3, typically by
power-saving.  For avoiding it, add a power filter in the fixup.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=16373Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 20c8cd59
...@@ -4894,6 +4894,17 @@ static void alc662_led_gpio1_mute_hook(void *private_data, int enabled) ...@@ -4894,6 +4894,17 @@ static void alc662_led_gpio1_mute_hook(void *private_data, int enabled)
spec->gpio_led); spec->gpio_led);
} }
/* avoid D3 for keeping GPIO up */
static unsigned int gpio_led_power_filter(struct hda_codec *codec,
hda_nid_t nid,
unsigned int power_state)
{
struct alc_spec *spec = codec->spec;
if (nid == codec->afg && power_state == AC_PWRST_D3 && spec->gpio_led)
return AC_PWRST_D0;
return power_state;
}
static void alc662_fixup_led_gpio1(struct hda_codec *codec, static void alc662_fixup_led_gpio1(struct hda_codec *codec,
const struct hda_fixup *fix, int action) const struct hda_fixup *fix, int action)
{ {
...@@ -4908,6 +4919,7 @@ static void alc662_fixup_led_gpio1(struct hda_codec *codec, ...@@ -4908,6 +4919,7 @@ static void alc662_fixup_led_gpio1(struct hda_codec *codec,
spec->gen.vmaster_mute.hook = alc662_led_gpio1_mute_hook; spec->gen.vmaster_mute.hook = alc662_led_gpio1_mute_hook;
spec->gpio_led = 0; spec->gpio_led = 0;
snd_hda_add_verbs(codec, gpio_init); snd_hda_add_verbs(codec, gpio_init);
codec->power_filter = gpio_led_power_filter;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册