From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Fri, 22 Jun 2012 18:59:51 +0200 Subject: [U-Boot] [PATCH 05/24] mxc_i2c: create i2c_init_transfer In-Reply-To: <1340338339-11626-5-git-send-email-troy.kisky@boundarydevices.com> References: <1340338339-11626-1-git-send-email-troy.kisky@boundarydevices.com> <1340338339-11626-5-git-send-email-troy.kisky@boundarydevices.com> Message-ID: <201206221859.51467.marex@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Troy Kisky, > Initial code of i2c_read and i2c_write > is identical, move to subroutine. > > Signed-off-by: Troy Kisky Acked-by: Marek Vasut > --- > 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