On Fri, Mar 9, 2012 at 3:17 AM, AceLan Kao <acelan.kao@xxxxxxxxxxxxx> wrote: > 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); > + } If events are already handled by the BIOS you need to use backlight_notify. Keys are only sent when userspace need to update the backlight by itself. The GUI should only use uevents sent by the backlight device. Is the generic ACPI backlight functional ? Do you have to use acpi_backlight=vendor ? > } 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 > -- Corentin Chary http://xf.iksaif.net ��.n��������+%������w��{.n������_���v��z����n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�