2021-03-04 20:26:38

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: [PATCH] gpio: regmap: fix direction register check

If there's a direction register, we should also have dat or set registers.
However, we only need one of them, not both.

Fixes: ebe363197e52 ("gpio: add a reusable generic gpio_chip using regmap")
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
---
drivers/gpio/gpio-regmap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpio/gpio-regmap.c b/drivers/gpio/gpio-regmap.c
index 23b0a8572f53..5a9fca00b5e8 100644
--- a/drivers/gpio/gpio-regmap.c
+++ b/drivers/gpio/gpio-regmap.c
@@ -194,7 +194,7 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config

/* if we have a direction register we need both input and output */
if ((config->reg_dir_out_base || config->reg_dir_in_base) &&
- (!config->reg_dat_base || !config->reg_set_base))
+ (!config->reg_dat_base && !config->reg_set_base))
return ERR_PTR(-EINVAL);

/* we don't support having both registers simultaneously for now */
--
2.20.1


2021-03-04 20:27:11

by Michael Walle

[permalink] [raw]
Subject: Re: [PATCH] gpio: regmap: fix direction register check

Am 2021-03-02 19:06, schrieb Álvaro Fernández Rojas:
> If there's a direction register, we should also have dat or set
> registers.
> However, we only need one of them, not both.

Can you give some more context or an example? If there is a direction
register, we'd need to set and get the value, no?

-michael

> Fixes: ebe363197e52 ("gpio: add a reusable generic gpio_chip using
> regmap")
> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
> ---
> drivers/gpio/gpio-regmap.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpio/gpio-regmap.c b/drivers/gpio/gpio-regmap.c
> index 23b0a8572f53..5a9fca00b5e8 100644
> --- a/drivers/gpio/gpio-regmap.c
> +++ b/drivers/gpio/gpio-regmap.c
> @@ -194,7 +194,7 @@ struct gpio_regmap *gpio_regmap_register(const
> struct gpio_regmap_config *config
>
> /* if we have a direction register we need both input and output */
> if ((config->reg_dir_out_base || config->reg_dir_in_base) &&
> - (!config->reg_dat_base || !config->reg_set_base))
> + (!config->reg_dat_base && !config->reg_set_base))
> return ERR_PTR(-EINVAL);
>
> /* we don't support having both registers simultaneously for now */