I know there have been a lot of discussions arround the raspberry pi's problems with I2C, especially when it comes to repeated starts. Most discussions blame the Pi for not handling clock stretching correctly but this is incorrect (or at least not the full story)
I have been doing some tests & have been able to confirm that the PI doese not actualy send a start condition correctly.
A start (or repeated start) condition is defined as a High to low transition on the data line WHILST THE CLOCK LINE IS HIGH.
The Pi is not checking the status of the clock line before pulling data low meaning that the start condition is not recognised by the receiving device.
I proved this quite simply by tying clock to gnd & trying to scan the i2c bus, whilst monitoring the data line on my bitscope. the PI can be seen repeatedly pulling data low each time it checks an address, instead of either waiting indefinetly for the clock to come high or raising an error.