Some ASUS ET2012 All-in-One machines will handle the brightness events
from BIOS, but we still need the key events to inform X to draw the
brightness OSD.

Signed-off-by: AceLan Kao <[email protected]>
---
 drivers/platform/x86/asus-wmi.c  |    8 +++++++-
 drivers/platform/x86/asus-wmi.h  |    1 +
 drivers/platform/x86/eeepc-wmi.c |    7 ++++++-
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 48e96f3..80c05ff 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -1272,7 +1272,13 @@ static void asus_wmi_notify(u32 value, void *context)
 
        if (code == NOTIFY_BRNUP_MIN || code == NOTIFY_BRNDOWN_MIN) {
                if (!acpi_video_backlight_support())
-                       asus_wmi_backlight_notify(asus, orig_code);
+               {
+                       if (unlikely(asus->driver->need_brightness_event))
+                               sparse_keymap_report_event(asus->inputdev,
+                                       code, key_value, autorelease);
+                       else
+                               asus_wmi_backlight_notify(asus, orig_code);
+               }
        } else if (!sparse_keymap_report_event(asus->inputdev, code,
                                               key_value, autorelease))
                pr_info("Unknown key %x pressed\n", code);
diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h
index 45fb62c..d6683ba 100644
--- a/drivers/platform/x86/asus-wmi.h
+++ b/drivers/platform/x86/asus-wmi.h
@@ -38,6 +38,7 @@ struct asus_wmi;
 struct asus_wmi_driver {
        bool                    hotplug_wireless;
        bool                    scalar_panel_brightness;
+       bool                    need_brightness_event;
        int                     wapf;
 
        const char              *name;
diff --git a/drivers/platform/x86/eeepc-wmi.c b/drivers/platform/x86/eeepc-wmi.c
index c5f4c64..311f317 100644
--- a/drivers/platform/x86/eeepc-wmi.c
+++ b/drivers/platform/x86/eeepc-wmi.c
@@ -63,6 +63,8 @@ MODULE_PARM_DESC(hotplug_wireless,
 
 static const struct key_entry eeepc_wmi_keymap[] = {
        /* Sleep already handled via generic ACPI code */
+       { KE_KEY, 0x11, { KEY_BRIGHTNESSUP } },
+       { KE_KEY, 0x20, { KEY_BRIGHTNESSDOWN } },
        { KE_KEY, 0x30, { KEY_VOLUMEUP } },
        { KE_KEY, 0x31, { KEY_VOLUMEDOWN } },
        { KE_KEY, 0x32, { KEY_MUTE } },
@@ -167,7 +169,9 @@ static void eeepc_dmi_check(struct asus_wmi_driver *driver)
                char oemstring[30];
                while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING, NULL, 
dev))) {
                        if (sscanf(dev->name, "AEMS%24c", oemstring) == 1) {
-                               if (oemstring[18] == '3')
+                               if (oemstring[18] == '1')
+                                       driver->need_brightness_event = true;
+                               else if (oemstring[18] == '3')
                                        driver->scalar_panel_brightness = true;
                                break;
                        }
@@ -179,6 +183,7 @@ static void eeepc_wmi_quirks(struct asus_wmi_driver *driver)
 {
        driver->hotplug_wireless = hotplug_wireless;
        driver->scalar_panel_brightness = false;
+       driver->need_brightness_event = false;
        driver->wapf = -1;
        eeepc_dmi_check(driver);
 }
-- 
1.7.9

--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" 
in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to