I have been porting a piece of code that talks to several I2C peripherals to Linux on an OMAP L137. I'm using the community Linux, and I want to work from user mode. I've been using the i2c_smbus functions, and I've got things generally working. But I notice some things that are less than ideal.
1) There appears to be no function that puts out one address and then reads multiple bytes of data: ie:
addr (r), data, data, data ...
Instead they implement
addr(r), command, data, data ...
2) The functions that put out multiple bytes of data all want to have a "command" byte up front.
addr(w), command, data, data
That would be OK, but looking on a scope, I think I see that the command byte goes out twice!
So far, everything seems to be working using single byte read and write in loops. But that's not ideally efficient.
Does this look familiar to anyone? I wouldn't mind contributing to driver updates of some sort to improve this.