Commit 9047428894660f8f46305917e519ab62f7395cac

Authored by Sebastian Andrzej Siewior
Committed by Felipe Balbi
1 parent 51ef74f640

usb: musb: only remove host/udc if it has been added

musb_shutdown() removes always USB host and device.
musb_init_controller() adds host and device depending on port_mode. If
port mode is set to HOST then the removal of UDC leads only to:
|(NULL device *): gadget not registered.
and nothing else happens. If port mode is set to DEVICE and we remove
the host then we oops in usb_remove_hcd().
This patch ensures that we only remove host in OTG/host mode and device
only in OTG/device mode to avoid any trouble.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>

Showing 2 changed files with 4 additions and 0 deletions Side-by-side Diff

drivers/usb/musb/musb_gadget.c
... ... @@ -1812,6 +1812,8 @@
1812 1812  
1813 1813 void musb_gadget_cleanup(struct musb *musb)
1814 1814 {
  1815 + if (musb->port_mode == MUSB_PORT_MODE_HOST)
  1816 + return;
1815 1817 usb_del_gadget_udc(&musb->g);
1816 1818 }
1817 1819  
drivers/usb/musb/musb_host.c
... ... @@ -2628,6 +2628,8 @@
2628 2628  
2629 2629 void musb_host_cleanup(struct musb *musb)
2630 2630 {
  2631 + if (musb->port_mode == MUSB_PORT_MODE_GADGET)
  2632 + return;
2631 2633 usb_remove_hcd(musb->hcd);
2632 2634 musb->hcd = NULL;
2633 2635 }