From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 03/24] mxc_i2c: create tx_byte function
Date: Fri, 22 Jun 2012 18:58:21 +0200 [thread overview]
Message-ID: <201206221858.21712.marex@denx.de> (raw)
In-Reply-To: <1340338339-11626-3-git-send-email-troy.kisky@boundarydevices.com>
Dear Troy Kisky,
> Use tx_byte function instead of having 3 copies
> of the code.
>
> Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
> ---
> drivers/i2c/mxc_i2c.c | 72
> +++++++++++++++---------------------------------- 1 file changed, 21
> insertions(+), 51 deletions(-)
>
> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
> index 0b46c9c..0fd508a 100644
> --- a/drivers/i2c/mxc_i2c.c
> +++ b/drivers/i2c/mxc_i2c.c
> @@ -33,6 +33,7 @@
> #include <common.h>
> #include <asm/arch/clock.h>
> #include <asm/arch/imx-regs.h>
> +#include <asm/errno.h>
> #include <asm/io.h>
> #include <i2c.h>
>
> @@ -207,17 +208,21 @@ int i2c_imx_trx_complete(void)
> udelay(1);
> }
>
> - return 1;
> + return -ETIMEDOUT;
> }
>
> -/*
> - * Check if the transaction was ACKed
> - */
> -int i2c_imx_acked(void)
> +static int tx_byte(struct mxc_i2c_regs *i2c_regs, u8 byte)
> {
> - struct mxc_i2c_regs *i2c_regs = (struct mxc_i2c_regs *)I2C_BASE;
> + unsigned ret;
>
> - return readb(&i2c_regs->i2sr) & I2SR_RX_NO_AK;
> + writeb(byte, &i2c_regs->i2dr);
> + ret = i2c_imx_trx_complete();
> + if (ret < 0)
> + return ret;
> + ret = readb(&i2c_regs->i2sr);
> + if (ret & I2SR_RX_NO_AK)
> + return -ENODEV;
> + return 0;
> }
>
> /*
> @@ -271,30 +276,6 @@ void i2c_imx_stop(void)
> }
>
> /*
> - * Set chip address and access mode
> - *
> - * read = 1: READ access
> - * read = 0: WRITE access
> - */
> -int i2c_imx_set_chip_addr(uchar chip, int read)
> -{
> - struct mxc_i2c_regs *i2c_regs = (struct mxc_i2c_regs *)I2C_BASE;
> - int ret;
> -
> - writeb((chip << 1) | read, &i2c_regs->i2dr);
> -
> - ret = i2c_imx_trx_complete();
> - if (ret)
> - return ret;
> -
> - ret = i2c_imx_acked();
> - if (ret)
> - return ret;
> -
> - return ret;
> -}
> -
> -/*
> * Write register address
> */
> int i2c_imx_set_reg_addr(uint addr, int alen)
> @@ -303,14 +284,8 @@ int i2c_imx_set_reg_addr(uint addr, int alen)
> int ret = 0;
>
> while (alen--) {
> - writeb((addr >> (alen * 8)) & 0xff, &i2c_regs->i2dr);
> -
> - ret = i2c_imx_trx_complete();
> - if (ret)
> - break;
> -
> - ret = i2c_imx_acked();
> - if (ret)
> + ret = tx_byte(i2c_regs, (addr >> (alen * 8)) & 0xff);
> + if (ret < 0)
> break;
> }
>
> @@ -322,13 +297,14 @@ int i2c_imx_set_reg_addr(uint addr, int alen)
> */
> int i2c_probe(uchar chip)
> {
> + struct mxc_i2c_regs *i2c_regs = (struct mxc_i2c_regs *)I2C_BASE;
> int ret;
>
> ret = i2c_imx_start();
> if (ret)
> return ret;
>
> - ret = i2c_imx_set_chip_addr(chip, 0);
> + ret = tx_byte(i2c_regs, chip << 1);
> if (ret)
> return ret;
>
> @@ -352,7 +328,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar
> *buf, int len) return ret;
>
> /* write slave address */
> - ret = i2c_imx_set_chip_addr(chip, 0);
> + ret = tx_byte(i2c_regs, chip << 1);
> if (ret)
> return ret;
>
> @@ -364,7 +340,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar
> *buf, int len) temp |= I2CR_RSTA;
> writeb(temp, &i2c_regs->i2cr);
>
> - ret = i2c_imx_set_chip_addr(chip, 1);
> + ret = tx_byte(i2c_regs, (chip << 1) | 1);
Isn't this | 1 and | 0 stuff #define-d somewhere? I think there was
I2C_READ_SOMETHING in i2c.h and I2C_WRITE_SOMETHING...
> if (ret)
> return ret;
>
Otherwise
Acked-by: Marek Vasut <marex@denx.de>
Best regards,
Marek Vasut
next prev parent reply other threads:[~2012-06-22 16:58 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-22 4:11 [U-Boot] [PATCH 01/24] mxc_i2c: fix i2c_imx_stop Troy Kisky
2012-06-22 4:11 ` [U-Boot] [PATCH 02/24] mxc_i2c: remove ifdef of CONFIG_HARD_I2C Troy Kisky
2012-06-22 16:55 ` Marek Vasut
2012-06-22 4:11 ` [U-Boot] [PATCH 03/24] mxc_i2c: create tx_byte function Troy Kisky
2012-06-22 16:58 ` Marek Vasut [this message]
2012-06-22 23:05 ` Troy Kisky
2012-06-23 1:51 ` Marek Vasut
2012-06-22 4:11 ` [U-Boot] [PATCH 04/24] mxc_i2c: clear i2sr before waiting for bit Troy Kisky
2012-06-22 16:59 ` Marek Vasut
2012-06-24 0:18 ` Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 05/24] mxc_i2c: create i2c_init_transfer Troy Kisky
2012-06-22 16:59 ` Marek Vasut
2012-06-24 8:06 ` Stefano Babic
2012-06-22 4:12 ` [U-Boot] [PATCH 06/24] mxc_i2c.c: code i2c_probe as a 0 length i2c_write Troy Kisky
2012-06-22 17:00 ` Marek Vasut
2012-06-24 8:03 ` Stefano Babic
2012-06-22 4:12 ` [U-Boot] [PATCH 07/24] mxc_i2c: combine i2c_imx_bus_busy and i2c_imx_trx_complete into wait_for_sr_state Troy Kisky
2012-06-22 17:01 ` Marek Vasut
2012-06-22 17:34 ` Troy Kisky
2012-06-22 18:01 ` Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 08/24] mxc_i2c: remove redundant read Troy Kisky
2012-06-22 17:02 ` Marek Vasut
2012-06-22 4:12 ` [U-Boot] [PATCH 09/24] mxc_i2c: place imx_start code inline Troy Kisky
2012-06-22 17:02 ` Marek Vasut
2012-06-22 4:12 ` [U-Boot] [PATCH 10/24] mxc_i2c: place i2c_reset " Troy Kisky
2012-06-22 17:03 ` Marek Vasut
2012-06-22 4:12 ` [U-Boot] [PATCH 11/24] mxc_i2c: don't disable controller after every transaction Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 12/24] mxc_i2c: change slave addr if conflicts with destination Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 13/24] mxc_i2c: check for arbitration lost Troy Kisky
2012-06-22 17:04 ` Marek Vasut
2012-06-22 4:12 ` [U-Boot] [PATCH 14/24] mxc_i2c: add retries Troy Kisky
2012-06-22 17:06 ` Marek Vasut
2012-06-22 17:40 ` Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 15/24] mxc_i2c: add i2c_regs argument to i2c_imx_stop Troy Kisky
2012-06-22 17:06 ` Marek Vasut
2012-06-22 4:12 ` [U-Boot] [PATCH 16/24] mxc_i2c: prep work for multiple busses support Troy Kisky
2012-06-22 17:08 ` Marek Vasut
2012-06-24 8:47 ` Heiko Schocher
2012-06-24 20:08 ` Marek Vasut
2012-06-24 22:09 ` Wolfgang Denk
2012-06-22 4:12 ` [U-Boot] [PATCH 17/24] mxc_i2c: add bus recovery support Troy Kisky
2012-06-24 8:51 ` Heiko Schocher
2012-06-26 3:42 ` Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 18/24] mxc_i2c.c: finish adding CONFIG_I2C_MULTI_BUS support Troy Kisky
2012-06-22 17:09 ` Marek Vasut
2012-06-22 19:41 ` Troy Kisky
2012-06-25 3:34 ` Tabi Timur-B04825
2012-06-22 4:12 ` [U-Boot] [PATCH 19/24] iomux-v3: remove include of mx6x_pins.h Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 20/24] i.mx: iomux-v3.h: move to imx-common include directory Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 21/24] i.mx: iomux-v3.c: move to imx-common directory Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 22/24] i.mx53: add definition for I2C3_BASE_ADDR Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 23/24] imx-common: add i2c.c for bus recovery support Troy Kisky
2012-06-22 4:12 ` [U-Boot] [PATCH 24/24] mx6qsabrelite: add i2c multi-bus support Troy Kisky
2012-06-22 16:55 ` [U-Boot] [PATCH 01/24] mxc_i2c: fix i2c_imx_stop Marek Vasut
2012-06-24 7:49 ` Stefano Babic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201206221858.21712.marex@denx.de \
--to=marex@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.