• Stephen Boyd's avatar
    rtc: cros-ec: Fail suspend/resume if wake IRQ can't be configured · d6752e18
    Stephen Boyd authored
    If we encounter a failure during suspend where this RTC was programmed
    to wakeup the system from suspend, but that wakeup couldn't be
    configured because the system didn't support wakeup interrupts, we'll
    run into the following warning:
    
    	Unbalanced IRQ 166 wake disable
    	WARNING: CPU: 7 PID: 3071 at kernel/irq/manage.c:669 irq_set_irq_wake+0x108/0x278
    
    This happens because the suspend process isn't aborted when the RTC
    fails to configure the wakeup IRQ. Instead, we continue suspending the
    system and then another suspend callback fails the suspend process and
    "unwinds" the previously suspended drivers by calling their resume
    callbacks. When we get back to resuming this RTC driver, we'll call
    disable_irq_wake() on an IRQ that hasn't been configured for wake.
    
    Let's just fail suspend/resume here if we can't configure the system to
    wake and the user has chosen to wakeup with this device. This fixes this
    warning and makes the code more robust in case there are systems out
    there that can't wakeup from suspend on this line but the user has
    chosen to do so.
    
    Cc: Enric Balletbo i Serra <enric.balletbo@collabora.com>
    Cc: Evan Green <evgreen@chromium.org>
    Cc: Benson Leung <bleung@chromium.org>
    Cc: Guenter Roeck <groeck@chromium.org>
    Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
    Acked-By: default avatarBenson Leung <bleung@chromium.org>
    Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
    d6752e18
rtc-cros-ec.c 9.82 KB