toshiba_acpi: Move hotkey enabling code to its own function
authorAzael Avalos <coproscefalo@gmail.com>
Fri, 5 Dec 2014 03:22:45 +0000 (20:22 -0700)
committerDarren Hart <dvhart@linux.intel.com>
Wed, 3 Dec 2014 18:10:17 +0000 (10:10 -0800)
The hotkey enabling code is being used by *_setup_keyboard and also by
*_resume.

This patch creates a new function called toshiba_acpi_enable_hotkeys to
be used by these two functions to avoid duplicating code.

Signed-off-by: Azael Avalos <coproscefalo@gmail.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
drivers/platform/x86/toshiba_acpi.c

index f0011a5e967255bbeef3f3b8c8875a705336af3b..0327cf79bacadecf9c65399fd5bd02a3917aee7e 100644 (file)
@@ -1574,6 +1574,28 @@ static umode_t toshiba_sysfs_is_visible(struct kobject *kobj,
        return exists ? attr->mode : 0;
 }
 
+/*
+ * Hotkeys
+ */
+static int toshiba_acpi_enable_hotkeys(struct toshiba_acpi_dev *dev)
+{
+       acpi_status status;
+       u32 result;
+
+       status = acpi_evaluate_object(dev->acpi_dev->handle,
+                                     "ENAB", NULL, NULL);
+       if (ACPI_FAILURE(status))
+               return -ENODEV;
+
+       result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
+       if (result == TOS_FAILURE)
+               return -EIO;
+       else if (result == TOS_NOT_SUPPORTED)
+               return -ENODEV;
+
+       return 0;
+}
+
 static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str,
                                      struct serio *port)
 {
@@ -1638,7 +1660,6 @@ static void toshiba_acpi_report_hotkey(struct toshiba_acpi_dev *dev,
 
 static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
 {
-       acpi_status status;
        acpi_handle ec_handle;
        int error;
        u32 hci_result;
@@ -1665,7 +1686,6 @@ static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
         * supported, so if it's present set up an i8042 key filter
         * for this purpose.
         */
-       status = AE_ERROR;
        ec_handle = ec_get_handle();
        if (ec_handle && acpi_has_method(ec_handle, "NTFY")) {
                INIT_WORK(&dev->hotkey_work, toshiba_acpi_hotkey_work);
@@ -1696,10 +1716,9 @@ static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
                goto err_remove_filter;
        }
 
-       status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB", NULL, NULL);
-       if (ACPI_FAILURE(status)) {
+       error = toshiba_acpi_enable_hotkeys(dev);
+       if (error) {
                pr_info("Unable to enable hotkeys\n");
-               error = -ENODEV;
                goto err_remove_filter;
        }
 
@@ -1709,7 +1728,6 @@ static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
                goto err_remove_filter;
        }
 
-       hci_result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
        return 0;
 
  err_remove_filter:
@@ -2007,16 +2025,12 @@ static int toshiba_acpi_suspend(struct device *device)
 static int toshiba_acpi_resume(struct device *device)
 {
        struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
-       u32 result;
-       acpi_status status;
+       int error;
 
        if (dev->hotkey_dev) {
-               status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB",
-                               NULL, NULL);
-               if (ACPI_FAILURE(status))
+               error = toshiba_acpi_enable_hotkeys(dev);
+               if (error)
                        pr_info("Unable to re-enable hotkeys\n");
-
-               result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
        }
 
        return 0;