
Dear Troy Kisky,
Initial code of i2c_read and i2c_write is identical, move to subroutine.
Signed-off-by: Troy Kisky troy.kisky@boundarydevices.com
Acked-by: Marek Vasut marex@denx.de
drivers/i2c/mxc_i2c.c | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-)
diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c index bae9335..626960d 100644 --- a/drivers/i2c/mxc_i2c.c +++ b/drivers/i2c/mxc_i2c.c @@ -275,19 +275,29 @@ void i2c_imx_stop(void) }
/*
- Write register address
- Send start signal, chip address and
*/
- write register address
-int i2c_imx_set_reg_addr(uint addr, int alen) +static int i2c_init_transfer(struct mxc_i2c_regs *i2c_regs,
uchar chip, uint addr, int alen)
{
- struct mxc_i2c_regs *i2c_regs = (struct mxc_i2c_regs *)I2C_BASE;
- int ret = 0;
int ret = i2c_imx_start();
if (ret)
goto exit;
/* write slave address */
ret = tx_byte(i2c_regs, chip << 1);
if (ret < 0)
goto exit;
while (alen--) { ret = tx_byte(i2c_regs, (addr >> (alen * 8)) & 0xff); if (ret < 0)
break;
}goto exit;
- return 0;
+exit:
- i2c_imx_stop(); return ret;
}
@@ -322,16 +332,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len) unsigned int temp; int i;
- ret = i2c_imx_start();
- if (ret)
return ret;
- /* write slave address */
- ret = tx_byte(i2c_regs, chip << 1);
- if (ret)
return ret;
- ret = i2c_imx_set_reg_addr(addr, alen);
- ret = i2c_init_transfer(i2c_regs, chip, addr, alen); if (ret) return ret;
@@ -389,16 +390,7 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len) int ret; int i;
- ret = i2c_imx_start();
- if (ret)
return ret;
- /* write slave address */
- ret = tx_byte(i2c_regs, chip << 1);
- if (ret)
return ret;
- ret = i2c_imx_set_reg_addr(addr, alen);
- ret = i2c_init_transfer(i2c_regs, chip, addr, alen); if (ret) return ret;
Best regards, Marek Vasut