Message ID | 1340338339-11626-5-git-send-email-troy.kisky@boundarydevices.com |
---|---|
State | Superseded |
Delegated to: | Heiko Schocher |
Headers | show |
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
On 22/06/2012 06:12, Troy Kisky wrote: > Initial code of i2c_read and i2c_write > is identical, move to subroutine. > > Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com> > --- Acked-by: Stefano Babic <sbabic@denx.de> Best regards, Stefano Babic
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;
Initial code of i2c_read and i2c_write is identical, move to subroutine. Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com> --- drivers/i2c/mxc_i2c.c | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-)