Simplify the driver logic by extracting a common send_buffer method.

Signed-off-by: Mario Six <mario....@gdsys.cc>
---

 drivers/i2c/ihs_i2c.c | 50 ++++++++++++++++++++++++++------------------------
 1 file changed, 26 insertions(+), 24 deletions(-)

diff --git a/drivers/i2c/ihs_i2c.c b/drivers/i2c/ihs_i2c.c
index 6aeda52cfa..aa15608065 100644
--- a/drivers/i2c/ihs_i2c.c
+++ b/drivers/i2c/ihs_i2c.c
@@ -198,32 +198,48 @@ 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)
 #else
@@ -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
-- 
2.11.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to