diff options
author | Mario Six | 2018-01-15 11:08:12 +0100 |
---|---|---|
committer | Heiko Schocher | 2018-02-06 07:02:11 +0100 |
commit | 9cef983d1c5d3c4150f70346346ace29b1dfe432 (patch) | |
tree | 65c54dc485325c1d7b4f17b343d38af0fcf6cc9d | |
parent | 92164216a7383907a38212fd3ca95dc7546ce49f (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.c | 50 |
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 |