i2c: ihs_i2c: Factor out send_buffer method
authorMario Six <mario.six@gdsys.cc>
Mon, 15 Jan 2018 10:08:12 +0000 (11:08 +0100)
committerHeiko Schocher <hs@denx.de>
Tue, 6 Feb 2018 06:02:11 +0000 (07:02 +0100)
Simplify the driver logic by extracting a common send_buffer method.

Signed-off-by: Mario Six <mario.six@gdsys.cc>
drivers/i2c/ihs_i2c.c

index b24afa472b111165c00baf3e4cb91dd45f0b9901..ee96cd50d5bd432ffaa1413459673f3db1322e96 100644 (file)
@@ -198,31 +198,47 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read,
 }
 
 #ifdef CONFIG_DM_I2C
-static int ihs_i2c_address(struct udevice *dev, uchar chip, u8 *addr, int alen, bool hold_bus)
+static int ihs_i2c_send_buffer(struct udevice *dev, uchar chip, u8 *data, int len, bool hold_bus, int read)
 #else
-static int ihs_i2c_address(uchar chip, u8 *addr, int alen, bool hold_bus)
+static int ihs_i2c_send_buffer(uchar chip, u8 *data, int len, bool hold_bus,
+                              int read)
 #endif
 {
-       while (alen) {
-               int transfer = min(alen, 2);
-               bool is_last = alen <= transfer;
+       while (len) {
+               int transfer = min(len, 2);
+               bool is_last = len <= transfer;
 
 #ifdef CONFIG_DM_I2C
-               if (ihs_i2c_transfer(dev, chip, addr, transfer, I2COP_WRITE,
+               if (ihs_i2c_transfer(dev, chip, data, transfer, read,
                                     hold_bus ? false : is_last))
                        return 1;
 #else
-               if (ihs_i2c_transfer(chip, addr, transfer, I2COP_WRITE,
+               if (ihs_i2c_transfer(chip, data, transfer, read,
                                     hold_bus ? false : is_last))
                        return 1;
 #endif
 
-               alen -= transfer;
+               data += transfer;
+               len -= transfer;
        }
 
        return 0;
 }
 
+#ifdef CONFIG_DM_I2C
+static int ihs_i2c_address(struct udevice *dev, uchar chip, u8 *addr, int alen,
+                          bool hold_bus)
+#else
+static int ihs_i2c_address(uchar chip, u8 *addr, int alen, bool hold_bus)
+#endif
+{
+#ifdef CONFIG_DM_I2C
+       return ihs_i2c_send_buffer(dev, chip, addr, alen, hold_bus, I2COP_WRITE);
+#else
+       return ihs_i2c_send_buffer(chip, addr, alen, hold_bus, I2COP_WRITE);
+#endif
+}
+
 #ifdef CONFIG_DM_I2C
 static int ihs_i2c_access(struct udevice *dev, uchar chip, u8 *addr,
                          int alen, uchar *buffer, int len, int read)
@@ -240,25 +256,11 @@ static int ihs_i2c_access(struct i2c_adapter *adap, uchar chip, u8 *addr,
                return 1;
 #endif
 
-       while (len) {
-               int transfer = min(len, 2);
-               bool is_last = len <= transfer;
-
 #ifdef CONFIG_DM_I2C
-               if (ihs_i2c_transfer(dev, chip, buffer, transfer, read,
-                                    is_last))
-                       return 2;
+       return ihs_i2c_send_buffer(dev, chip, buffer, len, false, read);
 #else
-               if (ihs_i2c_transfer(chip, buffer, transfer, read,
-                                    is_last))
-                       return 2;
+       return ihs_i2c_send_buffer(chip, buffer, len, false, read);
 #endif
-
-               buffer += transfer;
-               len -= transfer;
-       }
-
-       return 0;
 }
 
 #ifdef CONFIG_DM_I2C