• Hans de Goede's avatar
    i2c: designware: Never suspend i2c-busses used for accessing the system PMIC · 41c80b8a
    Hans de Goede authored
    Currently we are already setting a pm_runtime_disabled flag and disabling
    runtime-pm for i2c-busses used for accessing the system PMIC on x86.
    But this is not enough, there are ACPI opregions which may want to access
    the PMIC during late-suspend and early-resume, so we need to completely
    disable pm to be safe.
    
    This commit renames the flag from pm_runtime_disabled to pm_disabled and
    adds the following new behavior if the flag is set:
    
    1) Call dev_pm_syscore_device(dev, true) which disables normal suspend /
       resume and remove the pm_runtime_disabled check from dw_i2c_plat_resume
       since that will now never get called. This fixes suspend_late handlers
       which use ACPI PMIC opregions causing errors like these:
    
      PM: Suspending system (freeze)
      PM: suspend of devices complete after 1127.751 msecs
      i2c_designware 808622C1:06: timeout waiting for bus ready
      ACPI Exception: AE_ERROR, Returned by Handler for [UserDefinedRegion]
      acpi 80860F14:02: Failed to change power state to D3hot
      PM: late suspend of devices failed
    
    2) Set IRQF_NO_SUSPEND irq flag. This fixes resume_early handlers which
       handlers which use ACPI PMIC opregions causing errors like these:
    
      PM: resume from suspend-to-idle
      i2c_designware 808622C1:06: controller timed out
      ACPI Exception: AE_ERROR, Returned by Handler for [UserDefinedRegion]
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Acked-by: default avatarJarkko Nikula <jarkko.nikula@linux.intel.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    41c80b8a
i2c-designware-core.c 26.7 KB