OSDN Git Service

usb: dwc2: Move exit hibernation to dwc2_port_resume() function
authorArtur Petrosyan <Arthur.Petrosyan@synopsys.com>
Fri, 16 Apr 2021 12:47:54 +0000 (16:47 +0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Apr 2021 09:55:34 +0000 (11:55 +0200)
This move is done to call hibernation exit handler in
"dwc2_port_resume()" function when core receives port resume.
Otherwise it could be confusing to exit hibernation in
"dwc2_hcd_hub_control()" function but other power saving modes
in "dwc2_port_resume()" function.

Acked-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Signed-off-by: Artur Petrosyan <Arthur.Petrosyan@synopsys.com>
Link: https://lore.kernel.org/r/20210416124755.E47F3A005D@mailhost.synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc2/hcd.c

index 43a2298..cc9ad6c 100644 (file)
@@ -3383,6 +3383,11 @@ int dwc2_port_resume(struct dwc2_hsotg *hsotg)
                                "exit partial_power_down failed.\n");
                break;
        case DWC2_POWER_DOWN_PARAM_HIBERNATION:
+               /* Exit host hibernation. */
+               ret = dwc2_exit_hibernation(hsotg, 0, 0, 1);
+               if (ret)
+                       dev_err(hsotg->dev, "exit hibernation failed.\n");
+               break;
        case DWC2_POWER_DOWN_PARAM_NONE:
                /*
                 * If not hibernation nor partial power down are supported,
@@ -3446,12 +3451,8 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
                        dev_dbg(hsotg->dev,
                                "ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
 
-                       if (hsotg->bus_suspended) {
-                               if (hsotg->hibernated)
-                                       dwc2_exit_hibernation(hsotg, 0, 0, 1);
-                               else
-                                       dwc2_port_resume(hsotg);
-                       }
+                       if (hsotg->bus_suspended)
+                               retval = dwc2_port_resume(hsotg);
                        break;
 
                case USB_PORT_FEAT_POWER: