int wireless_status;
        bool have_rsts;
+       int lcd_state;
 
        acpi_handle handle;     /* the handle of the hotk device */
        char status;            /* status of the hotk, for LEDs, ... */
 /*
  * Backlight device
  */
-static int get_lcd_state(struct asus_laptop *asus)
+static int asus_lcd_status(struct asus_laptop *asus)
 {
-       return read_status(asus, LCD_ON);
+       return asus->lcd_state;
 }
 
-static int set_lcd_state(struct asus_laptop *asus, int value)
+static int asus_lcd_set(struct asus_laptop *asus, int value)
 {
        int lcd = 0;
        acpi_status status = 0;
 
-       lcd = value ? 1 : 0;
+       lcd = !!value;
 
-       if (lcd == get_lcd_state(asus))
+       if (lcd == asus_lcd_status(asus))
                return 0;
 
-       if (lcd_switch_handle) {
-               status = acpi_evaluate_object(lcd_switch_handle,
-                                             NULL, NULL, NULL);
+       if (!lcd_switch_handle)
+               return -ENODEV;
+
+       status = acpi_evaluate_object(lcd_switch_handle,
+                                     NULL, NULL, NULL);
 
-               if (ACPI_FAILURE(status))
-                       pr_warning("Error switching LCD\n");
+       if (ACPI_FAILURE(status)) {
+               pr_warning("Error switching LCD\n");
+               return -ENODEV;
        }
 
-       write_status(asus, NULL, lcd, LCD_ON);
+       asus->lcd_state = lcd;
        return 0;
 }
 
 {
        struct backlight_device *bd = asus->backlight_device;
 
+       asus->lcd_state = (blank == FB_BLANK_UNBLANK);
+
        if (bd) {
                bd->props.power = blank;
                backlight_update_status(bd);
                return rv;
 
        value = (bd->props.power == FB_BLANK_UNBLANK) ? 1 : 0;
-       return set_lcd_state(asus, value);
+       return asus_lcd_set(asus, value);
 }
 
 static struct backlight_ops asusbl_ops = {
         * We need to tell the backlight device when the backlight power is
         * switched
         */
-       if (event == ATKD_LCD_ON) {
-               write_status(asus, NULL, 1, LCD_ON);
+       if (event == ATKD_LCD_ON)
                lcd_blank(asus, FB_BLANK_UNBLANK);
-       } else if (event == ATKD_LCD_OFF) {
-               write_status(asus, NULL, 0, LCD_ON);
+       else if (event == ATKD_LCD_OFF)
                lcd_blank(asus, FB_BLANK_POWERDOWN);
-       }
 
        /* TODO Find a better way to handle events count. */
        count = asus->event_count[event % 128]++;