*/
 static int read_backlight_power(struct asus_wmi *asus)
 {
-       int ret = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_BACKLIGHT);
+       int ret;
+       if (asus->driver->quirks->store_backlight_power)
+               ret = !asus->driver->panel_power;
+       else
+               ret = asus_wmi_get_devstate_simple(asus,
+                                                  ASUS_WMI_DEVID_BACKLIGHT);
 
        if (ret < 0)
                return ret;
 {
        struct asus_wmi *asus = bl_get_data(bd);
        u32 ctrl_param;
-       int power, err;
-
-       if (asus->driver->quirks->scalar_panel_brightness)
-               ctrl_param = get_scalar_command(bd);
-       else
-               ctrl_param = bd->props.brightness;
-
-       err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BRIGHTNESS,
-                                   ctrl_param, NULL);
-
-       if (err < 0)
-               return err;
+       int power, err = 0;
 
        power = read_backlight_power(asus);
        if (power != -ENODEV && bd->props.power != power) {
                ctrl_param = !!(bd->props.power == FB_BLANK_UNBLANK);
                err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT,
                                            ctrl_param, NULL);
+               if (asus->driver->quirks->store_backlight_power)
+                       asus->driver->panel_power = bd->props.power;
+       } else {
+               if (asus->driver->quirks->scalar_panel_brightness)
+                       ctrl_param = get_scalar_command(bd);
+               else
+                       ctrl_param = bd->props.brightness;
+
+               err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BRIGHTNESS,
+                                           ctrl_param, NULL);
        }
        return err;
 }
 
        asus->backlight_device = bd;
 
+       if (asus->driver->quirks->store_backlight_power)
+               asus->driver->panel_power = power;
+
        bd->props.brightness = read_brightness(bd);
        bd->props.power = power;
        backlight_update_status(bd);
 
 struct quirk_entry {
        bool hotplug_wireless;
        bool scalar_panel_brightness;
+       bool store_backlight_power;
 };
 
 struct asus_wmi_driver {
        int                     wapf;
        int                     brightness;
+       int                     panel_power;
 
        const char              *name;
        struct module           *owner;
 
 #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"
        .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)
        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;
                        }
 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);