[PATCH v3] i2c: correct I2C deblock logic
Alexander Kochetkov
al.kochet at gmail.com
Mon Mar 27 13:32:13 CEST 2023
Hello Haibo Chen.
The patch looks fine!
Reviewed-by: Alexander Kochetkov <al.kochet at gmail.com <mailto:al.kochet at gmail.com>>
> 27 марта 2023 г., в 14:21, haibo.chen at nxp.com написал(а):
>
> From: Haibo Chen <haibo.chen at nxp.com>
>
> Current code use dm_gpio_get_value() to get SDA and SCL value, and the
> value depends on whether DTS file config the GPIO_ACTIVE_LOW. In ususal
> case for i2c GPIO, DTS need to set GPIO_ACTIVE_LOW for SCL/SDA pins. So
> here the logic is not correct.
>
> And we must not use GPIOD_ACTIVE_LOW in client code include the
> dm_gpio_set_dir_flags(), it is DTS's responsibility for this flag. So
> remove GPIOD_ACTIVE_LOW here.
>
> Fixes: aa54192d4a87 ("dm: i2c: implement gpio-based I2C deblock")
> Signed-off-by: Haibo Chen <haibo.chen at nxp.com>
> ---
> drivers/i2c/i2c-uclass.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c
> index 8d9a89ed89..8867a560bd 100644
> --- a/drivers/i2c/i2c-uclass.c
> +++ b/drivers/i2c/i2c-uclass.c
> @@ -508,13 +508,13 @@ static void i2c_gpio_set_pin(struct gpio_desc *pin, int bit)
> dm_gpio_set_dir_flags(pin, GPIOD_IS_IN);
> else
> dm_gpio_set_dir_flags(pin, GPIOD_IS_OUT |
> - GPIOD_ACTIVE_LOW |
> GPIOD_IS_OUT_ACTIVE);
> }
>
> static int i2c_gpio_get_pin(struct gpio_desc *pin)
> {
> - return dm_gpio_get_value(pin);
> + /* DTS need config GPIO_ACTIVE_LOW */
> + return !dm_gpio_get_value(pin);
> }
>
> int i2c_deblock_gpio_loop(struct gpio_desc *sda_pin,
> --
> 2.34.1
>
More information about the U-Boot
mailing list