]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
usb: gadget: xudc: fix panic in .shutdown()
authorJC Kuo <jckuo@nvidia.com>
Thu, 4 Sep 2014 02:46:40 +0000 (19:46 -0700)
committerAshutosh Jha <ajha@nvidia.com>
Mon, 15 Sep 2014 18:17:17 +0000 (11:17 -0700)
Fixes bekow in shutdown path
[   16.267942] Call trace:
[   16.267951] [<ffffffc0000d3598>] __wake_up_common+0x34/0xa4
[   16.267959] [<ffffffc0000d56ac>] complete_all+0x48/0x68
[   16.267966] [<ffffffc00046b124>] device_pm_remove+0x14/0x68
[   16.267974] [<ffffffc0004605e0>] device_del+0x38/0x178
[   16.267980] [<ffffffc000460730>] device_unregister+0x10/0x28
[   16.267990] [<ffffffc0005beb9c>] usb_del_gadget_udc+0xec/0x104
[   16.267998] [<ffffffc0005d0e10>] tegra_xudc_plat_shutdown+0x44/0x9c
[   16.268004] [<ffffffc000464dec>] platform_drv_shutdown+0x14/0x20
[   16.268010] [<ffffffc000461790>] device_shutdown+0x12c/0x194
[   16.268017] [<ffffffc0000bbb68>] kernel_restart_prepare+0x30/0x3c
[   16.268022] [<ffffffc0000bbb84>] kernel_restart+0x10/0x5c
[   16.268027] [<ffffffc0000bbd8c>] SyS_reboot+0x1a4/0x300
[   16.268034] Code: aa0403f5 aa0003f4 f8408e81 aa0103e0 (f85e8413)
[   16.268039] ---[ end trace 1b75b31a2719ed24 ]---

Change-Id: I49a8874560a7a7127f05c8472caa2df4ab47c0bc
Signed-off-by: JC Kuo <jckuo@nvidia.com>
Reviewed-on: http://git-master/r/497608
Reviewed-by: Ajay Gupta <ajayg@nvidia.com>
Tested-by: Ajay Gupta <ajayg@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Ashutosh Jha <ajha@nvidia.com>
drivers/usb/gadget/nvxxx_udc.c

index c8ef9786c57409dbbb1c30a03470b366e673bf1b..6087e680e8f7f3707da4001e4de335091a55974b 100644 (file)
@@ -4931,18 +4931,7 @@ static void tegra_xudc_plat_shutdown(struct platform_device *pdev)
 
        dev_info(dev, "%s nvudc %p\n", __func__, nvudc);
 
-       /* TODO implement synchronization */
-       if (nvudc) {
-               usb_del_gadget_udc(&nvudc->gadget);
-               free_data_struct(nvudc);
-               nvudc_plat_clocks_disable(nvudc);
-               tegra_powergate_partition(TEGRA_POWERGATE_XUSBB);
-               tegra_powergate_partition(TEGRA_POWERGATE_XUSBA);
-               nvudc_plat_clocks_deinit(nvudc);
-               nvudc_plat_regulator_deinit(nvudc);
-               devm_kfree(dev, nvudc);
-               platform_set_drvdata(pdev, NULL);
-       }
+       nvudc_gadget_pullup(&nvudc->gadget, 0);
 }
 
 static struct of_device_id tegra_xudc_of_match[] = {