}
 
 /* Input **********************************************************************/
+static void asus_wmi_tablet_sw_init(struct asus_wmi *asus, u32 dev_id, int event_code)
+{
+       struct device *dev = &asus->platform_device->dev;
+       int result;
+
+       result = asus_wmi_get_devstate_simple(asus, dev_id);
+       if (result < 0)
+               asus->driver->quirks->tablet_switch_mode = asus_wmi_no_tablet_switch;
+       if (result >= 0) {
+               input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE);
+               input_report_switch(asus->inputdev, SW_TABLET_MODE, result);
+       } else if (result == -ENODEV) {
+               dev_err(dev, "This device has tablet-mode-switch quirk but got ENODEV checking it. This is a bug.");
+       } else {
+               dev_err(dev, "Error checking for tablet-mode-switch: %d\n", result);
+       }
+}
 
 static int asus_wmi_input_init(struct asus_wmi *asus)
 {
-       struct device *dev;
-       int err, result;
-
-       dev = &asus->platform_device->dev;
+       struct device *dev = &asus->platform_device->dev;
+       int err;
 
        asus->inputdev = input_allocate_device();
        if (!asus->inputdev)
        case asus_wmi_no_tablet_switch:
                break;
        case asus_wmi_kbd_dock_devid:
-               result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_KBD_DOCK);
-               if (result >= 0) {
-                       input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE);
-                       input_report_switch(asus->inputdev, SW_TABLET_MODE, !result);
-               } else if (result != -ENODEV) {
-                       dev_err(dev, "Error checking for keyboard-dock: %d\n", result);
-               }
+               asus_wmi_tablet_sw_init(asus, ASUS_WMI_DEVID_KBD_DOCK, NOTIFY_KBD_DOCK_CHANGE);
                break;
        case asus_wmi_lid_flip_devid:
-               result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_LID_FLIP);
-               if (result < 0)
-                       asus->driver->quirks->tablet_switch_mode = asus_wmi_no_tablet_switch;
-               if (result >= 0) {
-                       input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE);
-                       input_report_switch(asus->inputdev, SW_TABLET_MODE, result);
-               } else if (result == -ENODEV) {
-                       dev_err(dev, "This device has lid_flip quirk but got ENODEV checking it. This is a bug.");
-               } else {
-                       dev_err(dev, "Error checking for lid-flip: %d\n", result);
-               }
+               asus_wmi_tablet_sw_init(asus, ASUS_WMI_DEVID_LID_FLIP, NOTIFY_LID_FLIP);
                break;
        case asus_wmi_lid_flip_rog_devid:
-               result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_LID_FLIP_ROG);
-               if (result < 0)
-                       asus->driver->quirks->tablet_switch_mode = asus_wmi_no_tablet_switch;
-               if (result >= 0) {
-                       input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE);
-                       input_report_switch(asus->inputdev, SW_TABLET_MODE, result);
-               } else if (result == -ENODEV) {
-                       dev_err(dev, "This device has lid-flip-rog quirk but got ENODEV checking it. This is a bug.");
-               } else {
-                       dev_err(dev, "Error checking for lid-flip: %d\n", result);
-               }
+               asus_wmi_tablet_sw_init(asus, ASUS_WMI_DEVID_LID_FLIP_ROG, NOTIFY_LID_FLIP_ROG);
                break;
        }