|
@@ -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
|