diff options
| author | make shi <b15407@freescale.com> | 2012-12-10 16:40:05 +0800 | 
|---|---|---|
| committer | Jason Liu <r64343@freescale.com> | 2012-12-17 11:58:19 +0800 | 
| commit | c27cb3851bb6f822f8a92e4a1e10fba19284bdd4 (patch) | |
| tree | 9bade761ee397389ae8042523701ee454e95d4dc | |
| parent | 4f40f4332e8423e9901b51b10ca30aa8429e483b (diff) | |
ENGR00236169 MX6 USB :kfree udc_controller when remove udc driverrel_imx_3.0.35_1.1.0
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>
| -rwxr-xr-x | drivers/usb/gadget/arcotg_udc.c | 9 | 
1 files changed, 3 insertions, 6 deletions
| diff --git a/drivers/usb/gadget/arcotg_udc.c b/drivers/usb/gadget/arcotg_udc.c index 89bd9a3b7dec..04824da1c07f 100755 --- a/drivers/usb/gadget/arcotg_udc.c +++ b/drivers/usb/gadget/arcotg_udc.c @@ -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;  } | 
