In a non-DM environment, it is possible to test the presence of a chip using i2c_probe(chip_addr). dm_i2c_probe_device() brings the same functionality with a DM interface. The intent is to be able to test the presence of a chip for the device has been created with i2c_get_chip_for_busnum(bus_num, chip_addr, ...)
Signed-off-by: Jean-Jacques Hiblot <jjhib...@ti.com> --- drivers/i2c/i2c-uclass.c | 8 ++++++++ include/i2c.h | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c index c5a3c4e..ec88168 100644 --- a/drivers/i2c/i2c-uclass.c +++ b/drivers/i2c/i2c-uclass.c @@ -378,6 +378,14 @@ int dm_i2c_probe(struct udevice *bus, uint chip_addr, uint chip_flags, return ret; } +int dm_i2c_probe_device(struct udevice *dev) +{ + struct udevice *bus = dev_get_parent(dev); + struct dm_i2c_chip *chip = dev_get_parent_platdata(dev); + + return i2c_probe_chip(bus, chip->chip_addr, chip->flags); +} + int dm_i2c_set_bus_speed(struct udevice *bus, unsigned int speed) { struct dm_i2c_ops *ops = i2c_get_ops(bus); diff --git a/include/i2c.h b/include/i2c.h index d33f827..3c8fde2 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -167,6 +167,19 @@ int dm_i2c_probe(struct udevice *bus, uint chip_addr, uint chip_flags, struct udevice **devp); /** + * dm_i2c_probe_dev() - probe the presence of a I2C device + * + * This can be useful to check for the existence of a chip already probed + * (software wise). + * It is typically implemented by writing the chip address to the bus + * and checking that the chip replies with an ACK. + * + * @bus: Device to probe + * @return 0 if a chip was found at that address, -ve if not + */ +int dm_i2c_probe_device(struct udevice *dev); + +/** * dm_i2c_reg_read() - Read a value from an I2C register * * This reads a single value from the given address in an I2C chip -- 2.7.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot