dm: i2c: Make i2c_get_chip_for_busnum() fail if the chip is not detected
authorJean-Jacques Hiblot <jjhiblot@ti.com>
Fri, 7 Dec 2018 13:50:38 +0000 (14:50 +0100)
committerHeiko Schocher <hs@denx.de>
Mon, 10 Dec 2018 05:03:45 +0000 (06:03 +0100)
i2c_get_chip_for_busnum() really should check the presence of the chip on
the bus. Most of the users of this function assume that this is done.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
drivers/i2c/i2c-uclass.c

index c5a3c4e2016e80d2c31c254c264f97fd80ff06f8..975318e5f254edb3e1498102d2292b8218d46245 100644 (file)
@@ -347,6 +347,17 @@ int i2c_get_chip_for_busnum(int busnum, int chip_addr, uint offset_len,
                debug("Cannot find I2C bus %d\n", busnum);
                return ret;
        }
+
+       /* detect the presence of the chip on the bus */
+       ret = i2c_probe_chip(bus, chip_addr, 0);
+       debug("%s: bus='%s', address %02x, ret=%d\n", __func__, bus->name,
+             chip_addr, ret);
+       if (ret) {
+               debug("Cannot detect I2C chip %02x on bus %d\n", chip_addr,
+                     busnum);
+               return ret;
+       }
+
        ret = i2c_get_chip(bus, chip_addr, offset_len, devp);
        if (ret) {
                debug("Cannot find I2C chip %02x on bus %d\n", chip_addr,