Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+18 −14
Original line number Original line Diff line number Diff line
@@ -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)
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
};
};