USB: musb: fix put_device() call sequence
Invoke put_device(musb->xceiv->dev) before musb_platform_exit()as xceiv is getting unregistered in musb_platform_exit(). Fixes put_device() panic when module insert/removal is performed multiple times. Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
db8be50c43
commit
c740d0d80d
@@ -1850,6 +1850,10 @@ static void musb_free(struct musb *musb)
|
|||||||
dma_controller_destroy(c);
|
dma_controller_destroy(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_USB_MUSB_OTG
|
||||||
|
put_device(musb->xceiv->dev);
|
||||||
|
#endif
|
||||||
|
|
||||||
musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
|
musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
|
||||||
musb_platform_exit(musb);
|
musb_platform_exit(musb);
|
||||||
musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
|
musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
|
||||||
@@ -1859,10 +1863,6 @@ static void musb_free(struct musb *musb)
|
|||||||
clk_put(musb->clock);
|
clk_put(musb->clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_USB_MUSB_OTG
|
|
||||||
put_device(musb->xceiv->dev);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_MUSB_HDRC_HCD
|
#ifdef CONFIG_USB_MUSB_HDRC_HCD
|
||||||
usb_put_hcd(musb_to_hcd(musb));
|
usb_put_hcd(musb_to_hcd(musb));
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user