• Daniel Mack's avatar
    usb: musb: finish suspend/reset work independently from musb_hub_control() · 8ed1fb79
    Daniel Mack authored
    Currently, resume and reset is completed when the USB core calls back
    the root hub, asking for the port's state. This results in
    unpredictable timing of state assertion, which in turn renders some
    USB devices unusable after resume.
    
    Fix this by moving the logic to end the reset and suspend state out of
    musb_hub_control() into separate functions called from delayed workers.
    GetPortStatus only reports the current state now, without taking any
    real action.
    
    The rh_timeout variable is kept in order to define a minimum time gap
    between reset and resume only.
    
    FWIW, in my case, a Verbatim "STORE N GO" mass storage device won't
    resume cleanly without this patch.
    Signed-off-by: default avatarDaniel Mack <zonque@gmail.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    8ed1fb79
musb_core.h 15 KB