Hmmm... I'm not an i2c expert, but I do work with experts. And in all my experience and knowledge (and the EE on the team confirms this), if the slave device NAKs a byte transmitted by the Master, the Master treats that as an error and stops transmitting.
That's indeed exactly what was happening too, until I removed that portion of code.
I think we might be confusing a Master *read* operation from a Slave with a Master *transmit* operation to a Slave. The latter is the case in that 2nd bug report. That code snippet comes from the portion of code which is recieving data from the Master. So for it to NAK (or 'not acknowledge') any byte along the way would imply an error back to the master.
For what it's worth, I've attached a file with the entire body of the Slave portion of this driver code, as I've augmented it to get it working. Until I made all the changes outlined as you see in that file (marked with 'find! WAM'), this driver simply would not work for us. There are a few more potential bugs or enhancements in there, in addition to what I've listed already.
Again... I'm no expert, I just know what worked, and I was using a Tektronix MSO 1404 scope to capture and decode the addr/data on the bus the whole time to verify transitions and timing.
Thanks!
Gomer