Hi Felix, On Wed, 27 Jan 2010 19:56:02 +0200, Felix Rubinstein wrote: > Running i2cdetect on ICH9 says: > "I2C Block Write yes" > > But having a closer look at how the whole thing is implemented proves > that no i2c block write is supported. > > The proof: > 1. i801_probe turns i801_features to FEATURE_I2C_BLOCK_READ Yes it does, but this is totally unrelated to I2C block _writes_. > 2. as a sequence in i801_block_transaction > i801_block_transaction_byte_by_byte is called No. Read the code again, for the ICH9, i801_block_transaction_by_block is called, not i801_block_transaction_byte_by_byte. > 3. on the other hand i801_block_transaction_byte_by_byte does > if (read_write == I2C_SMBUS_WRITE) > outb_p(len, SMBHSTDAT0); > meaning SMBus length. This is correct, and as a matter of fact, i801_block_transaction_by_block does the same. And this is the right thing to do: the SMBus controller must know how many bytes it must send to the target slave. > But what if I want to write I2C's multi-block (without length or even > command before)? I have no idea what you mean with "I2C's multi-block". Please be specific. > I cannot understand why i801_func turns on I2C_FUNC_SMBUS_WRITE_I2C_BLOCK? Because it supports that transaction type. Why would you want it to not advertise a transaction type it supports? Please refer to Documentation/i2c/smbus-protocol for what exactly each supported transaction type is doing at the wire level. -- Jean Delvare http://khali.linux-fr.org/wishlist.html -- 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