• Roger Quadros's avatar
    usb: dwc3: Prevent indefinite sleep in _dwc3_set_mode during suspend/resume · 498f0478
    Roger Quadros authored
    In the following test we get stuck by sleeping forever in _dwc3_set_mode()
    after which dual-role switching doesn't work.
    
    On dra7-evm's dual-role port,
    - Load g_zero gadget driver and enumerate to host
    - suspend to mem
    - disconnect USB cable to host and connect otg cable with Pen drive in it.
    - resume system
    - we sleep indefinitely in _dwc3_set_mode due to.
      dwc3_gadget_exit()->usb_del_gadget_udc()->udc_stop()->
    	dwc3_gadget_stop()->wait_event_lock_irq()
    
    To fix this instead of waiting indefinitely with wait_event_lock_irq()
    we use wait_event_interruptible_lock_irq_timeout() and print
    and error message if there was a timeout.
    Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
    Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
    498f0478
gadget.c 82.8 KB