• Tony Lindgren's avatar
    usb: musb: fix idling for suspend after disconnect interrupt · 5fbf7a25
    Tony Lindgren authored
    When disconnected as USB B-device, suspend interrupt should come before
    diconnect interrupt, because the DP/DM pins are shorter than the
    VBUS/GND pins on the USB connectors. But we sometimes get a suspend
    interrupt after disconnect interrupt. In that case we have devctl set to
    99 with VBUS still valid and musb_pm_runtime_check_session() wrongly
    thinks we have an active session. We have no other interrupts after
    disconnect coming in this case at least with the omap2430 glue.
    
    Let's fix the issue by checking the interrupt status again with
    delayed work for the devctl 99 case. In the suspend after disconnect
    case the devctl session bit has cleared by then and musb can idle.
    For a typical USB B-device connect case we just continue with normal
    interrupts.
    
    Fixes: 467d5c98 ("usb: musb: Implement session bit based runtime PM for musb-core")
    
    Cc: Merlijn Wajer <merlijn@wizzup.org>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Sebastian Reichel <sre@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarBin Liu <b-liu@ti.com>
    Link: https://lore.kernel.org/r/20200107152625.857-2-b-liu@ti.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5fbf7a25
musb_core.c 75 KB