powerpc/vio: Add power management support

Adds support for suspend/resume for VIO devices. This is needed for
support for HMC initiated hibernation.
Signed-off-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 8260cf6f
...@@ -1381,6 +1381,29 @@ static int vio_hotplug(struct device *dev, struct kobj_uevent_env *env) ...@@ -1381,6 +1381,29 @@ static int vio_hotplug(struct device *dev, struct kobj_uevent_env *env)
return 0; 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 = { static struct bus_type vio_bus_type = {
.name = "vio", .name = "vio",
.dev_attrs = vio_dev_attrs, .dev_attrs = vio_dev_attrs,
...@@ -1388,6 +1411,7 @@ static struct bus_type vio_bus_type = { ...@@ -1388,6 +1411,7 @@ static struct bus_type vio_bus_type = {
.match = vio_bus_match, .match = vio_bus_match,
.probe = vio_bus_probe, .probe = vio_bus_probe,
.remove = vio_bus_remove, .remove = vio_bus_remove,
.pm = &vio_dev_pm_ops,
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment