2019-11-08 16:09:10

by Thierry Reding

[permalink] [raw]
Subject: [PATCH 1/2] gpio: max77620: Fixup debounce delays

From: Thierry Reding <[email protected]>

When converting milliseconds to microseconds in commit fffa6af94894
("gpio: max77620: Use correct unit for debounce times") some ~1 ms gaps
were introduced between the various ranges supported by the controller.
Fix this by changing the start of each range to the value immediately
following the end of the previous range. This way a debounce time of,
say 8250 us will translate into 16 ms instead of returning an -EINVAL
error.

Typically the debounce delay is only ever set through device tree and
specified in milliseconds, so we can never really hit this issue because
debounce times are always a multiple of 1000 us.

The only notable exception for this is drivers/mmc/host/mmc-spi.c where
the CD GPIO is requested, which passes a 1 us debounce time. According
to a comment preceeding that code this should actually be 1 ms (i.e.
1000 us).

Reported-by: Pavel Machek <[email protected]>
Signed-off-by: Thierry Reding <[email protected]>
---
drivers/gpio/gpio-max77620.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpio/gpio-max77620.c b/drivers/gpio/gpio-max77620.c
index c5b64a4ac172..313bd02dd893 100644
--- a/drivers/gpio/gpio-max77620.c
+++ b/drivers/gpio/gpio-max77620.c
@@ -198,13 +198,13 @@ static int max77620_gpio_set_debounce(struct max77620_gpio *mgpio,
case 0:
val = MAX77620_CNFG_GPIO_DBNC_None;
break;
- case 1000 ... 8000:
+ case 1 ... 8000:
val = MAX77620_CNFG_GPIO_DBNC_8ms;
break;
- case 9000 ... 16000:
+ case 8001 ... 16000:
val = MAX77620_CNFG_GPIO_DBNC_16ms;
break;
- case 17000 ... 32000:
+ case 16001 ... 32000:
val = MAX77620_CNFG_GPIO_DBNC_32ms;
break;
default:
--
2.23.0


2019-11-08 16:09:15

by Thierry Reding

[permalink] [raw]
Subject: [PATCH 2/2] gpio: bd70528: Use correct unit for debounce times

From: Thierry Reding <[email protected]>

The debounce time passed to gpiod_set_debounce() is specifid in
microseconds, so make sure to use the correct unit when computing the
register values, which denote delays in milliseconds.

Signed-off-by: Thierry Reding <[email protected]>
---
drivers/gpio/gpio-bd70528.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpio/gpio-bd70528.c b/drivers/gpio/gpio-bd70528.c
index d934d23b77c6..d29cbd3c9e53 100644
--- a/drivers/gpio/gpio-bd70528.c
+++ b/drivers/gpio/gpio-bd70528.c
@@ -25,13 +25,13 @@ static int bd70528_set_debounce(struct bd70528_gpio *bdgpio,
case 0:
val = BD70528_DEBOUNCE_DISABLE;
break;
- case 1 ... 15:
+ case 1 ... 15000:
val = BD70528_DEBOUNCE_15MS;
break;
- case 16 ... 30:
+ case 15001 ... 30000:
val = BD70528_DEBOUNCE_30MS;
break;
- case 31 ... 50:
+ case 30001 ... 50000:
val = BD70528_DEBOUNCE_50MS;
break;
default:
--
2.23.0

2019-11-08 20:55:24

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH 1/2] gpio: max77620: Fixup debounce delays

On Fri 2019-11-08 17:07:46, Thierry Reding wrote:
> From: Thierry Reding <[email protected]>
>
> When converting milliseconds to microseconds in commit fffa6af94894
> ("gpio: max77620: Use correct unit for debounce times") some ~1 ms gaps
> were introduced between the various ranges supported by the controller.
> Fix this by changing the start of each range to the value immediately
> following the end of the previous range. This way a debounce time of,
> say 8250 us will translate into 16 ms instead of returning an -EINVAL
> error.
>
> Typically the debounce delay is only ever set through device tree and
> specified in milliseconds, so we can never really hit this issue because
> debounce times are always a multiple of 1000 us.
>
> The only notable exception for this is drivers/mmc/host/mmc-spi.c where
> the CD GPIO is requested, which passes a 1 us debounce time. According
> to a comment preceeding that code this should actually be 1 ms (i.e.
> 1000 us).
>
> Reported-by: Pavel Machek <[email protected]>
> Signed-off-by: Thierry Reding <[email protected]>

Thanks for doing this!

Acked-by: Pavel Machek <[email protected]>

And I guess this should be cc: stable, as the commit this fixes was
making its way there.

Best regards,
Pavel


> @@ -198,13 +198,13 @@ static int max77620_gpio_set_debounce(struct max77620_gpio *mgpio,
> case 0:
> val = MAX77620_CNFG_GPIO_DBNC_None;
> break;
> - case 1000 ... 8000:
> + case 1 ... 8000:
> val = MAX77620_CNFG_GPIO_DBNC_8ms;
> break;
> - case 9000 ... 16000:
> + case 8001 ... 16000:
> val = MAX77620_CNFG_GPIO_DBNC_16ms;
> break;
> - case 17000 ... 32000:
> + case 16001 ... 32000:
> val = MAX77620_CNFG_GPIO_DBNC_32ms;
> break;
> default:

--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


Attachments:
(No filename) (1.89 kB)
signature.asc (201.00 B)
Download all attachments

2019-11-12 10:17:47

by Bartosz Golaszewski

[permalink] [raw]
Subject: Re: [PATCH 1/2] gpio: max77620: Fixup debounce delays

pt., 8 lis 2019 o 21:54 Pavel Machek <[email protected]> napisał(a):
>
> On Fri 2019-11-08 17:07:46, Thierry Reding wrote:
> > From: Thierry Reding <[email protected]>
> >
> > When converting milliseconds to microseconds in commit fffa6af94894
> > ("gpio: max77620: Use correct unit for debounce times") some ~1 ms gaps
> > were introduced between the various ranges supported by the controller.
> > Fix this by changing the start of each range to the value immediately
> > following the end of the previous range. This way a debounce time of,
> > say 8250 us will translate into 16 ms instead of returning an -EINVAL
> > error.
> >
> > Typically the debounce delay is only ever set through device tree and
> > specified in milliseconds, so we can never really hit this issue because
> > debounce times are always a multiple of 1000 us.
> >
> > The only notable exception for this is drivers/mmc/host/mmc-spi.c where
> > the CD GPIO is requested, which passes a 1 us debounce time. According
> > to a comment preceeding that code this should actually be 1 ms (i.e.
> > 1000 us).
> >
> > Reported-by: Pavel Machek <[email protected]>
> > Signed-off-by: Thierry Reding <[email protected]>
>
> Thanks for doing this!
>
> Acked-by: Pavel Machek <[email protected]>
>
> And I guess this should be cc: stable, as the commit this fixes was
> making its way there.
>
> Best regards,
> Pavel
>
>
> > @@ -198,13 +198,13 @@ static int max77620_gpio_set_debounce(struct max77620_gpio *mgpio,
> > case 0:
> > val = MAX77620_CNFG_GPIO_DBNC_None;
> > break;
> > - case 1000 ... 8000:
> > + case 1 ... 8000:
> > val = MAX77620_CNFG_GPIO_DBNC_8ms;
> > break;
> > - case 9000 ... 16000:
> > + case 8001 ... 16000:
> > val = MAX77620_CNFG_GPIO_DBNC_16ms;
> > break;
> > - case 17000 ... 32000:
> > + case 16001 ... 32000:
> > val = MAX77620_CNFG_GPIO_DBNC_32ms;
> > break;
> > default:
>
> --
> DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

Applied for fixes and marked for stable.

Thanks

2019-11-12 10:21:33

by Bartosz Golaszewski

[permalink] [raw]
Subject: Re: [PATCH 2/2] gpio: bd70528: Use correct unit for debounce times

pt., 8 lis 2019 o 17:07 Thierry Reding <[email protected]> napisał(a):
>
> From: Thierry Reding <[email protected]>
>
> The debounce time passed to gpiod_set_debounce() is specifid in
> microseconds, so make sure to use the correct unit when computing the
> register values, which denote delays in milliseconds.
>
> Signed-off-by: Thierry Reding <[email protected]>
> ---
> drivers/gpio/gpio-bd70528.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpio/gpio-bd70528.c b/drivers/gpio/gpio-bd70528.c
> index d934d23b77c6..d29cbd3c9e53 100644
> --- a/drivers/gpio/gpio-bd70528.c
> +++ b/drivers/gpio/gpio-bd70528.c
> @@ -25,13 +25,13 @@ static int bd70528_set_debounce(struct bd70528_gpio *bdgpio,
> case 0:
> val = BD70528_DEBOUNCE_DISABLE;
> break;
> - case 1 ... 15:
> + case 1 ... 15000:
> val = BD70528_DEBOUNCE_15MS;
> break;
> - case 16 ... 30:
> + case 15001 ... 30000:
> val = BD70528_DEBOUNCE_30MS;
> break;
> - case 31 ... 50:
> + case 30001 ... 50000:
> val = BD70528_DEBOUNCE_50MS;
> break;
> default:
> --
> 2.23.0
>

This fixes commit 18bc64b3aebf ("gpio: Initial support for ROHM
bd70528 GPIO block") present in v5.3 so applied to fixes and marked
for stable.

Bart