linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Glauber <jglauber@cavium.com>
To: Wolfram Sang <wsa@the-dreams.de>
Cc: linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org,
	David Daney <ddaney@caviumnetworks.com>,
	Steven.Hill@caviumnetworks.com, Jan Glauber <jglauber@cavium.com>
Subject: [PATCH 1/3] i2c: octeon: Missing AAK flag in case of I2C_M_RECV_LEN
Date: Wed,  8 Jun 2016 08:51:17 +0200	[thread overview]
Message-ID: <d16b9cde449b0f6bad954c7ac1db2ac941231601.1465304877.git.jglauber@cavium.com> (raw)
In-Reply-To: <cover.1465304877.git.jglauber@cavium.com>
In-Reply-To: <cover.1465304877.git.jglauber@cavium.com>

During receive the controller requires the AAK flag for all
bytes but the final one. This was wrong in case of I2C_M_RECV_LEN,
where the decision if the final byte is to be transmitted
happened before adding the additional received length byte.

Set the AAK flag if additional bytes are to be received.

Signed-off-by: Jan Glauber <jglauber@cavium.com>
---
 drivers/i2c/busses/i2c-octeon.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-octeon.c b/drivers/i2c/busses/i2c-octeon.c
index aa5f01e..1922e4a 100644
--- a/drivers/i2c/busses/i2c-octeon.c
+++ b/drivers/i2c/busses/i2c-octeon.c
@@ -934,8 +934,15 @@ static int octeon_i2c_read(struct octeon_i2c *i2c, int target,
 		return result;
 
 	for (i = 0; i < length; i++) {
-		/* for the last byte TWSI_CTL_AAK must not be set */
-		if (i + 1 == length)
+		/*
+		 * For the last byte to receive TWSI_CTL_AAK must not be set.
+		 *
+		 * A special case is I2C_M_RECV_LEN where we don't know the
+		 * additional length yet. If recv_len is set we assume we're
+		 * not reading the final byte and therefore need to set
+		 * TWSI_CTL_AAK.
+		 */
+		if ((i + 1 == length) && !(recv_len && i == 0))
 			final_read = true;
 
 		/* clear iflg to allow next event */
-- 
2.9.0.rc0.21.g7777322

  reply	other threads:[~2016-06-08  6:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-08  6:51 [PATCH 0/3] Bug fixes for octeon driver Jan Glauber
2016-06-08  6:51 ` Jan Glauber [this message]
2016-06-09 20:09   ` [PATCH 1/3] i2c: octeon: Missing AAK flag in case of I2C_M_RECV_LEN Wolfram Sang
2016-06-08  6:51 ` [PATCH 2/3] i2c: octeon: Add retry logic after receiving STAT_RXADDR_NAK Jan Glauber
2016-06-09 20:11   ` Wolfram Sang
2016-06-14  8:03     ` Jan Glauber
2016-06-08  6:51 ` [PATCH 3/3] i2c: octeon: Avoid printk after too long SMBUS message Jan Glauber
2016-06-09 20:09   ` Wolfram Sang

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=d16b9cde449b0f6bad954c7ac1db2ac941231601.1465304877.git.jglauber@cavium.com \
    --to=jglauber@cavium.com \
    --cc=Steven.Hill@caviumnetworks.com \
    --cc=ddaney@caviumnetworks.com \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=wsa@the-dreams.de \
    --subject='Re: [PATCH 1/3] i2c: octeon: Missing AAK flag in case of I2C_M_RECV_LEN' \
    /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

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).