diff options
-rwxr-xr-x | drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c | 37 | ||||
-rw-r--r-- | drivers/pinctrl/starfive/pinctrl-starfive.c | 19 | ||||
-rw-r--r-- | drivers/pinctrl/starfive/pinctrl-starfive.h | 7 |
3 files changed, 43 insertions, 20 deletions
diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c index d7adf8b3332d..091f36649512 100755 --- a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c @@ -1663,6 +1663,43 @@ static int starfive_jh7110_pinctrl_probe(struct platform_device *pdev) return starfive_pinctrl_probe(pdev, pinctrl_info); } +static int __maybe_unused starfive_pinctrl_suspend(struct device *dev) +{ + struct starfive_pinctrl *pctl = dev_get_drvdata(dev); + u8 i; + + for (i = 0 ; i < SYS_IRQ_REG_SUSPENDED_NUM ; i++) + pctl->sys_irq_reg_suspended[i] = + readl_relaxed(pctl->padctl_base + GPIO_EN + OFFSET_PER_REG * i); + + for (i = 0 ; i < AON_IRQ_REG_SUSPENDED_NUM ; i++) + pctl->aon_irq_reg_suspended[i] = + readl_relaxed(pctl->padctl_base + AON_GPIO_EN_REG + OFFSET_PER_REG * i); + + return pinctrl_force_sleep(pctl->pctl_dev); +} + +static int __maybe_unused starfive_pinctrl_resume(struct device *dev) +{ + struct starfive_pinctrl *pctl = dev_get_drvdata(dev); + u8 i; + + for (i = 0 ; i < SYS_IRQ_REG_SUSPENDED_NUM ; i++) + writel_relaxed(pctl->sys_irq_reg_suspended[i], + pctl->padctl_base + GPIO_EN + OFFSET_PER_REG * i); + + for (i = 0 ; i < AON_IRQ_REG_SUSPENDED_NUM ; i++) + writel_relaxed(pctl->aon_irq_reg_suspended[i], + pctl->padctl_base + AON_GPIO_EN_REG + OFFSET_PER_REG * i); + + return pinctrl_force_default(pctl->pctl_dev); +} + +const struct dev_pm_ops starfive_pinctrl_pm_ops = { + SET_LATE_SYSTEM_SLEEP_PM_OPS(starfive_pinctrl_suspend, + starfive_pinctrl_resume) +}; + static struct platform_driver starfive_jh7110_pinctrl_driver = { .driver = { .name = "starfive_jh7110-pinctrl", diff --git a/drivers/pinctrl/starfive/pinctrl-starfive.c b/drivers/pinctrl/starfive/pinctrl-starfive.c index 262f573bc370..127053fe096b 100644 --- a/drivers/pinctrl/starfive/pinctrl-starfive.c +++ b/drivers/pinctrl/starfive/pinctrl-starfive.c @@ -474,25 +474,6 @@ int starfive_pinctrl_probe(struct platform_device *pdev, } EXPORT_SYMBOL_GPL(starfive_pinctrl_probe); -static int __maybe_unused starfive_pinctrl_suspend(struct device *dev) -{ - struct starfive_pinctrl *pctl = dev_get_drvdata(dev); - - return pinctrl_force_sleep(pctl->pctl_dev); -} - -static int __maybe_unused starfive_pinctrl_resume(struct device *dev) -{ - struct starfive_pinctrl *pctl = dev_get_drvdata(dev); - - return pinctrl_force_default(pctl->pctl_dev); -} - -const struct dev_pm_ops starfive_pinctrl_pm_ops = { - SET_LATE_SYSTEM_SLEEP_PM_OPS(starfive_pinctrl_suspend, - starfive_pinctrl_resume) -}; -EXPORT_SYMBOL_GPL(starfive_pinctrl_pm_ops); MODULE_DESCRIPTION("Pinctrl driver for StarFive JH7110 SoC"); MODULE_AUTHOR("jenny.zhang <jenny.zhang@starfivetech.com>"); MODULE_LICENSE("GPL v2"); diff --git a/drivers/pinctrl/starfive/pinctrl-starfive.h b/drivers/pinctrl/starfive/pinctrl-starfive.h index 2db9df9550af..ed79d72aaea3 100644 --- a/drivers/pinctrl/starfive/pinctrl-starfive.h +++ b/drivers/pinctrl/starfive/pinctrl-starfive.h @@ -17,10 +17,12 @@ #define STARFIVE_USE_SCU BIT(0) +#define SYS_IRQ_REG_SUSPENDED_NUM 11 +#define AON_IRQ_REG_SUSPENDED_NUM 6 + struct platform_device; extern const struct pinmux_ops starfive_pmx_ops; -extern const struct dev_pm_ops starfive_pinctrl_pm_ops; struct starfive_pin_config { unsigned long io_config; @@ -75,6 +77,9 @@ struct starfive_pinctrl { struct pinctrl_gpio_range gpios; unsigned long enabled; unsigned int trigger[MAX_GPIO]; + + u32 sys_irq_reg_suspended[SYS_IRQ_REG_SUSPENDED_NUM]; + u32 aon_irq_reg_suspended[AON_IRQ_REG_SUSPENDED_NUM]; }; struct starfive_pinctrl_soc_info { |