usb: musb: fix shutdown while usb gadget is in use
If we shutdown without stopping the gadget first or removing the cable, gadget manages to configure itself again: root@pandora /root# poweroff The system is going down NOW! Requesting system poweroff [ 47.714385] musb-hm halted. [ 48.120697] gadget: suspend [ 48.123748] gadget: reset config [ 48.127227] gadget: ecm deactivated [ 48.130981] usb0: gether_disconnect [ 48.281799] gadget: high-speed config #1: CDC Ethernet (ECM) [ 48.287872] gadget: init ecm [ 48.290985] gadget: notify connect false [ 48.295288] gadget: notify speed 425984000 This is not only unwanted, it's also happening on half-unitialized state, after musb_shutdown() has returned, which sometimes causes hardware to fail to work after reboot. Let's better properly stop gadget on shutdown too. This patch moves musb_gadget_cleanup out of musb_free(), which has 2 callsites: probe error path and musb_remove. On probe error path it was superflous since musb_gadget_cleanup is called explicitly there, and musb_remove() calls musb_shutdown(), so cleanup will get called as before. Signed-off-by: Grazvydas Ignotas <notasas@gmail.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
4b5203f188
commit
24307caef4
1 changed files with 3 additions and 2 deletions
|
@ -981,6 +981,9 @@ static void musb_shutdown(struct platform_device *pdev)
|
|||
unsigned long flags;
|
||||
|
||||
pm_runtime_get_sync(musb->controller);
|
||||
|
||||
musb_gadget_cleanup(musb);
|
||||
|
||||
spin_lock_irqsave(&musb->lock, flags);
|
||||
musb_platform_disable(musb);
|
||||
musb_generic_disable(musb);
|
||||
|
@ -1827,8 +1830,6 @@ static void musb_free(struct musb *musb)
|
|||
sysfs_remove_group(&musb->controller->kobj, &musb_attr_group);
|
||||
#endif
|
||||
|
||||
musb_gadget_cleanup(musb);
|
||||
|
||||
if (musb->nIrq >= 0) {
|
||||
if (musb->irq_wake)
|
||||
disable_irq_wake(musb->nIrq);
|
||||
|
|
Loading…
Reference in a new issue