]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00236169 MX6 USB :kfree udc_controller when remove udc driver
authormake shi <b15407@freescale.com>
Mon, 10 Dec 2012 08:40:05 +0000 (16:40 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:35:47 +0000 (08:35 +0200)
Kree and reset udc_controller should be done when remove udc driver to avoid
kernel dump during modprobe gadget driver after modprobe and rmmod udc driver.

Signed-off-by: make shi <b15407@freescale.com>
drivers/usb/gadget/arcotg_udc.c

index 89bd9a3b7decfbb460b4ef604e2524a39bf1f1e3..04824da1c07f476cd02f5bc90268e0b88bd3d2a6 100755 (executable)
@@ -2911,6 +2911,7 @@ static void fsl_udc_release(struct device *dev)
        dma_free_coherent(dev, udc_controller->ep_qh_size,
                        udc_controller->ep_qh, udc_controller->ep_qh_dma);
        kfree(udc_controller);
+       udc_controller = NULL;
 }
 
 /******************************************************************
@@ -3255,8 +3256,7 @@ static int  fsl_udc_remove(struct platform_device *pdev)
                return -ENODEV;
        udc_controller->done = &done;
        /* open USB PHY clock */
-       if (udc_controller->stopped)
-               dr_clk_gate(true);
+       dr_clk_gate(true);
 
        /* disable wake up and otgsc interrupt for safely remove udc driver*/
        temp = fsl_readl(&dr_regs->otgsc);
@@ -3296,7 +3296,7 @@ static int  fsl_udc_remove(struct platform_device *pdev)
        release_mem_region(res->start, resource_size(res));
 }
 #endif
-
+       dr_clk_gate(false);
        device_unregister(&udc_controller->gadget.dev);
        /* free udc --wait for the release() finished */
        wait_for_completion(&done);
@@ -3307,9 +3307,6 @@ static int  fsl_udc_remove(struct platform_device *pdev)
        if (pdata->exit)
                pdata->exit(pdata->pdev);
 
-       if (udc_controller->stopped)
-               dr_clk_gate(false);
-
        return 0;
 }