diff options
author | Robin Gong <b38343@freescale.com> | 2015-06-11 17:23:32 +0800 |
---|---|---|
committer | Octavian Purdila <octavian.purdila@nxp.com> | 2017-02-23 14:21:42 +0200 |
commit | c3f73d633167828a858e896a6b5c54d940e1e9da (patch) | |
tree | 5cf7a4029ca455655d7542c0101952c5fa936ff6 /drivers/pinctrl | |
parent | 239fa018430dc0f832f896bdf3bce78c26a27a33 (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 5ef7e875b50e..7807e11d7cc2 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.c +++ b/drivers/pinctrl/freescale/pinctrl-imx.c @@ -803,3 +803,23 @@ 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); +} diff --git a/drivers/pinctrl/freescale/pinctrl-imx.h b/drivers/pinctrl/freescale/pinctrl-imx.h index 8af8aa2897ab..0a1866581dcf 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.h +++ b/drivers/pinctrl/freescale/pinctrl-imx.h @@ -99,4 +99,6 @@ 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); #endif /* __DRIVERS_PINCTRL_IMX_H */ diff --git a/drivers/pinctrl/freescale/pinctrl-imx7d.c b/drivers/pinctrl/freescale/pinctrl-imx7d.c index a465a66c3ef4..9f6d8ba7ce61 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx7d.c +++ b/drivers/pinctrl/freescale/pinctrl-imx7d.c @@ -391,10 +391,27 @@ 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", .of_match_table = of_match_ptr(imx7d_pinctrl_of_match), + .pm = &imx7d_pinctrl_pm_ops, }, .probe = imx7d_pinctrl_probe, }; |