diff options
author | Andy Duan <fugang.duan@nxp.com> | 2018-12-20 17:08:20 +0800 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:45:05 +0800 |
commit | a9c85cb2d8ed9b8dce34bcbe2e7cc13790350a82 (patch) | |
tree | f6cd761812a12507bcf3b35fad6c7cf1d270db71 /drivers/reset | |
parent | 80fcea5b45b35bc34e2663af883a9e25005f6ca3 (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.c | 20 |
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, }, }; |