]> git.sur5r.net Git - u-boot/blobdiff - drivers/i2c/imx_lpi2c.c
lpi2c: Fix bus stop problem in xfer
[u-boot] / drivers / i2c / imx_lpi2c.c
index d2e11b411babf0d969dc55f67fe75a84e5277b94..585787a35c60e05b52713be409b0839120b61378 100644 (file)
@@ -225,9 +225,6 @@ static int bus_i2c_read(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len)
        if (result)
                return result;
        result = bus_i2c_receive(regs, buf, len);
-       if (result)
-               return result;
-       result = bus_i2c_stop(regs);
        if (result)
                return result;
 
@@ -242,9 +239,6 @@ static int bus_i2c_write(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len)
        if (result)
                return result;
        result = bus_i2c_send(regs, buf, len);
-       if (result)
-               return result;
-       result = bus_i2c_stop(regs);
        if (result)
                return result;
 
@@ -380,7 +374,7 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip,
 static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs)
 {
        struct imx_lpi2c_reg *regs;
-       int ret = 0;
+       int ret = 0, ret_stop;
 
        regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus);
        for (; nmsgs > 0; nmsgs--, msg++) {
@@ -398,6 +392,12 @@ static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs)
        if (ret)
                debug("i2c_write: error sending\n");
 
+       ret_stop = bus_i2c_stop(regs);
+       if (ret_stop)
+               debug("i2c_xfer: stop bus error\n");
+
+       ret |= ret_stop;
+
        return ret;
 }