Skip to content
Snippets Groups Projects
  1. Aug 06, 2015
    • Simon Glass's avatar
      i2c: Add a mux for GPIO-based I2C bus arbitration · b725dc45
      Simon Glass authored
      
      While I2C supports multi-master buses this is difficult to get right.
      The implementation on the master side in software is quite complex.
      Clock-stretching and the arbitrary time that an I2C transaction can take
      make it difficult to share the bus fairly in the face of high traffic.
      When one or more masters can be reset independently part-way through a
      transaction it is hard to know the state of the bus.
      
      This driver provides a scheme based on two 'claim' GPIOs, one driven by the
      AP (Application Processor, meaning the main CPU) and one driven by the EC
      (Embedded Controller, a small CPU aimed at handling system tasks). With
      these they can communicate and reliably share the bus. This scheme has
      minimal overhead and involves very little code. It is used on snow to
      permit the EC and the AP to share access to the main system PMIC and
      battery. The scheme can survive reboots by either side without difficulty.
      This scheme has been tested in the field with millions of devices.
      
      Since U-Boot runs on the AP, the terminology used is 'our' claim GPIO,
      meaning the AP's, and 'their' claim GPIO, meaning the EC's. This terminology
      is used by the device tree bindings in Linux also.
      
      Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
      b725dc45
Loading