diff options
author | Robin Gong <b38343@freescale.com> | 2015-06-11 17:23:32 +0800 |
---|---|---|
committer | Nitin Garg <nitin.garg@nxp.com> | 2016-01-14 11:02:04 -0600 |
commit | 0e9eb520d9110c848e95c4cf3e37025800e54742 (patch) | |
tree | 34fd3e005a1737ec62946ccf249b29fedcd62064 /drivers/pinctrl | |
parent | e6bd4673d7df83cd8a1fc678ba71fc0132788d9f (diff) |
MLK-11281-3 pinctrl: pinctrl-imx: add suspend/resume for LPSR
To support pinctl hog restore after LPSR resume back,
add suspend/resume in pinctrl driver.
Signed-off-by: Robin Gong <b38343@freescale.com>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-imx.c | 20 | ||||
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-imx.h | 2 | ||||
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-imx7d.c | 17 |
3 files changed, 39 insertions, 0 deletions
diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c index 26e2941a39fb..f3b3827a326d 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.c +++ b/drivers/pinctrl/freescale/pinctrl-imx.c @@ -723,6 +723,26 @@ int imx_pinctrl_probe(struct platform_device *pdev, return 0; } +int imx_pinctrl_suspend(struct device *dev) +{ + struct imx_pinctrl *ipctl = dev_get_drvdata(dev); + + if (!ipctl) + return -EINVAL; + + return pinctrl_force_sleep(ipctl->pctl); +} + +int imx_pinctrl_resume(struct device *dev) +{ + struct imx_pinctrl *ipctl = dev_get_drvdata(dev); + + if (!ipctl) + return -EINVAL; + + return pinctrl_force_default(ipctl->pctl); +} + int imx_pinctrl_remove(struct platform_device *pdev) { struct imx_pinctrl *ipctl = platform_get_drvdata(pdev); diff --git a/drivers/pinctrl/freescale/pinctrl-imx.h b/drivers/pinctrl/freescale/pinctrl-imx.h index 33d01b38fcb6..dc8ac32ac214 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.h +++ b/drivers/pinctrl/freescale/pinctrl-imx.h @@ -98,5 +98,7 @@ struct imx_pinctrl_soc_info { int imx_pinctrl_probe(struct platform_device *pdev, struct imx_pinctrl_soc_info *info); +int imx_pinctrl_suspend(struct device *dev); +int imx_pinctrl_resume(struct device *dev); int imx_pinctrl_remove(struct platform_device *pdev); #endif /* __DRIVERS_PINCTRL_IMX_H */ diff --git a/drivers/pinctrl/freescale/pinctrl-imx7d.c b/drivers/pinctrl/freescale/pinctrl-imx7d.c index 1978a533178c..fb5082711909 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx7d.c +++ b/drivers/pinctrl/freescale/pinctrl-imx7d.c @@ -388,11 +388,28 @@ static int imx7d_pinctrl_probe(struct platform_device *pdev) return imx_pinctrl_probe(pdev, pinctrl_info); } +static int imx7d_pinctrl_suspend(struct device *dev) +{ + + return imx_pinctrl_suspend(dev); +} + +static int imx7d_pinctrl_resume(struct device *dev) +{ + + return imx_pinctrl_resume(dev); +} + +static const struct dev_pm_ops imx7d_pinctrl_pm_ops = { + SET_LATE_SYSTEM_SLEEP_PM_OPS(imx7d_pinctrl_suspend, imx7d_pinctrl_resume) +}; + static struct platform_driver imx7d_pinctrl_driver = { .driver = { .name = "imx7d-pinctrl", .owner = THIS_MODULE, .of_match_table = of_match_ptr(imx7d_pinctrl_of_match), + .pm = &imx7d_pinctrl_pm_ops, }, .probe = imx7d_pinctrl_probe, .remove = imx_pinctrl_remove, |