refactor i2c abstraction layer
refactor i2c abstraction layer

- return expected error codes rather than always success
- limited retries, rather than infinite
- keep all steps of i2c transfer within mutex
    - previously read following write was sometimes in a second mutex
acquisition

Medium-One/diagnostics-intelligence-s5d9,Medium-One/diagnostics-intelligence-s5d9,Medium-One/diagnostics-intelligence-s5d9