I have noticed the following behaviour with the i2c-rcar driver
with the following single i2c_msg structure:

        msg[0].addr = 0x12;
        msg[0].flags = I2C_M_RD;
        msg[0].len = 0;
        msg[0].buf = data;

The system issues an address transaction followed by a single byte
read.

I have tried changing the code to not ack the read after the address
interrupt, however this causes the i2c block to hang forever.

i2c_recv_irq():

        if (priv->pos + 1 >= msg->len) {
                rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_STOP);
                if (msg->len != 0)
                        rcar_i2c_status_bit_clear(priv, MAT | MDR);
                else
                        rcar_i2c_status_bit_clear(priv, MAT);
        } else {
                rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_DATA);
                rcar_i2c_recv_restart(priv);
        }

--
Ben Dooks                               http://www.codethink.co.uk/
Senior Engineer                         Codethink - Providing Genius
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to