summaryrefslogtreecommitdiff
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorAnson Huang <b20788@freescale.com>2013-10-14 15:32:48 -0400
committerJason Liu <r64343@freescale.com>2013-10-30 09:56:00 +0800
commit1089c7e75617c19ca4e8b47462b19025e1312ec2 (patch)
treecdee2a127cc2a2042617b941f543b1dbec0ace5c /drivers/pinctrl
parenta785c61cbf890f85ebea44ff8783e9322d3d8dbe (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.c24
-rw-r--r--drivers/pinctrl/pinctrl-imx.h6
-rw-r--r--drivers/pinctrl/pinctrl-imx6sl.c4
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)