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: Jochen Friedrich <jochen@scram.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
a4b54acf9e
commit
5a09b7120a
2 changed files with 19 additions and 15 deletions
|
@ -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)
|
||||||
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 {
|
||||||
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue