diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-04-07 04:09:15 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-04-07 04:09:15 -0400 |
commit | a32aaf14513da776556ad9995de8d83cd76ae60a (patch) | |
tree | 4c78e27fe922a18cff088e41e0fe0c615a870cde | |
parent | 8260cf6f40014860cb857f5245194900dd6c9b94 (diff) |
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: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/kernel/vio.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index 2a3428bef83a..b8e311d64ad5 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
@@ -1381,6 +1381,29 @@ static int vio_hotplug(struct device *dev, struct kobj_uevent_env *env) | |||
1381 | return 0; | 1381 | return 0; |
1382 | } | 1382 | } |
1383 | 1383 | ||
1384 | static int vio_pm_suspend(struct device *dev) | ||
1385 | { | ||
1386 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; | ||
1387 | |||
1388 | if (pm && pm->suspend) | ||
1389 | return pm->suspend(dev); | ||
1390 | return 0; | ||
1391 | } | ||
1392 | |||
1393 | static int vio_pm_resume(struct device *dev) | ||
1394 | { | ||
1395 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; | ||
1396 | |||
1397 | if (pm && pm->resume) | ||
1398 | return pm->resume(dev); | ||
1399 | return 0; | ||
1400 | } | ||
1401 | |||
1402 | const struct dev_pm_ops vio_dev_pm_ops = { | ||
1403 | .suspend = vio_pm_suspend, | ||
1404 | .resume = vio_pm_resume, | ||
1405 | }; | ||
1406 | |||
1384 | static struct bus_type vio_bus_type = { | 1407 | static struct bus_type vio_bus_type = { |
1385 | .name = "vio", | 1408 | .name = "vio", |
1386 | .dev_attrs = vio_dev_attrs, | 1409 | .dev_attrs = vio_dev_attrs, |
@@ -1388,6 +1411,7 @@ static struct bus_type vio_bus_type = { | |||
1388 | .match = vio_bus_match, | 1411 | .match = vio_bus_match, |
1389 | .probe = vio_bus_probe, | 1412 | .probe = vio_bus_probe, |
1390 | .remove = vio_bus_remove, | 1413 | .remove = vio_bus_remove, |
1414 | .pm = &vio_dev_pm_ops, | ||
1391 | }; | 1415 | }; |
1392 | 1416 | ||
1393 | /** | 1417 | /** |