[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1298712045-17671-9-git-send-email-corentincj@iksaif.net>
Date: Sat, 26 Feb 2011 10:20:37 +0100
From: Corentin Chary <corentincj@...aif.net>
To: Matthew Garrett <mjg@...hat.com>
Cc: Dmitry Torokhov <dmitry.torokhov@...il.com>,
Corentin Chary <corentincj@...aif.net>,
acpi4asus-user@...ts.sourceforge.net (open list:ASUS NOTEBOOKS AN...),
platform-driver-x86@...r.kernel.org (open list:ASUS NOTEBOOKS AN...),
linux-kernel@...r.kernel.org (open list)
Subject: [PATCH 08/14] asus-wmi: fix and clean backlight code
Signed-off-by: Corentin Chary <corentincj@...aif.net>
---
drivers/platform/x86/asus-wmi.c | 44 +++++++++++++++++++++++++-------------
1 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index fd5b08ee..adf7b05 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -765,9 +765,8 @@ static int read_backlight_power(struct asus_wmi *asus)
return ret ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN;
}
-static int read_brightness(struct backlight_device *bd)
+static int read_brightness_max(struct asus_wmi *asus)
{
- struct asus_wmi *asus = bl_get_data(bd);
u32 retval;
int err;
@@ -776,6 +775,25 @@ static int read_brightness(struct backlight_device *bd)
if (err < 0)
return err;
+ retval = retval & ASUS_WMI_DSTS_MAX_BRIGTH_MASK;
+ retval >>= 8;
+
+ if (!retval)
+ return -ENODEV;
+
+ return retval;
+}
+
+static int read_brightness(struct backlight_device *bd)
+{
+ struct asus_wmi *asus = bl_get_data(bd);
+ u32 retval, err;
+
+ err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_BRIGHTNESS, &retval);
+
+ if (err < 0)
+ return err;
+
return retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK;
}
@@ -799,7 +817,7 @@ static int update_bl_status(struct backlight_device *bd)
err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT,
ctrl_param, NULL);
}
- return 0;
+ return err;
}
static const struct backlight_ops asus_wmi_bl_ops = {
@@ -832,23 +850,19 @@ static int asus_wmi_backlight_init(struct asus_wmi *asus)
int max;
int power;
- max = asus_wmi_get_devstate_bits(asus, ASUS_WMI_DEVID_BRIGHTNESS,
- ASUS_WMI_DSTS_MAX_BRIGTH_MASK);
- power = read_backlight_power(asus);
+ max = read_brightness_max(asus);
- if (max < 0 && power < 0) {
- /* Try to keep the original error */
- if (max == -ENODEV && power == -ENODEV)
- return -ENODEV;
- if (max != -ENODEV)
- return max;
- else
- return power;
- }
if (max == -ENODEV)
max = 0;
+ else if (max < 0)
+ return max;
+
+ power = read_backlight_power(asus);
+
if (power == -ENODEV)
power = FB_BLANK_UNBLANK;
+ else if (power < 0)
+ return power;
memset(&props, 0, sizeof(struct backlight_properties));
props.max_brightness = max;
--
1.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists