Re: [PATCH] platform/x86: asus-wmi: Only notify kbd LED hw_change by fn-key pressed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 22, 2018 at 1:00 PM Daniel Drake <drake@xxxxxxxxxxxx> wrote:
>
> From: Jian-Hong Pan <jian-hong@xxxxxxxxxxxx>
>
> Since commit dbb3d78f61ba ("platform/x86: asus-wmi: Call led hw_changed
> API on kbd brightness change"), asus-wmi directly changes the keyboard
> LED brightness when the keyboard brightness keys are pressed,
> raising the appropriate notification.
>
> However, this notification was unintentionally also being raised during
> boot and resume from suspend. This was resulting in userspace showing
> the keyboard LED OSD on resume for no good reason.
>
> Move the keyboard LED brightness changed notification
> from kbd_led_update to the new kbd_led_set_by_kbd function which is only
> called from the keyboard brightness function keys codepath.
>

Pushed to my review and testing queue, thanks!


> Signed-off-by: Jian-Hong Pan <jian-hong@xxxxxxxxxxxx>
> Signed-off-by: Daniel Drake <drake@xxxxxxxxxxxx>
> ---
>  drivers/platform/x86/asus-wmi.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 9441cce636e6..a805227b31e1 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -467,7 +467,6 @@ static void kbd_led_update(struct asus_wmi *asus)
>                 ctrl_param = 0x80 | (asus->kbd_led_wk & 0x7F);
>
>         asus_wmi_set_devstate(ASUS_WMI_DEVID_KBD_BACKLIGHT, ctrl_param, NULL);
> -       led_classdev_notify_brightness_hw_changed(&asus->kbd_led, asus->kbd_led_wk);
>  }
>
>  static int kbd_led_read(struct asus_wmi *asus, int *level, int *env)
> @@ -521,6 +520,14 @@ static void kbd_led_set(struct led_classdev *led_cdev,
>         do_kbd_led_set(led_cdev, value);
>  }
>
> +static void kbd_led_set_by_kbd(struct asus_wmi *asus, enum led_brightness value)
> +{
> +       struct led_classdev *led_cdev = &asus->kbd_led;
> +
> +       do_kbd_led_set(led_cdev, value);
> +       led_classdev_notify_brightness_hw_changed(led_cdev, asus->kbd_led_wk);
> +}
> +
>  static enum led_brightness kbd_led_get(struct led_classdev *led_cdev)
>  {
>         struct asus_wmi *asus;
> @@ -1759,18 +1766,18 @@ static void asus_wmi_notify(u32 value, void *context)
>         }
>
>         if (code == NOTIFY_KBD_BRTUP) {
> -               do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk + 1);
> +               kbd_led_set_by_kbd(asus, asus->kbd_led_wk + 1);
>                 goto exit;
>         }
>         if (code == NOTIFY_KBD_BRTDWN) {
> -               do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk - 1);
> +               kbd_led_set_by_kbd(asus, asus->kbd_led_wk - 1);
>                 goto exit;
>         }
>         if (code == NOTIFY_KBD_BRTTOGGLE) {
>                 if (asus->kbd_led_wk == asus->kbd_led.max_brightness)
> -                       do_kbd_led_set(&asus->kbd_led, 0);
> +                       kbd_led_set_by_kbd(asus, 0);
>                 else
> -                       do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk + 1);
> +                       kbd_led_set_by_kbd(asus, asus->kbd_led_wk + 1);
>                 goto exit;
>         }
>
> --
> 2.17.1
>


-- 
With Best Regards,
Andy Shevchenko



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux