From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean Delvare Subject: Re: [PATCH] i2c/busses: (mpc) Add support for SMBUS_READ_BLOCK_DATA Date: Wed, 16 Nov 2011 18:38:06 +0100 Message-ID: <20111116183806.6130f0fb@endymion.delvare> References: <1321338462-6138-1-git-send-email-guenter.roeck@ericsson.com> <1321464509.7847.41.camel@oslab-l1> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1321464509.7847.41.camel@oslab-l1> Sender: linux-i2c-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: York Sun Cc: guenter.roeck-IzeFyvvaP7pWk0Htik3J/w@public.gmane.org, Tabi Timur-B04825 , linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, B29983-KZfg59tc24xl57MIdRCFDg@public.gmane.org List-Id: linux-i2c@vger.kernel.org On Wed, 16 Nov 2011 09:28:29 -0800, York Sun wrote: > I am not sure if this mail will reach the list as I am not subscribed. > > In the v2 patch (actually both version), you wrote > > > + byte = readb(i2c->base + MPC_I2C_DR); > > + > > + /* Adjust length if first received byte is length */ > > + if (i == 0 && recv_len) { > > + if (byte == 0 || byte > I2C_SMBUS_BLOCK_MAX) > > + return -EPROTO; > > + length += byte; > > + /* > > + * For block reads, generate txack here if data length > > + * is 1 byte (total length is 2 bytes). > > + */ > > + if (length == 2) > > + writeccr(i2c, CCR_MIEN | CCR_MEN | CCR_MSTA > > + | CCR_TXAK); > > + } > > + data[i] = byte; > > I am wondering if the first byte should be left out for data[] if the > recv_len is non-zero. If I understand correctly, this patch is to > support of SMBus with multiple byte read. The SMBus is different from > I2C bus on multiple byte. The first data is byte count vs slave data for > I2C. So you will receive all data preceded by the byte count, which is > one more than your loop. That's why he wrote length += byte; and not length = byte; length is initialized to 1 for SMBus block reads. -- Jean Delvare