• Jarkko Nikula's avatar
    usb: musb: gadget: Fix out-of-sync runtime pm calls · cdefce16
    Jarkko Nikula authored
    If cable is not connected to peripheral only board when initializing the
    gadget driver, then runtime pm calls are out-of-sync and the musb cannot
    idle with omap2430.c. This was noted on Nokia N900 where musb prevented the
    CPU to be able to enter deeper retention idle state.
    
    This was working in 2.6.38 before runtime pm conversions but there musb
    smart standby/idle modes were configured statically where they are now
    updated runtime depending on use and cable status.
    
    Reason for out-of-sync is that runtime pm is activated in function
    musb_gadget.c: usb_gadget_probe_driver but suspended only in OTG mode if
    cable is not connected when initializing. In peripheral only mode this leads
    to out-of-sync runtime pm since runtime pm remain active and is activated
    another time in omap2430.c: musb_otg_notifications for VBUS Connect event
    and thus cannot suspend for VBUS Disconnect event since the use count remains
    active.
    
    Fix this by moving cable status check and pm_runtime_put call in
    usb_gadget_probe_driver out of is_otg_enabled block.
    Signed-off-by: default avatarJarkko Nikula <jhnikula@gmail.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    cdefce16
musb_gadget.c 55.9 KB