diff options
author | andy.hu <andy.hu@starfivetech.com> | 2023-01-11 15:02:08 +0300 |
---|---|---|
committer | andy.hu <andy.hu@starfivetech.com> | 2023-01-11 15:02:08 +0300 |
commit | 14341fbc54c2f333c8ec4eabad6de9335cd39926 (patch) | |
tree | 96669bb9746420bcb8b587e796f0b7e4e3efec42 | |
parent | c05f4d2a77b0493cd964d0ed034e815647b56a4b (diff) | |
parent | 82f8e41ea2d1b532f32afbc7d6ebb452916303b7 (diff) | |
download | linux-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-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 { |