diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index c5405f319cfe..6151ece62546 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -4894,6 +4894,17 @@ static void alc662_led_gpio1_mute_hook(void *private_data, int enabled) 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, const struct hda_fixup *fix, int action) { @@ -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->gpio_led = 0; snd_hda_add_verbs(codec, gpio_init); + codec->power_filter = gpio_led_power_filter; } }