From: <matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg@public.gmane.org>
To: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
Cc: Vitaly Wool <vitalywool-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: Add restart support to i2c-pnx
Date: Wed, 02 Feb 2011 13:59:20 +0100 [thread overview]
Message-ID: <cd08bef3d940dd8ede1abc5bee93b190@imap.raing.si> (raw)
In-Reply-To: <20110202134102.1fd5b68d-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
Hi,
>> >> To all,
>> >>
>> >> this patch adds support for restart to the i2c-pnx.c code.
>> >>
>> >
>> > Sorry, can't see the patch itself :)
>>
>> Hit send to quick :D
>>
>> I hope now you can see it.
>
> No, we still can't.
Something is removing my attachments :(
This time 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.
Also, the patch extends the timeout value, but this was
only needed, because there are a lot of data to be transferred
and the timeout occurred before all the data was transferred.
The pathch is against 2.6.28.2, but it should apply to the
cureent GIT version as well.
Signed-off-by: Matej Kupljen <matej.kupljen-nWYkTt+LGLL1KXRcyAk9cg@public.gmane.org>
--- i2c-pnx-orig.c 2010-12-14 17:48:40.000000000 +0100
+++ i2c-pnx.c 2011-02-01 23:48:42.000000000 +0100
@@ -54,7 +54,8 @@
{
struct i2c_pnx_algo_data *data = adap->algo_data;
struct timer_list *timer = &data->mif.timer;
- int expires = I2C_PNX_TIMEOUT / (1000 / HZ);
+ // We should probably take into account, how many bytes we need to
transfer!
+ int expires = I2C_PNX_TIMEOUT * 10 / (1000 / HZ);
del_timer_sync(timer);
@@ -74,7 +75,7 @@
*
* Generate a START signal in the desired mode.
*/
-static int i2c_pnx_start(unsigned char slave_addr, struct i2c_adapter
*adap)
+static int i2c_pnx_start(unsigned char slave_addr, struct i2c_adapter
*adap, int repeated)
{
struct i2c_pnx_algo_data *alg_data = adap->algo_data;
@@ -89,8 +90,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))) {
/* Somebody else is monopolizing the bus */
dev_err(&adap->dev, "%s: Bus busy. Slave addr = %02x, "
"cntrl = %x, stat = %x\n",
@@ -439,7 +440,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;
struct i2c_pnx_algo_data *alg_data = adap->algo_data;
u32 stat = ioread32(I2C_REG_STS(alg_data));
@@ -454,6 +455,7 @@
pmsg = &msgs[i];
addr = pmsg->addr;
+ repeated = 0;
if (pmsg->flags & I2C_M_TEN) {
dev_err(&adap->dev,
@@ -479,16 +481,22 @@
/* 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 flaga allow us
+ */
+ if((i > 0) && !(pmsg->flags & I2C_M_NOSTART))
+ repeated = 1;
/* Put start-code and slave-address on the bus. */
- rc = i2c_pnx_start(addr, adap);
+ rc = i2c_pnx_start(addr, adap, 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);
next prev parent reply other threads:[~2011-02-02 12:59 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 [this message]
[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
[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=cd08bef3d940dd8ede1abc5bee93b190@imap.raing.si \
--to=matej.kupljen-nwyktt+lgll1kxrcyak9cg@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).