Skip to content
  • Daniel Kurtz's avatar
    drm/i915/intel_i2c: use WAIT cycle, not STOP · 72d66afd
    Daniel Kurtz authored
    
    
    The i915 is only able to generate a STOP cycle (i.e. finalize an i2c
    transaction) during a DATA or WAIT phase.  In other words, the
    controller rejects a STOP requested as part of the first transaction in a
    sequence.
    
    Thus, for the first transaction we must always use a WAIT cycle, detect
    when the device has finished (and is in a WAIT phase), and then either
    start the next transaction, or, if there are no more transactions,
    generate a STOP cycle.
    
    Note: Theoretically, the last transaction of a multi-transaction sequence
    could initiate a STOP cycle.  However, this slight optimization is left
    for another patch.  We return -ETIMEDOUT if the hardware doesn't
    deactivate after the STOP cycle.
    
    Signed-off-by: default avatarDaniel Kurtz <djkurtz@chromium.org>
    [danvet: added comment to the code that gmbus can't generate STOP on
    the very first cycle.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    72d66afd