summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHal Feng <hal.feng@starfivetech.com>2023-01-13 11:35:54 +0300
committerHal Feng <hal.feng@starfivetech.com>2023-01-13 11:35:54 +0300
commit52f8f570343a9380672719171044560d6514d74a (patch)
tree322a5242ce0d016bb5af52acd42f707c41dbcfe5
parent14341fbc54c2f333c8ec4eabad6de9335cd39926 (diff)
downloadlinux-52f8f570343a9380672719171044560d6514d74a.tar.xz
pinctrl: starfive: Save all register values when suspending and restore them when resuming
Restore the other registers besides irq registers when resuming. Signed-off-by: Hal Feng <hal.feng@starfivetech.com>
-rwxr-xr-xdrivers/pinctrl/starfive/pinctrl-starfive-jh7110.c26
-rw-r--r--drivers/pinctrl/starfive/pinctrl-starfive.h8
2 files changed, 18 insertions, 16 deletions
diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
index 091f36649512..06a8e21075af 100755
--- a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
+++ b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
@@ -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);
}
diff --git a/drivers/pinctrl/starfive/pinctrl-starfive.h b/drivers/pinctrl/starfive/pinctrl-starfive.h
index ed79d72aaea3..19539b814128 100644
--- a/drivers/pinctrl/starfive/pinctrl-starfive.h
+++ b/drivers/pinctrl/starfive/pinctrl-starfive.h
@@ -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 {