MLK-11281-3 pinctrl: pinctrl-imx: add suspend/resume for LPSR
authorRobin Gong <b38343@freescale.com>
Thu, 11 Jun 2015 09:23:32 +0000 (17:23 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:49:02 +0000 (14:49 -0500)
To support pinctl hog restore after LPSR resume back,
add suspend/resume in pinctrl driver.

Signed-off-by: Robin Gong <b38343@freescale.com>
drivers/pinctrl/freescale/pinctrl-imx.c
drivers/pinctrl/freescale/pinctrl-imx.h
drivers/pinctrl/freescale/pinctrl-imx7d.c

index 5ef7e87..7807e11 100644 (file)
@@ -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);
+}
index 8af8aa2..0a18665 100644 (file)
@@ -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 */
index a465a66..9f6d8ba 100644 (file)
@@ -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,
 };