summaryrefslogtreecommitdiff
path: root/drivers/reset
diff options
context:
space:
mode:
authorAndy Duan <fugang.duan@nxp.com>2018-12-20 17:08:20 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:45:05 +0800
commita9c85cb2d8ed9b8dce34bcbe2e7cc13790350a82 (patch)
treef6cd761812a12507bcf3b35fad6c7cf1d270db71 /drivers/reset
parent80fcea5b45b35bc34e2663af883a9e25005f6ca3 (diff)
MLK-20682 reset: gpio-reset: add suspend/resume callback
The reset PIN may loss its state when system suspend due to GPIO controller power off. Set pinctrl as "sleep" state to keep PIN voltage during system suspend, and configurate pinctrl as "default" state after system resume back. Because GPIO resume back earlier than gpio-reset, then GPIO signal can control the PIN voltage again. Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com> Signed-off-by: Fugang Duan <fugang.duan@nxp.com> Signed-off-by: Arulpandiyan Vadivel <arulpandiyan_vadivel@mentor.com> Signed-off-by: Shrikant Bobade <Shrikant_Bobade@mentor.com> (cherry picked from commit ea5a9cdc1941afc36fd0f5a223ea762b85512130)
Diffstat (limited to 'drivers/reset')
-rw-r--r--drivers/reset/gpio-reset.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/reset/gpio-reset.c b/drivers/reset/gpio-reset.c
index 9dc768aa6f33..49e63f8dd436 100644
--- a/drivers/reset/gpio-reset.c
+++ b/drivers/reset/gpio-reset.c
@@ -167,6 +167,25 @@ static struct of_device_id gpio_reset_dt_ids[] = {
{ }
};
+#ifdef CONFIG_PM_SLEEP
+static int gpio_reset_suspend(struct device *dev)
+{
+ pinctrl_pm_select_sleep_state(dev);
+
+ return 0;
+}
+static int gpio_reset_resume(struct device *dev)
+{
+ pinctrl_pm_select_default_state(dev);
+
+ return 0;
+}
+#endif
+
+static const struct dev_pm_ops gpio_reset_pm_ops = {
+ SET_LATE_SYSTEM_SLEEP_PM_OPS(gpio_reset_suspend, gpio_reset_resume)
+};
+
static struct platform_driver gpio_reset_driver = {
.probe = gpio_reset_probe,
.remove = gpio_reset_remove,
@@ -174,6 +193,7 @@ static struct platform_driver gpio_reset_driver = {
.name = "gpio-reset",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(gpio_reset_dt_ids),
+ .pm = &gpio_reset_pm_ops,
},
};