• Ville Syrjälä's avatar
    drm/i915: Restore GMBUS operation after a failed bit-banging fallback · 3e4d44e0
    Ville Syrjälä authored
    When the GMBUS based i2c transfer times out, we try to fall back to
    bit-banging and retry the operation that way. However if the bit-banging
    attempt also fails, we should probably go back to the GMBUS method for
    the next attempt. Maybe there simply wasn't anyone one the bus at this
    time.
    
    There's also a bit of a mess going on with the force_bit handling.
    It's supposed to be a ref count actually, and it is as far as
    intel_gmbus_force_bit() is concerned. But it's treated as just a
    flag by the timeout based bit-banging fallback. I suppose that's
    fine since we should never end up in the timeout fallback case
    if force_bit was already non-zero. However now that we want to restore
    things back to where they were after the bit-banging attempt failed,
    we're going to have to do things a bit differently to avoid clobbering
    the force_bit count as set up by intel_gmbus_force_bit(). So let's
    dedicate the high bit as a flag for the low level timeout based fallback
    and treat the rest of the bits as a ref count just as before.
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1457366220-29409-4-git-send-email-ville.syrjala@linux.intel.comReviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
    3e4d44e0
intel_i2c.c 18.7 KB