mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 12:54:37 +00:00
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>
This commit is contained in:
parent
92164216a7
commit
9cef983d1c
1 changed files with 34 additions and 32 deletions
|
@ -198,29 +198,45 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DM_I2C
|
#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_send_buffer(uchar chip, u8 *data, int len, bool hold_bus,
|
||||||
|
int read)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
while (len) {
|
||||||
|
int transfer = min(len, 2);
|
||||||
|
bool is_last = len <= transfer;
|
||||||
|
|
||||||
|
#ifdef CONFIG_DM_I2C
|
||||||
|
if (ihs_i2c_transfer(dev, chip, data, transfer, read,
|
||||||
|
hold_bus ? false : is_last))
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
if (ihs_i2c_transfer(chip, data, transfer, read,
|
||||||
|
hold_bus ? false : is_last))
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
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
|
#else
|
||||||
static int ihs_i2c_address(uchar chip, u8 *addr, int alen, bool hold_bus)
|
static int ihs_i2c_address(uchar chip, u8 *addr, int alen, bool hold_bus)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
while (alen) {
|
|
||||||
int transfer = min(alen, 2);
|
|
||||||
bool is_last = alen <= transfer;
|
|
||||||
|
|
||||||
#ifdef CONFIG_DM_I2C
|
#ifdef CONFIG_DM_I2C
|
||||||
if (ihs_i2c_transfer(dev, chip, addr, transfer, I2COP_WRITE,
|
return ihs_i2c_send_buffer(dev, chip, addr, alen, hold_bus, I2COP_WRITE);
|
||||||
hold_bus ? false : is_last))
|
|
||||||
return 1;
|
|
||||||
#else
|
#else
|
||||||
if (ihs_i2c_transfer(chip, addr, transfer, I2COP_WRITE,
|
return ihs_i2c_send_buffer(chip, addr, alen, hold_bus, I2COP_WRITE);
|
||||||
hold_bus ? false : is_last))
|
|
||||||
return 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
alen -= transfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DM_I2C
|
#ifdef CONFIG_DM_I2C
|
||||||
|
@ -240,25 +256,11 @@ static int ihs_i2c_access(struct i2c_adapter *adap, uchar chip, u8 *addr,
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (len) {
|
|
||||||
int transfer = min(len, 2);
|
|
||||||
bool is_last = len <= transfer;
|
|
||||||
|
|
||||||
#ifdef CONFIG_DM_I2C
|
#ifdef CONFIG_DM_I2C
|
||||||
if (ihs_i2c_transfer(dev, chip, buffer, transfer, read,
|
return ihs_i2c_send_buffer(dev, chip, buffer, len, false, read);
|
||||||
is_last))
|
|
||||||
return 2;
|
|
||||||
#else
|
#else
|
||||||
if (ihs_i2c_transfer(chip, buffer, transfer, read,
|
return ihs_i2c_send_buffer(chip, buffer, len, false, read);
|
||||||
is_last))
|
|
||||||
return 2;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
buffer += transfer;
|
|
||||||
len -= transfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DM_I2C
|
#ifdef CONFIG_DM_I2C
|
||||||
|
|
Loading…
Add table
Reference in a new issue