From c27cb3851bb6f822f8a92e4a1e10fba19284bdd4 Mon Sep 17 00:00:00 2001 From: make shi Date: Mon, 10 Dec 2012 16:40:05 +0800 Subject: ENGR00236169 MX6 USB :kfree udc_controller when remove udc driver 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 --- drivers/usb/gadget/arcotg_udc.c | 9 +++------ 1 file 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; } -- cgit v1.2.3