2023-09-21 18:03:53

by Wenhua Lin

[permalink] [raw]
Subject: [PATCH V2 1/4] gpio: sprd: In the sleep state, the eic debounce clk must be forced open

In the sleep state, Eic debounce has no clock and the clk of
debounce needs to be forced open, so that eic can wake up normally.

Fixes: 2788938b7946 ("gpio: eic-sprd: Make the irqchip immutable")

Signed-off-by: Wenhua Lin <[email protected]>
---
drivers/gpio/gpio-eic-sprd.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c
index 84352a6f4973..bfa8a4c7515a 100644
--- a/drivers/gpio/gpio-eic-sprd.c
+++ b/drivers/gpio/gpio-eic-sprd.c
@@ -23,6 +23,7 @@
#define SPRD_EIC_DBNC_IC 0x24
#define SPRD_EIC_DBNC_TRIG 0x28
#define SPRD_EIC_DBNC_CTRL0 0x40
+#define SPRD_EIC_DBNC_FORCE_CLK 0x8000

#define SPRD_EIC_LATCH_INTEN 0x0
#define SPRD_EIC_LATCH_INTRAW 0x4
@@ -214,6 +215,7 @@ static int sprd_eic_set_debounce(struct gpio_chip *chip, unsigned int offset,
u32 value = readl_relaxed(base + reg) & ~SPRD_EIC_DBNC_MASK;

value |= (debounce / 1000) & SPRD_EIC_DBNC_MASK;
+ value |= SPRD_EIC_DBNC_FORCE_CLK;
writel_relaxed(value, base + reg);

return 0;
--
2.17.1


2023-09-27 10:28:31

by Baolin Wang

[permalink] [raw]
Subject: Re: [PATCH V2 1/4] gpio: sprd: In the sleep state, the eic debounce clk must be forced open



On 9/21/2023 5:00 PM, Wenhua Lin wrote:
> In the sleep state, Eic debounce has no clock and the clk of
> debounce needs to be forced open, so that eic can wake up normally.
>
> Fixes: 2788938b7946 ("gpio: eic-sprd: Make the irqchip immutable")

Are you sure this is the right Fixes tag? This commit did not change EIC
debounce logics.

The changes look good to me.

> Signed-off-by: Wenhua Lin <[email protected]>
> ---
> drivers/gpio/gpio-eic-sprd.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c
> index 84352a6f4973..bfa8a4c7515a 100644
> --- a/drivers/gpio/gpio-eic-sprd.c
> +++ b/drivers/gpio/gpio-eic-sprd.c
> @@ -23,6 +23,7 @@
> #define SPRD_EIC_DBNC_IC 0x24
> #define SPRD_EIC_DBNC_TRIG 0x28
> #define SPRD_EIC_DBNC_CTRL0 0x40
> +#define SPRD_EIC_DBNC_FORCE_CLK 0x8000
>
> #define SPRD_EIC_LATCH_INTEN 0x0
> #define SPRD_EIC_LATCH_INTRAW 0x4
> @@ -214,6 +215,7 @@ static int sprd_eic_set_debounce(struct gpio_chip *chip, unsigned int offset,
> u32 value = readl_relaxed(base + reg) & ~SPRD_EIC_DBNC_MASK;
>
> value |= (debounce / 1000) & SPRD_EIC_DBNC_MASK;
> + value |= SPRD_EIC_DBNC_FORCE_CLK;
> writel_relaxed(value, base + reg);
>
> return 0;

2024-01-02 08:42:26

by wenhua lin

[permalink] [raw]
Subject: Re: [PATCH V2 1/4] gpio: sprd: In the sleep state, the eic debounce clk must be forced open

On Wed, Sep 27, 2023 at 5:08 PM Baolin Wang
<[email protected]> wrote:
>
>
>
> On 9/21/2023 5:00 PM, Wenhua Lin wrote:
> > In the sleep state, Eic debounce has no clock and the clk of
> > debounce needs to be forced open, so that eic can wake up normally.
> >
> > Fixes: 2788938b7946 ("gpio: eic-sprd: Make the irqchip immutable")
>
> Are you sure this is the right Fixes tag? This commit did not change EIC
> debounce logics.
>
> The changes look good to me.

This modification turns on the debounce clock, and we will modify the
submission
description on patch v3. Thank you for your review.

>
> > Signed-off-by: Wenhua Lin <[email protected]>
> > ---
> > drivers/gpio/gpio-eic-sprd.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/drivers/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c
> > index 84352a6f4973..bfa8a4c7515a 100644
> > --- a/drivers/gpio/gpio-eic-sprd.c
> > +++ b/drivers/gpio/gpio-eic-sprd.c
> > @@ -23,6 +23,7 @@
> > #define SPRD_EIC_DBNC_IC 0x24
> > #define SPRD_EIC_DBNC_TRIG 0x28
> > #define SPRD_EIC_DBNC_CTRL0 0x40
> > +#define SPRD_EIC_DBNC_FORCE_CLK 0x8000
> >
> > #define SPRD_EIC_LATCH_INTEN 0x0
> > #define SPRD_EIC_LATCH_INTRAW 0x4
> > @@ -214,6 +215,7 @@ static int sprd_eic_set_debounce(struct gpio_chip *chip, unsigned int offset,
> > u32 value = readl_relaxed(base + reg) & ~SPRD_EIC_DBNC_MASK;
> >
> > value |= (debounce / 1000) & SPRD_EIC_DBNC_MASK;
> > + value |= SPRD_EIC_DBNC_FORCE_CLK;
> > writel_relaxed(value, base + reg);
> >
> > return 0;