From: Ben Dooks <ben-i2c-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
To: Matej Kupljen <matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg@public.gmane.org>
Cc: Kevin Wells <kevin.wells-3arQi8VN3Tc@public.gmane.org>,
Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
Vitaly Wool <vitalywool-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: Add restart support to i2c-pnx
Date: Wed, 2 Feb 2011 22:24:04 +0000 [thread overview]
Message-ID: <20110202222404.GW15795@trinity.fluff.org> (raw)
In-Reply-To: <1296681822.15861.3.camel@orion>
On Wed, Feb 02, 2011 at 10:23:42PM +0100, Matej Kupljen wrote:
> Kevin,
>
> > Thanks for posting this patch. See comments below..
> > I'll be happy to test your changes once the following items
> > are clarified.
> >
> > > The pathch is against 2.6.28.2, but it should apply to the
> > > cureent GIT version as well.
> >
> > This patch needs to be re-based against the latest version
> > of the driver as it has changes that this patch will revert
> > or won't apply to.
>
> I re-based it against latest version of the kernel in GIT and
> also included your comments in the mail.
>
> Is it O.K. now?
>
> Regards,
> Matej
>
> P.S.: Changed the email client. I now attached the file as
> well as pasted it in-line.
>
> -------------------------------------------------------------------
> Current code in i2c-pnx.c doesn't support sending messages
> with restart condition in it, for example:
> S - (address | W) - Sr - (address | R) - ... - P
>
> This patch adds this to the current code. It has been
> tested on a custom board with LPC3152 CPU (similar to
> Embedded Artists EA313x board) with uBlox GPS receiver
> connected to I2C bus. It has been running over the night
> without errors.
>
> Signed-off-by: Matej Kupljen <matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg@public.gmane.org>
>
> --- i2c-pnx-orig.c 2011-02-02 21:30:19.000000000 +0100
> +++ i2c-pnx.c 2011-02-02 21:49:02.000000000 +0100
> @@ -78,7 +78,7 @@
> * Generate a START signal in the desired mode.
> */
> static int i2c_pnx_start(unsigned char slave_addr,
> - struct i2c_pnx_algo_data *alg_data)
> + struct i2c_pnx_algo_data *alg_data, int repeated)
bool repeated.
> {
> dev_dbg(&alg_data->adapter.dev, "%s(): addr 0x%x mode %d\n", __func__,
> slave_addr, alg_data->mif.mode);
> @@ -91,8 +91,8 @@
> return -EINVAL;
> }
>
> - /* First, make sure bus is idle */
> - if (wait_timeout(I2C_PNX_TIMEOUT, alg_data)) {
> + /* First, make sure bus is idle, if we are not doing repeated start */
> + if ((!repeated) && (wait_timeout(I2C_PNX_TIMEOUT, alg_data))) {
no need for () around !repeated.
> /* Somebody else is monopolizing the bus */
> dev_err(&alg_data->adapter.dev,
> "%s: Bus busy. Slave addr = %02x, cntrl = %x, stat = %x\n",
> @@ -441,7 +441,7 @@
> i2c_pnx_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
> {
> struct i2c_msg *pmsg;
> - int rc = 0, completed = 0, i;
> + int rc = 0, completed = 0, i, repeated;
see above.
> struct i2c_pnx_algo_data *alg_data = adap->algo_data;
> u32 stat = ioread32(I2C_REG_STS(alg_data));
>
> @@ -457,6 +457,7 @@
>
> pmsg = &msgs[i];
> addr = pmsg->addr;
> + repeated = 0;
>
> if (pmsg->flags & I2C_M_TEN) {
> dev_err(&alg_data->adapter.dev,
> @@ -481,16 +482,23 @@
> /* initialize the completion var */
> init_completion(&alg_data->mif.complete);
>
> - /* Enable master interrupt */
> - iowrite32(ioread32(I2C_REG_CTL(alg_data)) | mcntrl_afie |
> - mcntrl_naie | mcntrl_drmie,
> - I2C_REG_CTL(alg_data));
> + /*
> + * If this is not the only message, then we need to
> + * send repeated start, but only if the flag allows it
> + */
> + if((i > 0) && !(pmsg->flags & I2C_M_NOSTART))
no need for () around i > 0
> + repeated = 1;
>
> /* Put start-code and slave-address on the bus. */
> - rc = i2c_pnx_start(addr, alg_data);
> + rc = i2c_pnx_start(addr, alg_data, repeated);
> if (rc < 0)
> break;
>
> + /* Enable master interrupt */
> + iowrite32(ioread32(I2C_REG_CTL(alg_data)) | mcntrl_afie |
> + mcntrl_naie | mcntrl_drmie,
> + I2C_REG_CTL(alg_data));
> +
> /* Wait for completion */
> wait_for_completion(&alg_data->mif.complete);
--
Ben Dooks, ben-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org, http://www.fluff.org/ben/
Large Hadron Colada: A large Pina Colada that makes the universe disappear.
next prev parent reply other threads:[~2011-02-02 22:24 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-02 10:41 Add restart support to i2c-pnx matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg
[not found] ` <acc33abdeea1fb1dd33f6919e7a4c4e4-Z5eBVJDltO98b/lofMYZ3A@public.gmane.org>
2011-02-02 11:19 ` Vitaly Wool
[not found] ` <AANLkTimrs02v70OMkExsfBKhdOU1pxoFoAEn780qj_v--JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-02-02 11:43 ` matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg
[not found] ` <aeed818a0cfb7836e7599aad4ffb9874-Z5eBVJDltO98b/lofMYZ3A@public.gmane.org>
2011-02-02 12:41 ` Jean Delvare
[not found] ` <20110202134102.1fd5b68d-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2011-02-02 12:59 ` matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg
[not found] ` <cd08bef3d940dd8ede1abc5bee93b190-Z5eBVJDltO98b/lofMYZ3A@public.gmane.org>
2011-02-02 19:47 ` Kevin Wells
[not found] ` <083DF309106F364B939360100EC290F80B0E17D10F-SIPbe8o7cfX8DdpCu65jn8FrZmdRls4ZQQ4Iyu8u01E@public.gmane.org>
2011-02-02 21:23 ` Matej Kupljen
2011-02-02 22:24 ` Ben Dooks [this message]
[not found] ` <20110202222404.GW15795-SMNkleLxa3Z6Wcw2j4pizdi2O/JbrIOy@public.gmane.org>
2011-02-03 7:54 ` matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg
[not found] ` <f72f4b6ef01079e2ecd41b39041b4082-Z5eBVJDltO98b/lofMYZ3A@public.gmane.org>
2011-02-03 8:03 ` Vitaly Wool
2011-02-05 16:07 ` Ben Dooks
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=20110202222404.GW15795@trinity.fluff.org \
--to=ben-i2c-elnmno+kys3ytjvyw6ydsg@public.gmane.org \
--cc=kevin.wells-3arQi8VN3Tc@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg@public.gmane.org \
--cc=vitalywool-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/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.