usb: dwc3: rockchip: set dwc3 enter runtime suspend immediately
authorMeng Dongyang <daniel.meng@rock-chips.com>
Tue, 11 Oct 2016 09:40:19 +0000 (17:40 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Thu, 13 Oct 2016 08:09:40 +0000 (16:09 +0800)
In current code, the dwc3 controller is active when system start
and change to suspend when auto suspend, while the dwc3 controller
will receive connected notify before auto suspend and fail to change
the state of dwc3 controller from active state to resume if dwc3
controller is connected when system start. So we can change async
suspend to sysc suspend to make sure that the dwc3 controller could
finish suspend process before receive connect notify and fix "set
address fail" error when system start.

Change-Id: Ida8760004da06275d667e33b887b8dde87cd9520
Signed-off-by: Meng Dongyang <daniel.meng@rock-chips.com>
drivers/usb/dwc3/dwc3-rockchip.c

index 323d7ef402f6e734e65970c8d190c9ca0b033038..1d0c2279feeb780ed7fdcc4e545198ebd45386d2 100644 (file)
@@ -392,10 +392,6 @@ static int dwc3_rockchip_probe(struct platform_device *pdev)
                goto err2;
 
        if (rockchip->edev) {
-               pm_runtime_set_autosuspend_delay(&child_pdev->dev,
-                                                DWC3_ROCKCHIP_AUTOSUSPEND_DELAY);
-               pm_runtime_allow(&child_pdev->dev);
-
                if (rockchip->dwc->dr_mode == USB_DR_MODE_HOST ||
                    rockchip->dwc->dr_mode == USB_DR_MODE_OTG) {
                        struct usb_hcd *hcd =
@@ -411,6 +407,10 @@ static int dwc3_rockchip_probe(struct platform_device *pdev)
                        }
                }
 
+               pm_runtime_set_autosuspend_delay(&child_pdev->dev,
+                                                DWC3_ROCKCHIP_AUTOSUSPEND_DELAY);
+               pm_runtime_allow(&child_pdev->dev);
+               pm_runtime_suspend(&child_pdev->dev);
                pm_runtime_put_sync(dev);
 
                if ((extcon_get_cable_state_(rockchip->edev,