OSDN Git Service

platform/x86: asus-wmi: Add keyboard backlight toggle support
authorChris Chiu <chiu@endlessm.com>
Wed, 20 Jun 2018 14:46:45 +0000 (22:46 +0800)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 2 Jul 2018 12:13:40 +0000 (15:13 +0300)
Some ASUS laptops like UX550GE has hotkey (Fn+F7) for keyboard
backlight toggle which would emit the scan code 0xc7 each keypress.
On the UX550GE, the max keyboard brightness level is 3 so the
toggle would not be simply on/off the led but need to be cyclic.
Per ASUS spec, it should increment the brightness for each keypress,
then toggle(off) the LED when it already reached the max level.

Signed-off-by: Chris Chiu <chiu@endlessm.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/platform/x86/asus-wmi.c

index 3944e06..34dcc1a 100644 (file)
@@ -67,6 +67,7 @@ MODULE_LICENSE("GPL");
 #define NOTIFY_BRNDOWN_MAX             0x2e
 #define NOTIFY_KBD_BRTUP               0xc4
 #define NOTIFY_KBD_BRTDWN              0xc5
+#define NOTIFY_KBD_BRTTOGGLE           0xc7
 
 /* WMI Methods */
 #define ASUS_WMI_METHODID_SPEC         0x43455053 /* BIOS SPECification */
@@ -1775,6 +1776,13 @@ static void asus_wmi_notify(u32 value, void *context)
                do_kbd_led_set(&asus->kbd_led, 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);
+               else
+                       do_kbd_led_set(&asus->kbd_led, asus->kbd_led_wk + 1);
+               goto exit;
+       }
 
        if (is_display_toggle(code) &&
            asus->driver->quirks->no_display_toggle)