pinctrl: starfive: Save all register values when suspending and restore them when...
authorHal Feng <hal.feng@starfivetech.com>
Fri, 13 Jan 2023 08:35:54 +0000 (16:35 +0800)
committerHal Feng <hal.feng@starfivetech.com>
Fri, 13 Jan 2023 08:35:54 +0000 (16:35 +0800)
Restore the other registers besides irq registers when resuming.

Signed-off-by: Hal Feng <hal.feng@starfivetech.com>
drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
drivers/pinctrl/starfive/pinctrl-starfive.h

index 091f366..06a8e21 100755 (executable)
@@ -1668,13 +1668,15 @@ 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 < SYS_REG_SUSPENDED_NUM ; i++)
+               pctl->sys_reg_suspended[i] = readl_relaxed(pctl->padctl_base +
+                                                          SYS_GPO_DOEN_CFG_BASE_REG +
+                                                          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);
+       for (i = 0 ; i < AON_REG_SUSPENDED_NUM ; i++)
+               pctl->aon_reg_suspended[i] = readl_relaxed(pctl->padctl_base +
+                                                          AON_GPO_DOEN_CFG_BASE_REG +
+                                                          OFFSET_PER_REG * i);
 
        return pinctrl_force_sleep(pctl->pctl_dev);
 }
@@ -1684,13 +1686,13 @@ 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 < SYS_REG_SUSPENDED_NUM ; i++)
+               writel_relaxed(pctl->sys_reg_suspended[i],
+                              pctl->padctl_base + SYS_GPO_DOEN_CFG_BASE_REG + 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);
+       for (i = 0 ; i < AON_REG_SUSPENDED_NUM ; i++)
+               writel_relaxed(pctl->aon_reg_suspended[i],
+                              pctl->padctl_base + AON_GPO_DOEN_CFG_BASE_REG + OFFSET_PER_REG * i);
 
        return pinctrl_force_default(pctl->pctl_dev);
 }
index ed79d72..19539b8 100644 (file)
@@ -17,8 +17,8 @@
 
 #define STARFIVE_USE_SCU                       BIT(0)
 
-#define SYS_IRQ_REG_SUSPENDED_NUM              11
-#define AON_IRQ_REG_SUSPENDED_NUM              6
+#define SYS_REG_SUSPENDED_NUM                  174
+#define AON_REG_SUSPENDED_NUM                  37
 
 struct platform_device;
 
@@ -78,8 +78,8 @@ struct starfive_pinctrl {
        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];
+       u32 sys_reg_suspended[SYS_REG_SUSPENDED_NUM];
+       u32 aon_reg_suspended[AON_REG_SUSPENDED_NUM];
 };
 
 struct starfive_pinctrl_soc_info {