On Wed, Jun 13, 2018 at 02:36:16PM -0500, Eddie James wrote: > Add abort procedure for failed transfers. Add engine and bus reset > procedures to recover from as many faults as possible. I think this is a way too aggressive recovery. Your are doing the 9 pulse toggles basically on any error while this is only when the device keeps SDA low and you want to recover from that. If SDA is not stuck low, sending a STOP should do. Or do you have a known case where this is not going to work? Also, you implement the pulse toggling manually. Can't you just populate {get|set}_{scl|sda} and use the generic routine we have in the core?