From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> To: Grygorii Strashko <grygorii.strashko@ti.com>, Wolfram Sang <wsa@the-dreams.de> Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Sekhar Nori <nsekhar@ti.com>, Kevin Hilman <khilman@deeprootsystems.com>, Santosh Shilimkar <ssantosh@kernel.org>, Murali Karicheri <m-karicheri2@ti.com> Subject: Re: [2/5] i2c: davinci: query STP always when NACK is received Date: Mon, 24 Nov 2014 21:02:35 +0100 [thread overview] Message-ID: <20141124200235.GV4431@pengutronix.de> (raw) In-Reply-To: <547333EB.5050403@ti.com> Hello Grygorii, On Mon, Nov 24, 2014 at 03:34:35PM +0200, Grygorii Strashko wrote: > On 11/23/2014 10:33 PM, Uwe Kleine-König wrote: > > A call to .master_xfer with a message sequence implicitly expects ACKs > > from the slave and doesn't tell anything about what should be done on a > > NAK. So IMHO you must not send a P when the slave responds with a NAK, > > but error out and let the sender decide if it wants to reply with P or > > Sr. > > Sry, but what should be done is defined by I2C/SMbus specs? Does it? > For SMBus devices, the specification states (http://smbus.org/specs/) > "4.2.Acknowledge (ACK) and not acknowledge (NACK)": > - "The slave device detects an invalid command or invalid data. In this > case the slave device must not acknowledge the received byte. The master > upon detection of this condition must generate a STOP condition and > retry the transaction" > For I2C devices, the specification states [http://www.nxp.com/documents/user_manual/UM10204.pdf]: > "3.1.6 Acknowledge (ACK) and Not Acknowledge (NACK)" > "When SDA remains HIGH during this ninth clock pulse, this is defined as the Not > Acknowledge signal. The master can then generate either a STOP condition to > abort the transfer, or a repeated START condition to start a new transfer." Yes, that's exactly what I meant. The master has the choice, and the driver should not eliminate options here. > Let take a look on i2c/smbus xfer: > i2c_lock_adapter(adap) > adap->algo->master_xfer/smbus_xfer() > i2c_unlock_adapter(adap); > |- rt_mutex_unlock(&adapter->bus_lock); > |- task switch > > So, there is no guarantee that next xfer will address the same I2C client device, > which, in turn, may lead to BB detection (will lead to BB detection if previous > transfer has been not acknowledged by SMbus client device). That's a valid concern. > Small summary, I2C core + Davinci I2C driver provide ability to use repeated > start (Sr) only within one I2C transaction - which is a number of write/read > operations specified by i2c_msg array. NACK always interrupts transaction > with -EREMOTEIO. > > Also, the I2C core doesn't provide ability to manually send P. Hmm, Wolfram, what do you think? Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |
WARNING: multiple messages have this Message-ID (diff)
From: "Uwe Kleine-König" <u.kleine-koenig-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> To: Grygorii Strashko <grygorii.strashko-l0cyMroinI0@public.gmane.org>, Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org> Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>, Kevin Hilman <khilman-1D3HCaltpLuhEniVeURVKkEOCMrvLtNR@public.gmane.org>, Santosh Shilimkar <ssantosh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, Murali Karicheri <m-karicheri2-l0cyMroinI0@public.gmane.org> Subject: Re: [2/5] i2c: davinci: query STP always when NACK is received Date: Mon, 24 Nov 2014 21:02:35 +0100 [thread overview] Message-ID: <20141124200235.GV4431@pengutronix.de> (raw) In-Reply-To: <547333EB.5050403-l0cyMroinI0@public.gmane.org> Hello Grygorii, On Mon, Nov 24, 2014 at 03:34:35PM +0200, Grygorii Strashko wrote: > On 11/23/2014 10:33 PM, Uwe Kleine-König wrote: > > A call to .master_xfer with a message sequence implicitly expects ACKs > > from the slave and doesn't tell anything about what should be done on a > > NAK. So IMHO you must not send a P when the slave responds with a NAK, > > but error out and let the sender decide if it wants to reply with P or > > Sr. > > Sry, but what should be done is defined by I2C/SMbus specs? Does it? > For SMBus devices, the specification states (http://smbus.org/specs/) > "4.2.Acknowledge (ACK) and not acknowledge (NACK)": > - "The slave device detects an invalid command or invalid data. In this > case the slave device must not acknowledge the received byte. The master > upon detection of this condition must generate a STOP condition and > retry the transaction" > For I2C devices, the specification states [http://www.nxp.com/documents/user_manual/UM10204.pdf]: > "3.1.6 Acknowledge (ACK) and Not Acknowledge (NACK)" > "When SDA remains HIGH during this ninth clock pulse, this is defined as the Not > Acknowledge signal. The master can then generate either a STOP condition to > abort the transfer, or a repeated START condition to start a new transfer." Yes, that's exactly what I meant. The master has the choice, and the driver should not eliminate options here. > Let take a look on i2c/smbus xfer: > i2c_lock_adapter(adap) > adap->algo->master_xfer/smbus_xfer() > i2c_unlock_adapter(adap); > |- rt_mutex_unlock(&adapter->bus_lock); > |- task switch > > So, there is no guarantee that next xfer will address the same I2C client device, > which, in turn, may lead to BB detection (will lead to BB detection if previous > transfer has been not acknowledged by SMbus client device). That's a valid concern. > Small summary, I2C core + Davinci I2C driver provide ability to use repeated > start (Sr) only within one I2C transaction - which is a number of write/read > operations specified by i2c_msg array. NACK always interrupts transaction > with -EREMOTEIO. > > Also, the I2C core doesn't provide ability to manually send P. Hmm, Wolfram, what do you think? Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2014-11-24 20:03 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-11-20 10:03 [PATCH 0/5] i2c: davinci improvements and fixes Grygorii Strashko 2014-11-20 10:03 ` Grygorii Strashko 2014-11-20 10:03 ` [PATCH 1/5] i2c: i2c-davinci: switch to use platform_get_irq Grygorii Strashko 2014-11-20 10:03 ` Grygorii Strashko 2014-11-20 21:48 ` [1/5] " Uwe Kleine-König 2014-11-21 11:01 ` Grygorii Strashko 2014-11-21 11:01 ` Grygorii Strashko 2014-11-21 14:03 ` Rob Herring 2014-11-21 14:03 ` Rob Herring 2014-11-21 14:59 ` Grygorii Strashko 2014-11-20 10:03 ` [PATCH 2/5] i2c: davinci: query STP always when NACK is received Grygorii Strashko 2014-11-20 10:03 ` Grygorii Strashko 2014-11-20 22:19 ` [2/5] " Uwe Kleine-König 2014-11-20 22:19 ` Uwe Kleine-König 2014-11-21 12:48 ` Grygorii Strashko 2014-11-21 12:48 ` Grygorii Strashko 2014-11-21 13:10 ` Uwe Kleine-König 2014-11-21 13:10 ` Uwe Kleine-König 2014-11-21 15:33 ` Grygorii Strashko 2014-11-21 15:33 ` Grygorii Strashko 2014-11-23 20:33 ` Uwe Kleine-König 2014-11-23 20:33 ` Uwe Kleine-König 2014-11-24 13:34 ` Grygorii Strashko 2014-11-24 13:34 ` Grygorii Strashko 2014-11-24 20:02 ` Uwe Kleine-König [this message] 2014-11-24 20:02 ` Uwe Kleine-König 2014-11-20 10:03 ` [PATCH 3/5] i2c: recovery: change input parameter to i2c_adapter for prepare/unprepare_recovery Grygorii Strashko 2014-11-20 10:03 ` Grygorii Strashko 2014-11-21 18:49 ` [3/5] " Uwe Kleine-König 2014-11-21 18:49 ` Uwe Kleine-König 2014-11-20 10:03 ` [PATCH 4/5] i2c: davinci: use bus recovery infrastructure Grygorii Strashko 2014-11-20 10:03 ` Grygorii Strashko 2014-11-21 19:07 ` [4/5] " Uwe Kleine-König 2014-11-21 19:07 ` Uwe Kleine-König 2014-11-21 19:33 ` Grygorii Strashko 2014-11-21 19:33 ` Grygorii Strashko 2014-11-23 20:36 ` Uwe Kleine-König 2014-11-23 20:36 ` Uwe Kleine-König 2014-11-24 13:26 ` Grygorii Strashko 2014-11-24 13:26 ` Grygorii Strashko 2014-11-24 20:07 ` Uwe Kleine-König 2014-11-24 20:07 ` Uwe Kleine-König 2014-11-20 10:03 ` [PATCH 5/5] i2c: davinci: use ICPFUNC to toggle I2C as gpio for bus recovery Grygorii Strashko 2014-11-20 10:03 ` Grygorii Strashko 2014-11-23 17:04 ` [5/5] " Uwe Kleine-König 2014-11-23 17:04 ` Uwe Kleine-König 2014-11-24 13:15 ` Grygorii Strashko 2014-11-24 13:15 ` Grygorii Strashko 2014-11-24 18:13 ` Mike Looijmans 2014-11-24 18:13 ` Mike Looijmans 2014-11-24 19:22 ` Grygorii Strashko 2014-11-24 19:22 ` Grygorii Strashko 2014-11-24 19:45 ` Uwe Kleine-König 2014-11-24 19:45 ` Uwe Kleine-König 2014-11-25 13:04 ` Grygorii Strashko 2014-11-25 13:04 ` Grygorii Strashko
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=20141124200235.GV4431@pengutronix.de \ --to=u.kleine-koenig@pengutronix.de \ --cc=grygorii.strashko@ti.com \ --cc=khilman@deeprootsystems.com \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=m-karicheri2@ti.com \ --cc=nsekhar@ti.com \ --cc=ssantosh@kernel.org \ --cc=wsa@the-dreams.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: linkBe 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.