usb: dwc3: exynos: PHY should be deleted later than dwc3 core
authorPeter Chen <peter.chen@freescale.com>
Fri, 24 May 2013 06:30:16 +0000 (14:30 +0800)
committerFelipe Balbi <balbi@ti.com>
Tue, 28 May 2013 19:17:08 +0000 (22:17 +0300)
If the glue layer is removed first (core layer later),
it deletes the phy device first, then the core device.
But at core's removal, it still uses PHY's resources, it may
cause kernel's oops. It is much like the problem
Paul Zimmerman reported at:
http://marc.info/?l=linux-usb&m=136547502011472&w=2.

Besides, it is reasonable the PHY is deleted at last as
the controller is the PHY's user.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/dwc3-exynos.c

index 929e7dd6e58bf6ea4e3d1d6ca7984303f0bbe00d..8ce9d7fd6cfc30051462373d3c8d1f2b681dfcb3 100644 (file)
@@ -164,9 +164,9 @@ static int dwc3_exynos_remove(struct platform_device *pdev)
 {
        struct dwc3_exynos      *exynos = platform_get_drvdata(pdev);
 
+       device_for_each_child(&pdev->dev, NULL, dwc3_exynos_remove_child);
        platform_device_unregister(exynos->usb2_phy);
        platform_device_unregister(exynos->usb3_phy);
-       device_for_each_child(&pdev->dev, NULL, dwc3_exynos_remove_child);
 
        clk_disable_unprepare(exynos->clk);