Loading drivers/mfd/ucb1x00-core.c +18 −14 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <linux/device.h> #include <linux/mutex.h> #include <linux/mfd/ucb1x00.h> #include <linux/pm.h> #include <linux/gpio.h> static DEFINE_MUTEX(ucb1x00_mutex); Loading Loading @@ -697,47 +698,50 @@ void ucb1x00_unregister_driver(struct ucb1x00_driver *drv) 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_dev *dev; struct ucb1x00 *ucb = dev_get_drvdata(dev); struct ucb1x00_dev *udev; mutex_lock(&ucb1x00_mutex); list_for_each_entry(dev, &ucb->devs, dev_node) { if (dev->drv->suspend) dev->drv->suspend(dev, state); list_for_each_entry(udev, &ucb->devs, dev_node) { if (udev->drv->suspend) udev->drv->suspend(udev); } mutex_unlock(&ucb1x00_mutex); 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_dev *dev; struct ucb1x00 *ucb = dev_get_drvdata(dev); struct ucb1x00_dev *udev; ucb1x00_enable(ucb); ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out); ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir); ucb1x00_disable(ucb); mutex_lock(&ucb1x00_mutex); list_for_each_entry(dev, &ucb->devs, dev_node) { if (dev->drv->resume) dev->drv->resume(dev); list_for_each_entry(udev, &ucb->devs, dev_node) { if (udev->drv->resume) udev->drv->resume(udev); } mutex_unlock(&ucb1x00_mutex); 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 = { .drv = { .name = "ucb1x00", .owner = THIS_MODULE, .pm = &ucb1x00_pm_ops, }, .probe = ucb1x00_probe, .remove = ucb1x00_remove, .suspend = ucb1x00_suspend, .resume = ucb1x00_resume, }; static int __init ucb1x00_init(void) Loading include/linux/mfd/ucb1x00.h +1 −1 Original line number Diff line number Diff line Loading @@ -154,7 +154,7 @@ struct ucb1x00_driver { struct list_head devs; int (*add)(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); }; Loading Loading
drivers/mfd/ucb1x00-core.c +18 −14 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <linux/device.h> #include <linux/mutex.h> #include <linux/mfd/ucb1x00.h> #include <linux/pm.h> #include <linux/gpio.h> static DEFINE_MUTEX(ucb1x00_mutex); Loading Loading @@ -697,47 +698,50 @@ void ucb1x00_unregister_driver(struct ucb1x00_driver *drv) 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_dev *dev; struct ucb1x00 *ucb = dev_get_drvdata(dev); struct ucb1x00_dev *udev; mutex_lock(&ucb1x00_mutex); list_for_each_entry(dev, &ucb->devs, dev_node) { if (dev->drv->suspend) dev->drv->suspend(dev, state); list_for_each_entry(udev, &ucb->devs, dev_node) { if (udev->drv->suspend) udev->drv->suspend(udev); } mutex_unlock(&ucb1x00_mutex); 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_dev *dev; struct ucb1x00 *ucb = dev_get_drvdata(dev); struct ucb1x00_dev *udev; ucb1x00_enable(ucb); ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out); ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir); ucb1x00_disable(ucb); mutex_lock(&ucb1x00_mutex); list_for_each_entry(dev, &ucb->devs, dev_node) { if (dev->drv->resume) dev->drv->resume(dev); list_for_each_entry(udev, &ucb->devs, dev_node) { if (udev->drv->resume) udev->drv->resume(udev); } mutex_unlock(&ucb1x00_mutex); 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 = { .drv = { .name = "ucb1x00", .owner = THIS_MODULE, .pm = &ucb1x00_pm_ops, }, .probe = ucb1x00_probe, .remove = ucb1x00_remove, .suspend = ucb1x00_suspend, .resume = ucb1x00_resume, }; static int __init ucb1x00_init(void) Loading
include/linux/mfd/ucb1x00.h +1 −1 Original line number Diff line number Diff line Loading @@ -154,7 +154,7 @@ struct ucb1x00_driver { struct list_head devs; int (*add)(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); }; Loading