diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c index 5f5fa5293752..2993583aa9dc 100644 --- a/drivers/usb/dwc3/dwc3-msm.c +++ b/drivers/usb/dwc3/dwc3-msm.c @@ -399,6 +399,7 @@ struct dwc3_msm { struct list_head req_complete_list; struct clk *xo_clk; struct clk *core_clk; + struct clk *core_csr_clk; long core_clk_rate; long core_clk_rate_hs; struct clk *iface_clk; @@ -2178,7 +2179,15 @@ static int dwc3_msm_config_gdsc(struct dwc3_msm *mdwc, int on) dev_err(mdwc->dev, "unable to enable usb3 gdsc\n"); return ret; } + + ret = clk_prepare_enable(mdwc->core_csr_clk); + if (ret) { + regulator_disable(mdwc->dwc3_gdsc); + dev_err(mdwc->dev, "unable to enable core_csr_clks\n"); + return ret; + } } else { + clk_disable_unprepare(mdwc->core_csr_clk); ret = regulator_disable(mdwc->dwc3_gdsc); if (ret) { dev_err(mdwc->dev, "unable to disable usb3 gdsc\n"); @@ -3438,6 +3447,10 @@ static int dwc3_msm_get_clk_gdsc(struct dwc3_msm *mdwc) return ret; } + mdwc->core_csr_clk = devm_clk_get(mdwc->dev, "core_csr_clk"); + if (IS_ERR(mdwc->core_csr_clk)) + mdwc->core_csr_clk = NULL; + mdwc->core_reset = devm_reset_control_get(mdwc->dev, "core_reset"); if (IS_ERR(mdwc->core_reset)) { dev_err(mdwc->dev, "failed to get core_reset\n");