Skip to content
  • Hans de Goede's avatar
    sunxi: musb: Re-init musb controller on repeated probe calls · 7c22e26e
    Hans de Goede authored
    
    
    With sunxi-musb musb_lowlevel_init() can fail when a charger; or no cable
    is plugged into the otg port.
    
    To avoid leaking the struct musb allocated by musb_init_controller()
    on repeated musb_usb_probe() calls, we were caching its result.
    But musb_init_controller() does more, such as calling sunxi_musb_init()
    which enables the clocks.
    
    Not calling sunxi_musb_init() causes the musb controller to stop working
    after a "usb reset" since that calls musb_usb_remove() which disables the
    clocks.
    
    This commit fixes this by removing the caching of the struct returned
    from musb_init_controller(), it replaces this by free-ing the allocated
    memory in musb_usb_remove() and calling musb_usb_remove() on
    musb_usb_probe() errors to ensure proper cleanup.
    
    While at it also make musb_usb_probe() and musb_usb_remove() static.
    
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    7c22e26e