On Wed, 27 Jun 2012 21:56:34 +0800, Daniel Kurtz wrote: > On Wed, Jun 27, 2012 at 5:24 PM, Jean Delvare <khali@xxxxxxxxxxxx> wrote: > > I planned on testing this on my ICH3-M system, but it turns out your > > interrupt-based implementation only works for ICH5 and later chips. As > > ICH5 and later chips all implement the block buffer, there's no reason > > for the byte-by-byte-code to ever be used for SMBus block transactions. > > However, the block buffer feature can be disabled for testing purpose > > by passing module parameter disable_features=0x0002. > > > > I just did, and actually it doesn't work. i2cdump shows 32 bytes no > > matter what the device said. Debug log shows that the driver reads > > fewer bytes from the device though, as it is supposed to. So I think > > the problem is simply that the interrupt path is missing this compared > > to the polled path: > > > > if (i == 1 && read_write == I2C_SMBUS_READ > > && command != I2C_SMBUS_I2C_BLOCK_DATA) { > > len = inb_p(SMBHSTDAT0(priv)); > > (...) > > data->block[0] = len; > > } > > > > I.e. we don't let the caller know how many bytes we actually read from > > the device. I fixed it with: > > > > I was just in the middle of finalizing a new patchset when I saw your > last email. > I incorporated (and tested for no-regressions) the snippet below. > Unfortunately, I'm not set up to test this type of transaction, so > hopefully you can double check my version of this patch with your > setup. Sure, no problem, I will do another full round of testing on the new patchset. -- Jean Delvare -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html