From 82f8e41ea2d1b532f32afbc7d6ebb452916303b7 Mon Sep 17 00:00:00 2001 From: Hal Feng Date: Fri, 6 Jan 2023 18:12:33 +0800 Subject: [PATCH] pinctrl: starfive: Save register values when suspending and restore them when resuming Restore the register configuration after resuming. Signed-off-by: Hal Feng --- drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c | 18 ++++++++++++++++++ drivers/pinctrl/starfive/pinctrl-starfive.h | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c index e4a8042..091f366 100755 --- a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c @@ -1666,6 +1666,15 @@ static int starfive_jh7110_pinctrl_probe(struct platform_device *pdev) 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); } @@ -1673,6 +1682,15 @@ static int __maybe_unused starfive_pinctrl_suspend(struct device *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); } diff --git a/drivers/pinctrl/starfive/pinctrl-starfive.h b/drivers/pinctrl/starfive/pinctrl-starfive.h index a319720..ed79d72 100644 --- a/drivers/pinctrl/starfive/pinctrl-starfive.h +++ b/drivers/pinctrl/starfive/pinctrl-starfive.h @@ -17,6 +17,9 @@ #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; @@ -74,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 { -- 2.7.4