[PATCH 4/4] i2c: gpio: Run deblock sequence on probe
Heiko Schocher
hs at denx.de
Tue Feb 18 08:11:09 CET 2020
Hello Marek,
Am 07.02.2020 um 16:57 schrieb Marek Vasut:
> Add deblock dequence for the I2C bus, needed on some devices. This sequence
> is issued once, when probing the driver, and is controlled by DT property,
> "i2c-gpio,deblock".
>
> Signed-off-by: Marek Vasut <marex at denx.de>
> ---
> drivers/i2c/i2c-gpio.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
Nitpick: I see no entry in doc/device-tree-bindings/i2c/i2c-gpio.txt
for the new dts binding ... please send a follow up patch which adds it,
or a v2 for this one, thanks!
Reviewed-by: Heiko Schocher <hs at denx.de>
bye,
Heiko
>
> diff --git a/drivers/i2c/i2c-gpio.c b/drivers/i2c/i2c-gpio.c
> index 4e8fa21473..b6b6ba9ee8 100644
> --- a/drivers/i2c/i2c-gpio.c
> +++ b/drivers/i2c/i2c-gpio.c
> @@ -305,6 +305,20 @@ static int i2c_gpio_set_bus_speed(struct udevice *dev, unsigned int speed_hz)
> return 0;
> }
>
> +static int i2c_gpio_drv_probe(struct udevice *dev)
> +{
> + if (dev_read_bool(dev, "i2c-gpio,deblock")) {
> + /* @200kHz 9 clocks = 44us, 62us is ok */
> + const unsigned int DELAY_ABORT_SEQ = 62;
> + struct i2c_gpio_bus *bus = dev_get_priv(dev);
> + return i2c_deblock_gpio_loop(&bus->gpios[PIN_SDA],
> + &bus->gpios[PIN_SCL],
> + 16, 5, DELAY_ABORT_SEQ);
> + }
> +
> + return 0;
> +}
> +
> static int i2c_gpio_ofdata_to_platdata(struct udevice *dev)
> {
> struct i2c_gpio_bus *bus = dev_get_priv(dev);
> @@ -341,6 +355,7 @@ U_BOOT_DRIVER(i2c_gpio) = {
> .name = "i2c-gpio",
> .id = UCLASS_I2C,
> .of_match = i2c_gpio_ids,
> + .probe = i2c_gpio_drv_probe,
> .ofdata_to_platdata = i2c_gpio_ofdata_to_platdata,
> .priv_auto_alloc_size = sizeof(struct i2c_gpio_bus),
> .ops = &i2c_gpio_ops,
>
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
More information about the U-Boot
mailing list