aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMario Six2018-01-15 11:08:12 +0100
committerHeiko Schocher2018-02-06 07:02:11 +0100
commit9cef983d1c5d3c4150f70346346ace29b1dfe432 (patch)
tree65c54dc485325c1d7b4f17b343d38af0fcf6cc9d
parent92164216a7383907a38212fd3ca95dc7546ce49f (diff)
i2c: ihs_i2c: Factor out send_buffer method
Simplify the driver logic by extracting a common send_buffer method. Signed-off-by: Mario Six <mario.six@gdsys.cc>
-rw-r--r--drivers/i2c/ihs_i2c.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/drivers/i2c/ihs_i2c.c b/drivers/i2c/ihs_i2c.c
index b24afa472b1..ee96cd50d5b 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