We have found the i2c-davinci driver in our Linux Kernel to lack proper bus recovery (i2c_recover_bus()) when an I2C device would lock the bus (holding SDA low). We are using the OMAP-L138. The function generic_i2c_clock_pulse() (in drivers/i2c/busses/i2c-davinci.c) does not recover the bus for us. This is probably due to it not having control access of the SCL/SDA pins.
I have been doing some searching at I seems that Ben Gardiner has made a patch for using the ICPFUNC feature in the OMAP and that he has submitted his patches to lkml.org / patchwork.kernel.org ?.
One is found here ([4/6] i2c-davinci: use the DA8xx's ICPFUNC to toggle I2C as gpio) https://patchwork.kernel.org/patch/688771/
I have tried the above patch and it works great on our board, and it seems to be implemented in the proper way (according to some application notes I have found online, not just clocking 9 times). I am just wondering why his patches have not found its way to the DaVinci GIT Linux Kernel?
Many thanks,
Mads