• Hans de Goede's avatar
    phy_sun4i_usb: set_mode: Allow using set_mode to force end the current session · 5d04c883
    Hans de Goede authored
    The sunxi musb has a bug where sometimes it will generate a babble
    error on device disconnect instead of a disconnect irq. When this
    happens the musb-controller switches from host mode to device mode
    (it clears MUSB_DEVCTL_SESSION and sets MUSB_DEVCTL_BDEVICE) and
    gets stuck in this state.
    
    Clearing this requires reporting Vbus low for 200 or more ms, but
    on some devices Vbus is simply always high (host-only mode, no Vbus
    control).
    
    This commit modifies sun4i_usb_phy_set_mode so that it will force
    end the current session when called with the current mode, before this
    commit calling set_mode with the current mode was a nop since id_det
    would stay the same resulting in the detect_work not doing anything.
    
    This allows the sunxi-musb glue to use sun4i_usb_phy_set_mode to force
    end the current session without changing the mode, to fixup the stuck
    state after a babble error.
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
    5d04c883
phy-sun4i-usb.c 22 KB