On Wed, May 16, 2012 at 11:39 AM, AceLan Kao <[email protected]> wrote:
> BugLink: https://bugs.launchpad.net/bugs/1000146
>
> Some h/w that can adjust screen brightness through ACPI functions, but
> can't turn on/off the backlight power correctly. So, we list those h/w in
> quirks and try to turn on/off the backlight power through WMI.
> Signed-off-by: AceLan Kao <[email protected]>
> ---
> drivers/platform/x86/asus-wmi.c | 9 ++++++++-
> drivers/platform/x86/asus-wmi.h | 1 +
> drivers/platform/x86/eeepc-wmi.c | 23 +++++++++++++++++++++++
> 3 files changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 77aadde..beda7fc 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -69,6 +69,7 @@ MODULE_LICENSE("GPL");
> #define NOTIFY_BRNDOWN_MAX 0x2e
> #define NOTIFY_KBD_BRTUP 0xc4
> #define NOTIFY_KBD_BRTDWN 0xc5
> +#define NOTIFY_BACKLIGHT_POWER 0xe9
>
> /* WMI Methods */
> #define ASUS_WMI_METHODID_SPEC 0x43455053 /* BIOS SPECification */
> @@ -1288,6 +1289,11 @@ 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);
> + } else if (asus->driver->quirks->wmi_backlight_power &&
> + code == NOTIFY_BACKLIGHT_POWER) {
> + struct backlight_device *bd = asus->backlight_device;
> + bd->props.power = !bd->props.power;
> + backlight_update_status(bd);
> } else if (!sparse_keymap_report_event(asus->inputdev, code,
> key_value, autorelease))
> pr_info("Unknown key %x pressed\n", code);
> @@ -1681,7 +1687,8 @@ static int asus_wmi_add(struct platform_device *pdev)
> if (err)
> goto fail_rfkill;
>
> - if (!acpi_video_backlight_support()) {
> + if (!acpi_video_backlight_support() ||
> + asus->driver->quirks->wmi_backlight_power) {
So you override any acpi_backlight=[vendor|video] settings ? That
doesn't looks right.
Can't you just send KEY_DISPLAYTOGGLE when the key is pressed, and let
userspace adjust the proper /sys/class/backlight file ?
What does the key do exactly without driver ? Does it just send a
notification or does it also poke the hardware ?
> err = asus_wmi_backlight_init(asus);
> if (err && err != -ENODEV)
> goto fail_backlight;
> diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h
> index d43b667..9c1da8b 100644
> --- a/drivers/platform/x86/asus-wmi.h
> +++ b/drivers/platform/x86/asus-wmi.h
> @@ -39,6 +39,7 @@ struct quirk_entry {
> bool hotplug_wireless;
> bool scalar_panel_brightness;
> bool store_backlight_power;
> + bool wmi_backlight_power;
> int wapf;
> };
>
> diff --git a/drivers/platform/x86/eeepc-wmi.c
> b/drivers/platform/x86/eeepc-wmi.c
> index 6567613..8d31f4e 100644
> --- a/drivers/platform/x86/eeepc-wmi.c
> +++ b/drivers/platform/x86/eeepc-wmi.c
> @@ -107,6 +107,11 @@ static struct quirk_entry quirk_asus_et2012_type3 = {
> .store_backlight_power = true,
> };
>
> +static struct quirk_entry quirk_asus_x101ch = {
> + /* We need this when ACPI function doesn't do this well */
> + .wmi_backlight_power = true,
> +};
> +
> static struct quirk_entry *quirks;
>
> static void et2012_quirks(void)
> @@ -157,6 +162,24 @@ static struct dmi_system_id asus_quirks[] = {
> },
> .driver_data = &quirk_asus_unknown,
> },
> + {
> + .callback = dmi_matched,
> + .ident = "ASUSTeK Computer INC. X101CH",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "X101CH"),
> + },
> + .driver_data = &quirk_asus_x101ch,
> + },
> + {
> + .callback = dmi_matched,
> + .ident = "ASUSTeK Computer INC. 1015CX",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "1015CX"),
> + },
> + .driver_data = &quirk_asus_x101ch,
> + },
> {},
> };
>
> --
> 1.7.9.5
>
> --
> 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
--
Corentin Chary
http://xf.iksaif.net
--
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