--- /dev/null
+From fe6b91f47080eb17d21cbf2a39311877d57f6938 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 6 Dec 2011 23:24:52 +0100
+Subject: PM / Driver core: leave runtime PM enabled during system shutdown
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit fe6b91f47080eb17d21cbf2a39311877d57f6938 upstream.
+
+Disabling all runtime PM during system shutdown turns out not to be a
+good idea, because some devices may need to be woken up from a
+low-power state at that time.
+
+The whole point of disabling runtime PM for system shutdown was to
+prevent untimely runtime-suspend method calls. This patch (as1504)
+accomplishes the same result by incrementing the usage count for each
+device and waiting for ongoing runtime-PM callbacks to finish. This
+is what we already do during system suspend and hibernation, which
+makes sense since the shutdown method is pretty much a legacy analog
+of the pm->poweroff method.
+
+This fixes a recent regression on some OMAP systems introduced by
+commit af8db1508f2c9f3b6e633e2d2d906c6557c617f9 (PM / driver core:
+disable device's runtime PM during shutdown).
+
+Reported-and-tested-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Cc: Kostyantyn Shlyakhovoy <x0155534@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/base/core.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -1743,8 +1743,10 @@ void device_shutdown(void)
+ */
+ list_del_init(&dev->kobj.entry);
+ spin_unlock(&devices_kset->list_lock);
+- /* Disable all device's runtime power management */
+- pm_runtime_disable(dev);
++
++ /* Don't allow any more runtime suspends */
++ pm_runtime_get_noresume(dev);
++ pm_runtime_barrier(dev);
+
+ if (dev->bus && dev->bus->shutdown) {
+ dev_dbg(dev, "shutdown\n");