Re: [PATCH 4/4] i2c: gpio: Run deblock sequence on probe
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 --- drivers/i2c/i2c-gpio.c | 15 +++ 1 file changed, 15 insertions(+) Applied to u-boot-i2c next, thanks! bye, Heiko -- 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: h...@denx.de
Re: [PATCH 4/4] i2c: gpio: Run deblock sequence on probe
On 2/18/20 8:11 AM, Heiko Schocher wrote: > 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 >> --- >> 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! Done in [PATCH] doc: i2c: gpio: Document deblock sequence on probe
Re: [PATCH 4/4] i2c: gpio: Run deblock sequence on probe
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 --- 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 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(>gpios[PIN_SDA], +>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= _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: h...@denx.de
[PATCH 4/4] i2c: gpio: Run deblock sequence on probe
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 --- drivers/i2c/i2c-gpio.c | 15 +++ 1 file changed, 15 insertions(+) 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(>gpios[PIN_SDA], +>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= _gpio_ops, -- 2.24.1