Hello Haibo Chen. The patch looks fine!
Reviewed-by: Alexander Kochetkov <al.koc...@gmail.com <mailto:al.koc...@gmail.com>> > 27 марта 2023 г., в 14:21, haibo.c...@nxp.com написал(а): > > From: Haibo Chen <haibo.c...@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.c...@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 >