If core doesn't support hibernation or partial power
down power saving options, power can still be saved
using clock gating on all the clocks.

- Added entering clock gating state from USB_SUSPEND
  interrupt.

Signed-off-by: Artur Petrosyan <arthur.petros...@synopsys.com>
Acked-by: Minas Harutyunyan <minas.harutyun...@synopsys.com>
---
 drivers/usb/dwc2/core_intr.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
index 8c0152b514be..ab7fe303c0f9 100644
--- a/drivers/usb/dwc2/core_intr.c
+++ b/drivers/usb/dwc2/core_intr.c
@@ -529,14 +529,18 @@ static void dwc2_handle_usb_suspend_intr(struct 
dwc2_hsotg *hsotg)
                                /* Ask phy to be suspended */
                                if (!IS_ERR_OR_NULL(hsotg->uphy))
                                        usb_phy_set_suspend(hsotg->uphy, true);
-                       }
-
-                       if (hsotg->hw_params.hibernation) {
+                       } else if (hsotg->hw_params.hibernation) {
                                ret = dwc2_enter_hibernation(hsotg, 0);
                                if (ret && ret != -ENOTSUPP)
                                        dev_err(hsotg->dev,
                                                "%s: enter hibernation 
failed\n",
                                                __func__);
+                       } else {
+                               /*
+                                * If not hibernation nor partial power down 
are supported,
+                                * clock gating is used to save power.
+                                */
+                               dwc2_gadget_enter_clock_gating(hsotg);
                        }
 skip_power_saving:
                        /*
-- 
2.25.1

Reply via email to