summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandy.hu <andy.hu@starfivetech.com>2023-01-11 15:02:08 +0300
committerandy.hu <andy.hu@starfivetech.com>2023-01-11 15:02:08 +0300
commit14341fbc54c2f333c8ec4eabad6de9335cd39926 (patch)
tree96669bb9746420bcb8b587e796f0b7e4e3efec42
parentc05f4d2a77b0493cd964d0ed034e815647b56a4b (diff)
parent82f8e41ea2d1b532f32afbc7d6ebb452916303b7 (diff)
downloadlinux-14341fbc54c2f333c8ec4eabad6de9335cd39926.tar.xz
Merge branch 'CR_3027_pinctrl_hal.feng' into 'jh7110-5.15.y-devel'
CR 3027 pinctrl hal.feng See merge request sdk/linux!669
-rwxr-xr-xdrivers/pinctrl/starfive/pinctrl-starfive-jh7110.c37
-rw-r--r--drivers/pinctrl/starfive/pinctrl-starfive.c19
-rw-r--r--drivers/pinctrl/starfive/pinctrl-starfive.h7
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 {