|
@@ -484,8 +484,16 @@ static int platform_drv_probe(struct device *_dev)
|
|
|
{
|
|
|
struct platform_driver *drv = to_platform_driver(_dev->driver);
|
|
|
struct platform_device *dev = to_platform_device(_dev);
|
|
|
+ int ret;
|
|
|
|
|
|
- return drv->probe(dev);
|
|
|
+ if (ACPI_HANDLE(_dev))
|
|
|
+ acpi_dev_pm_attach(_dev, true);
|
|
|
+
|
|
|
+ ret = drv->probe(dev);
|
|
|
+ if (ret && ACPI_HANDLE(_dev))
|
|
|
+ acpi_dev_pm_detach(_dev, true);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int platform_drv_probe_fail(struct device *_dev)
|
|
@@ -497,8 +505,13 @@ static int platform_drv_remove(struct device *_dev)
|
|
|
{
|
|
|
struct platform_driver *drv = to_platform_driver(_dev->driver);
|
|
|
struct platform_device *dev = to_platform_device(_dev);
|
|
|
+ int ret;
|
|
|
|
|
|
- return drv->remove(dev);
|
|
|
+ ret = drv->remove(dev);
|
|
|
+ if (ACPI_HANDLE(_dev))
|
|
|
+ acpi_dev_pm_detach(_dev, true);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void platform_drv_shutdown(struct device *_dev)
|
|
@@ -507,6 +520,8 @@ static void platform_drv_shutdown(struct device *_dev)
|
|
|
struct platform_device *dev = to_platform_device(_dev);
|
|
|
|
|
|
drv->shutdown(dev);
|
|
|
+ if (ACPI_HANDLE(_dev))
|
|
|
+ acpi_dev_pm_detach(_dev, true);
|
|
|
}
|
|
|
|
|
|
/**
|