powerpc/vio: Add power management support
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 7 Apr 2010 08:09:15 +0000 (18:09 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 7 Apr 2010 08:09:15 +0000 (18:09 +1000)
Adds support for suspend/resume for VIO devices. This is needed for
support for HMC initiated hibernation.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/vio.c

index 2a3428bef83a066a8be3dc5874d498691e637031..b8e311d64ad5c9ece229e2361bbb37d4000e9c59 100644 (file)
@@ -1381,6 +1381,29 @@ static int vio_hotplug(struct device *dev, struct kobj_uevent_env *env)
        return 0;
 }
 
+static int vio_pm_suspend(struct device *dev)
+{
+       const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
+
+       if (pm && pm->suspend)
+               return pm->suspend(dev);
+       return 0;
+}
+
+static int vio_pm_resume(struct device *dev)
+{
+       const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
+
+       if (pm && pm->resume)
+               return pm->resume(dev);
+       return 0;
+}
+
+const struct dev_pm_ops vio_dev_pm_ops = {
+       .suspend = vio_pm_suspend,
+       .resume = vio_pm_resume,
+};
+
 static struct bus_type vio_bus_type = {
        .name = "vio",
        .dev_attrs = vio_dev_attrs,
@@ -1388,6 +1411,7 @@ static struct bus_type vio_bus_type = {
        .match = vio_bus_match,
        .probe = vio_bus_probe,
        .remove = vio_bus_remove,
+       .pm = &vio_dev_pm_ops,
 };
 
 /**