> + cmd |= FIELD_PREP(I2C_CMD_ADDR, msg->addr >> 1); I just noticed this and wonder: Don't you need the LSB of the address? It is not the RW flag, this is encoded in msg->flags. Also, no seperate handling for 10 bit addresses? Technically, 7-bit 0x50 is different on the wire from 10-bit 0x050. This is minor, though. There are no 10-bit devices out there. Still, did you test 10-bit support? Rest looks good.