• Daniel Glöckner's avatar
    usb: musb: fix remote wakeup racing with suspend · ebc3dd68
    Daniel Glöckner authored
    It has been observed that writing 0xF2 to the power register while it
    reads as 0xF4 results in the register having the value 0xF0, i.e. clearing
    RESUME and setting SUSPENDM in one go does not work. It might also violate
    the USB spec to transition directly from resume to suspend, especially
    when not taking T_DRSMDN into account. But this is what happens when a
    remote wakeup occurs between SetPortFeature USB_PORT_FEAT_SUSPEND on the
    root hub and musb_bus_suspend being called.
    
    This commit returns -EBUSY when musb_bus_suspend is called while remote
    wakeup is signalled and thus avoids to reset the RESUME bit. Ignoring
    this error when musb_port_suspend is called from musb_hub_control is ok.
    Signed-off-by: default avatarDaniel Glöckner <dg@emlix.com>
    Signed-off-by: default avatarBin Liu <b-liu@ti.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ebc3dd68
musb_virthub.c 10.9 KB