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 <acelan.kao@xxxxxxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html