Skip to content

Commit

Permalink
Driver Core: Rework platform suspend/resume, print warning
Browse files Browse the repository at this point in the history
This patch reworks the platform driver code for legacy
suspend and resume to avoid installing callbacks in
struct device_driver. A warning is also added telling
users to update the platform driver to use dev_pm_ops.

The functions platform_legacy_suspend()/resume() directly
call suspend and resume callbacks in struct platform_driver
instead of wrapping things in platform_drv_suspend()/resume().

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
  • Loading branch information
Magnus Damm authored and Rafael J. Wysocki committed Jun 12, 2009
1 parent 0072578 commit 783ea7d
Showing 1 changed file with 12 additions and 24 deletions.
36 changes: 12 additions & 24 deletions drivers/base/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -469,22 +469,6 @@ static void platform_drv_shutdown(struct device *_dev)
drv->shutdown(dev);
}

static int platform_drv_suspend(struct device *_dev, pm_message_t state)
{
struct platform_driver *drv = to_platform_driver(_dev->driver);
struct platform_device *dev = to_platform_device(_dev);

return drv->suspend(dev, state);
}

static int platform_drv_resume(struct device *_dev)
{
struct platform_driver *drv = to_platform_driver(_dev->driver);
struct platform_device *dev = to_platform_device(_dev);

return drv->resume(dev);
}

/**
* platform_driver_register
* @drv: platform driver structure
Expand All @@ -498,10 +482,10 @@ int platform_driver_register(struct platform_driver *drv)
drv->driver.remove = platform_drv_remove;
if (drv->shutdown)
drv->driver.shutdown = platform_drv_shutdown;
if (drv->suspend)
drv->driver.suspend = platform_drv_suspend;
if (drv->resume)
drv->driver.resume = platform_drv_resume;
if (drv->suspend || drv->resume)
pr_warning("Platform driver '%s' needs updating - please use "
"dev_pm_ops\n", drv->driver.name);

return driver_register(&drv->driver);
}
EXPORT_SYMBOL_GPL(platform_driver_register);
Expand Down Expand Up @@ -633,10 +617,12 @@ static int platform_match(struct device *dev, struct device_driver *drv)

static int platform_legacy_suspend(struct device *dev, pm_message_t mesg)
{
struct platform_driver *pdrv = to_platform_driver(dev->driver);
struct platform_device *pdev = to_platform_device(dev);
int ret = 0;

if (dev->driver && dev->driver->suspend)
ret = dev->driver->suspend(dev, mesg);
if (dev->driver && pdrv->suspend)
ret = pdrv->suspend(pdev, mesg);

return ret;
}
Expand Down Expand Up @@ -667,10 +653,12 @@ static int platform_legacy_resume_early(struct device *dev)

static int platform_legacy_resume(struct device *dev)
{
struct platform_driver *pdrv = to_platform_driver(dev->driver);
struct platform_device *pdev = to_platform_device(dev);
int ret = 0;

if (dev->driver && dev->driver->resume)
ret = dev->driver->resume(dev);
if (dev->driver && pdrv->resume)
ret = pdrv->resume(pdev);

return ret;
}
Expand Down

0 comments on commit 783ea7d

Please sign in to comment.