summaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/eeepc-wmi.c
diff options
context:
space:
mode:
authorAceLan Kao <acelan.kao@canonical.com>2012-03-20 09:53:09 +0100
committerMatthew Garrett <mjg@redhat.com>2012-03-26 15:05:43 -0400
commit6e0044bedc1fc94a61cc32fa25dcab9a4e4a9218 (patch)
treec3f6c0ee73a93f7ae8bb9fdfd448c189d0250511 /drivers/platform/x86/eeepc-wmi.c
parentc87992d1fa51a6a3d8f0e980ca4d2bdec7e78a17 (diff)
downloadop-kernel-dev-6e0044bedc1fc94a61cc32fa25dcab9a4e4a9218.zip
op-kernel-dev-6e0044bedc1fc94a61cc32fa25dcab9a4e4a9218.tar.gz
asus-wmi: store backlight power status for AIO machine
Due to some implementation reasons, ASUS ET2012 All-in-One machines can't report the correct backlight power status, it will always return 1. To track the backlight power status correctly, we have to store the status by ourselves. BTW, by the BIOS design, the backlight power will be turn on/off sequently, no matter what the value of the parameter will be. More over, the brightness adjustment command will turn on the backlight power. Those behaviors will make us fail to track the backlight power status. For example, While we are trying to turn on the backlight power, we will send out the brightness adjustment command and then trying to figure out if we have to turn on the backlight power, then send out the command. But, the real case is that, the backlight power turns on while sending the brightness adjustment command, and then we send out the command to turn on the backlight power, it actually will turn off the backlight power and the backlight power status we recorded becomes wrong. So, we have to seperate these two commands by a if statement. Signed-off-by: AceLan Kao <acelan.kao@canonical.com> Signed-off-by: Corentin Chary <corentin.chary@gmail.com> Signed-off-by: Matthew Garrett <mjg@redhat.com>
Diffstat (limited to 'drivers/platform/x86/eeepc-wmi.c')
-rw-r--r--drivers/platform/x86/eeepc-wmi.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/platform/x86/eeepc-wmi.c b/drivers/platform/x86/eeepc-wmi.c
index 67186e6..9f8ccf9 100644
--- a/drivers/platform/x86/eeepc-wmi.c
+++ b/drivers/platform/x86/eeepc-wmi.c
@@ -32,6 +32,7 @@
#include <linux/input.h>
#include <linux/input/sparse-keymap.h>
#include <linux/dmi.h>
+#include <linux/fb.h>
#include <acpi/acpi_bus.h>
#include "asus-wmi.h"
@@ -98,8 +99,13 @@ static struct quirk_entry quirk_asus_1000h = {
.hotplug_wireless = true,
};
+static struct quirk_entry quirk_asus_et2012_type1 = {
+ .store_backlight_power = true,
+};
+
static struct quirk_entry quirk_asus_et2012_type3 = {
.scalar_panel_brightness = true,
+ .store_backlight_power = true,
};
static int dmi_matched(const struct dmi_system_id *dmi)
@@ -111,10 +117,12 @@ static int dmi_matched(const struct dmi_system_id *dmi)
if (unlikely(strncmp(model, "ET2012", 6) == 0)) {
const struct dmi_device *dev = NULL;
char oemstring[30];
- while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING, NULL,
- dev))) {
+ 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')
+ quirks = &quirk_asus_et2012_type1;
+ else if (oemstring[18] == '3')
quirks = &quirk_asus_et2012_type3;
break;
}
@@ -202,6 +210,7 @@ static int eeepc_wmi_probe(struct platform_device *pdev)
static void eeepc_wmi_quirks(struct asus_wmi_driver *driver)
{
driver->wapf = -1;
+ driver->panel_power = FB_BLANK_UNBLANK;
driver->quirks = &quirk_asus_unknown;
driver->quirks->hotplug_wireless = hotplug_wireless;
dmi_check_system(asus_quirks);
OpenPOWER on IntegriCloud