From: Bjorn Helgaas Do not disable PNP devices in the suspend path. We still call the driver's suspend method, which should prevent further use of the device, and the protocol suspend method, which may put the device in a low-power state. I'm told that Windows puts devices in a low-power state (Linux does this in the protocol suspend method), but does not use _DIS in the suspend path. Other relevant references: - In the ACPI 3.0b spec, I can't find any mention of _DIS in connection with sleep. And Device Object Notifications, Section 5.6.3, Table 5-43, says we should get a bus check after awakening if hardware was removed while we slept. - This: http://msdn2.microsoft.com/en-us/library/ms810079.aspx makes a similar point about how the OS re-enumerates devices as a result of a power state change (3rd last paragraph of text). - This: http://msdn2.microsoft.com/en-us/library/aa489874.aspx suggests that Windows only stops a device to rebalance hardware resources. Signed-off-by: Bjorn Helgaas Cc: Jiri Slaby Cc: Adam Belay Cc: Li Shaohua Cc: Len Brown Cc: Kristen Carlson Accardi Cc: "Rafael J. Wysocki" Signed-off-by: Andrew Morton --- drivers/pnp/driver.c | 14 -------------- 1 file changed, 14 deletions(-) diff -puN drivers/pnp/driver.c~pnp-do-not-stop-start-devices-in-suspend-resume-path drivers/pnp/driver.c --- a/drivers/pnp/driver.c~pnp-do-not-stop-start-devices-in-suspend-resume-path +++ a/drivers/pnp/driver.c @@ -161,13 +161,6 @@ static int pnp_bus_suspend(struct device return error; } - if (!(pnp_drv->flags & PNP_DRIVER_RES_DO_NOT_CHANGE) && - pnp_can_disable(pnp_dev)) { - error = pnp_stop_dev(pnp_dev); - if (error) - return error; - } - if (pnp_dev->protocol && pnp_dev->protocol->suspend) pnp_dev->protocol->suspend(pnp_dev, state); return 0; @@ -177,7 +170,6 @@ static int pnp_bus_resume(struct device { struct pnp_dev *pnp_dev = to_pnp_dev(dev); struct pnp_driver *pnp_drv = pnp_dev->driver; - int error; if (!pnp_drv) return 0; @@ -185,12 +177,6 @@ static int pnp_bus_resume(struct device if (pnp_dev->protocol && pnp_dev->protocol->resume) pnp_dev->protocol->resume(pnp_dev); - if (!(pnp_drv->flags & PNP_DRIVER_RES_DO_NOT_CHANGE)) { - error = pnp_start_dev(pnp_dev); - if (error) - return error; - } - if (pnp_drv->resume) return pnp_drv->resume(pnp_dev); _