Commit 5a09b712 authored by Russell King's avatar Russell King

MFD: ucb1x00-core: convert to use dev_pm_ops

Convert the ucb1x00-core driver to use dev_pm_ops rather than the legacy
members in the mcp driver.
Acked-by: default avatarJochen Friedrich <jochen@scram.de>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent a4b54acf
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/device.h> #include <linux/device.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/mfd/ucb1x00.h> #include <linux/mfd/ucb1x00.h>
#include <linux/pm.h>
#include <linux/gpio.h> #include <linux/gpio.h>
static DEFINE_MUTEX(ucb1x00_mutex); static DEFINE_MUTEX(ucb1x00_mutex);
...@@ -697,47 +698,50 @@ void ucb1x00_unregister_driver(struct ucb1x00_driver *drv) ...@@ -697,47 +698,50 @@ void ucb1x00_unregister_driver(struct ucb1x00_driver *drv)
mutex_unlock(&ucb1x00_mutex); mutex_unlock(&ucb1x00_mutex);
} }
static int ucb1x00_suspend(struct mcp *mcp, pm_message_t state) static int ucb1x00_suspend(struct device *dev)
{ {
struct ucb1x00 *ucb = mcp_get_drvdata(mcp); struct ucb1x00 *ucb = dev_get_drvdata(dev);
struct ucb1x00_dev *dev; struct ucb1x00_dev *udev;
mutex_lock(&ucb1x00_mutex); mutex_lock(&ucb1x00_mutex);
list_for_each_entry(dev, &ucb->devs, dev_node) { list_for_each_entry(udev, &ucb->devs, dev_node) {
if (dev->drv->suspend) if (udev->drv->suspend)
dev->drv->suspend(dev, state); udev->drv->suspend(udev);
} }
mutex_unlock(&ucb1x00_mutex); mutex_unlock(&ucb1x00_mutex);
return 0; return 0;
} }
static int ucb1x00_resume(struct mcp *mcp) static int ucb1x00_resume(struct device *dev)
{ {
struct ucb1x00 *ucb = mcp_get_drvdata(mcp); struct ucb1x00 *ucb = dev_get_drvdata(dev);
struct ucb1x00_dev *dev; struct ucb1x00_dev *udev;
ucb1x00_enable(ucb); ucb1x00_enable(ucb);
ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out); ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir); ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
ucb1x00_disable(ucb); ucb1x00_disable(ucb);
mutex_lock(&ucb1x00_mutex); mutex_lock(&ucb1x00_mutex);
list_for_each_entry(dev, &ucb->devs, dev_node) { list_for_each_entry(udev, &ucb->devs, dev_node) {
if (dev->drv->resume) if (udev->drv->resume)
dev->drv->resume(dev); udev->drv->resume(udev);
} }
mutex_unlock(&ucb1x00_mutex); mutex_unlock(&ucb1x00_mutex);
return 0; return 0;
} }
static const struct dev_pm_ops ucb1x00_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(ucb1x00_suspend, ucb1x00_resume)
};
static struct mcp_driver ucb1x00_driver = { static struct mcp_driver ucb1x00_driver = {
.drv = { .drv = {
.name = "ucb1x00", .name = "ucb1x00",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.pm = &ucb1x00_pm_ops,
}, },
.probe = ucb1x00_probe, .probe = ucb1x00_probe,
.remove = ucb1x00_remove, .remove = ucb1x00_remove,
.suspend = ucb1x00_suspend,
.resume = ucb1x00_resume,
}; };
static int __init ucb1x00_init(void) static int __init ucb1x00_init(void)
......
...@@ -154,7 +154,7 @@ struct ucb1x00_driver { ...@@ -154,7 +154,7 @@ struct ucb1x00_driver {
struct list_head devs; struct list_head devs;
int (*add)(struct ucb1x00_dev *dev); int (*add)(struct ucb1x00_dev *dev);
void (*remove)(struct ucb1x00_dev *dev); void (*remove)(struct ucb1x00_dev *dev);
int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state); int (*suspend)(struct ucb1x00_dev *dev);
int (*resume)(struct ucb1x00_dev *dev); int (*resume)(struct ucb1x00_dev *dev);
}; };
......
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