• Hans de Goede's avatar
    i2c: designware: Lock the adapter while setting the suspended flag · c57813b8
    Hans de Goede authored
    Lock the adapter while setting the suspended flag, to ensure that other
    locked code always sees the change immediately, rather then possibly using
    a stale value.
    
    This involves splitting the suspend/resume callbacks into separate runtime
    and normal suspend/resume calls. This is necessary because i2c_dw_xfer()
    will get called by the i2c-core with the adapter locked and it in turn
    calls the runtime-resume callback through pm_runtime_get_sync().
    
    So the runtime versions of the suspend/resume callbacks cannot take
    the adapter-lock. Note this patch simply makes the runtime suspend/resume
    callbacks not deal with the suspended flag at all. During runtime the
    pm_runtime_get_sync() from i2c_dw_xfer() will always ensure that the
    adapter is resumed when necessary.
    
    The suspended flag check is only necessary to check proper suspend/resume
    ordering during normal suspend/resume which makes the pm_runtime_get_sync()
    call a no-op.
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: default avatarJarkko Nikula <jarkko.nikula@linux.intel.com>
    Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
    c57813b8
i2c-designware-platdrv.c 11.9 KB