aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb
diff options
context:
space:
mode:
authorAjay Kumar Gupta <ajay.gupta@ti.com>2009-08-03 02:13:40 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-09-23 09:46:33 -0400
commitc740d0d80d385b178c319f3d6e627ade8f732488 (patch)
tree081a38781b7348dcd15bf0581c543180df47e4c5 /drivers/usb/musb
parentdb8be50c4307dac2b37305fc59c8dc0f978d09ea (diff)
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>
Diffstat (limited to 'drivers/usb/musb')
-rw-r--r--drivers/usb/musb/musb_core.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 1d26beddf2ca..3a61ddb62bd2 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1850,6 +1850,10 @@ static void musb_free(struct musb *musb)
1850 dma_controller_destroy(c); 1850 dma_controller_destroy(c);
1851 } 1851 }
1852 1852
1853#ifdef CONFIG_USB_MUSB_OTG
1854 put_device(musb->xceiv->dev);
1855#endif
1856
1853 musb_writeb(musb->mregs, MUSB_DEVCTL, 0); 1857 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
1854 musb_platform_exit(musb); 1858 musb_platform_exit(musb);
1855 musb_writeb(musb->mregs, MUSB_DEVCTL, 0); 1859 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
@@ -1859,10 +1863,6 @@ static void musb_free(struct musb *musb)
1859 clk_put(musb->clock); 1863 clk_put(musb->clock);
1860 } 1864 }
1861 1865
1862#ifdef CONFIG_USB_MUSB_OTG
1863 put_device(musb->xceiv->dev);
1864#endif
1865
1866#ifdef CONFIG_USB_MUSB_HDRC_HCD 1866#ifdef CONFIG_USB_MUSB_HDRC_HCD
1867 usb_put_hcd(musb_to_hcd(musb)); 1867 usb_put_hcd(musb_to_hcd(musb));
1868#else 1868#else