Hi Marek,

> 
> Thinking about this, did you correctly configure the EEPROM write sector
> size? I think it's 32 bytes for this device.
> 

The EEPROM is correctly configured, i.e. page size is set to 32.

I made a test by writing one byte (0x01) to the address 0x0100 of the EEPROM. 
The EEPROM's I2C bus address is 0x54.
The test has only one transfer with a message length of 3 bytes.

I figured out that the value written to the MXS_I2C_DATA register should be 
0x010001a8. But instead of that a value of 0x00000000 is written to the 
register.

I think that the reason for that can be found in the following code section:

if (i + 1 == msg->len) {
        /* This is the last transfer. */
        start |= flags;
        start &= ~MXS_I2C_CTRL0_RETAIN_CLOCK;
        xlen = (i + 2) % 4;
        data >>= (4 - xlen) * 8;
} else if ((i & 3) == 2) {
        /* Regular transfer. */
        xlen = 4;
} else {
        /* Just stuff data. */
        continue;
}

After the last byte is stuffed into the variable data (i = 2) xlen is 
calculated (with xlen = (i + 2) % 4) to zero. Thus the following shift 
operation (data >>= (4 - xlen) * 8) shifts all the bits out of data that 
already contains 0x010001a8.


Best regards
Torsten Fleischer
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to