Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-block.git] / drivers / mfd / cros_ec.c
index 36156a41499c918a61e9ab4f432e64c3ecb36314..65a9757a6d214858c1a7a0f5247bd255770e2d57 100644 (file)
@@ -112,12 +112,16 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
 
        mutex_init(&ec_dev->lock);
 
-       cros_ec_query_all(ec_dev);
+       err = cros_ec_query_all(ec_dev);
+       if (err) {
+               dev_err(dev, "Cannot identify the EC: error %d\n", err);
+               return err;
+       }
 
        if (ec_dev->irq) {
-               err = request_threaded_irq(ec_dev->irq, NULL, ec_irq_thread,
-                                          IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-                                          "chromeos-ec", ec_dev);
+               err = devm_request_threaded_irq(dev, ec_dev->irq, NULL,
+                               ec_irq_thread, IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+                               "chromeos-ec", ec_dev);
                if (err) {
                        dev_err(dev, "Failed to request IRQ %d: %d",
                                ec_dev->irq, err);
@@ -131,7 +135,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
                dev_err(dev,
                        "Failed to register Embedded Controller subdevice %d\n",
                        err);
-               goto fail_mfd;
+               return err;
        }
 
        if (ec_dev->max_passthru) {
@@ -149,7 +153,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
                        dev_err(dev,
                                "Failed to register Power Delivery subdevice %d\n",
                                err);
-                       goto fail_mfd;
+                       return err;
                }
        }
 
@@ -158,7 +162,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
                if (err) {
                        mfd_remove_devices(dev);
                        dev_err(dev, "Failed to register sub-devices\n");
-                       goto fail_mfd;
+                       return err;
                }
        }
 
@@ -173,14 +177,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
 
        dev_info(dev, "Chrome EC device registered\n");
 
-       cros_ec_acpi_install_gpe_handler(dev);
-
        return 0;
-
-fail_mfd:
-       if (ec_dev->irq)
-               free_irq(ec_dev->irq, ec_dev);
-       return err;
 }
 EXPORT_SYMBOL(cros_ec_register);
 
@@ -188,11 +185,6 @@ int cros_ec_remove(struct cros_ec_device *ec_dev)
 {
        mfd_remove_devices(ec_dev->dev);
 
-       cros_ec_acpi_remove_gpe_handler();
-
-       if (ec_dev->irq)
-               free_irq(ec_dev->irq, ec_dev);
-
        return 0;
 }
 EXPORT_SYMBOL(cros_ec_remove);
@@ -204,14 +196,9 @@ int cros_ec_suspend(struct cros_ec_device *ec_dev)
        int ret;
        u8 sleep_event;
 
-       if (!IS_ENABLED(CONFIG_ACPI) || pm_suspend_via_firmware()) {
-               sleep_event = HOST_SLEEP_EVENT_S3_SUSPEND;
-       } else {
-               sleep_event = HOST_SLEEP_EVENT_S0IX_SUSPEND;
-
-               /* Clearing the GPE status for any pending event */
-               cros_ec_acpi_clear_gpe();
-       }
+       sleep_event = (!IS_ENABLED(CONFIG_ACPI) || pm_suspend_via_firmware()) ?
+                     HOST_SLEEP_EVENT_S3_SUSPEND :
+                     HOST_SLEEP_EVENT_S0IX_SUSPEND;
 
        ret = cros_ec_sleep_event(ec_dev, sleep_event);
        if (ret < 0)