diff options
author | Anson Huang <b20788@freescale.com> | 2013-10-14 15:32:48 -0400 |
---|---|---|
committer | Jason Liu <r64343@freescale.com> | 2013-10-30 09:56:00 +0800 |
commit | 1089c7e75617c19ca4e8b47462b19025e1312ec2 (patch) | |
tree | cdee2a127cc2a2042617b941f543b1dbec0ace5c /drivers/pinctrl | |
parent | a785c61cbf890f85ebea44ff8783e9322d3d8dbe (diff) |
ENGR00283508-5 pinctrl: imx: support pin sleep mode in suspend
When system suspend, need to switch pwm pin to sleep mode,
this is to save IO power. Using pinctrl mode switch framework
to make it happen.
Signed-off-by: Anson Huang <b20788@freescale.com>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/pinctrl-imx.c | 24 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-imx.h | 6 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-imx6sl.c | 4 |
3 files changed, 32 insertions, 2 deletions
diff --git a/drivers/pinctrl/pinctrl-imx.c b/drivers/pinctrl/pinctrl-imx.c index 7284b8678ead..6cae657d2a74 100644 --- a/drivers/pinctrl/pinctrl-imx.c +++ b/drivers/pinctrl/pinctrl-imx.c @@ -1,7 +1,7 @@ /* * Core driver for the imx pin controller * - * Copyright (C) 2012 Freescale Semiconductor, Inc. + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. * Copyright (C) 2012 Linaro Ltd. * * Author: Dong Aisheng <dong.aisheng@linaro.org> @@ -649,3 +649,25 @@ int imx_pinctrl_remove(struct platform_device *pdev) return 0; } + +#ifdef CONFIG_PM +int imx_pinctrl_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct imx_pinctrl *ipctl = platform_get_drvdata(pdev); + + if (!ipctl) + return -EINVAL; + + return pinctrl_force_sleep(ipctl->pctl); +} + +int imx_pinctrl_resume(struct platform_device *pdev) +{ + struct imx_pinctrl *ipctl = platform_get_drvdata(pdev); + + if (!ipctl) + return -EINVAL; + + return pinctrl_force_default(ipctl->pctl); +} +#endif diff --git a/drivers/pinctrl/pinctrl-imx.h b/drivers/pinctrl/pinctrl-imx.h index bcedd991c9f3..e18c94deccf5 100644 --- a/drivers/pinctrl/pinctrl-imx.h +++ b/drivers/pinctrl/pinctrl-imx.h @@ -1,7 +1,7 @@ /* * IMX pinmux core definitions * - * Copyright (C) 2012 Freescale Semiconductor, Inc. + * Copyright (C) 2012-2013 Freescale Semiconductor, Inc. * Copyright (C) 2012 Linaro Ltd. * * Author: Dong Aisheng <dong.aisheng@linaro.org> @@ -92,4 +92,8 @@ struct imx_pinctrl_soc_info { int imx_pinctrl_probe(struct platform_device *pdev, struct imx_pinctrl_soc_info *info); int imx_pinctrl_remove(struct platform_device *pdev); +#ifdef CONFIG_PM +int imx_pinctrl_suspend(struct platform_device *pdev, pm_message_t state); +int imx_pinctrl_resume(struct platform_device *pdev); +#endif #endif /* __DRIVERS_PINCTRL_IMX_H */ diff --git a/drivers/pinctrl/pinctrl-imx6sl.c b/drivers/pinctrl/pinctrl-imx6sl.c index 4eb7ccab5f2d..f8613d53beab 100644 --- a/drivers/pinctrl/pinctrl-imx6sl.c +++ b/drivers/pinctrl/pinctrl-imx6sl.c @@ -384,6 +384,10 @@ static struct platform_driver imx6sl_pinctrl_driver = { }, .probe = imx6sl_pinctrl_probe, .remove = imx_pinctrl_remove, +#ifdef CONFIG_PM + .suspend = imx_pinctrl_suspend, + .resume = imx_pinctrl_resume, +#endif }; static int __init imx6sl_pinctrl_init(void) |