Loading drivers/usb/dwc3/dwc3-msm.c +37 −14 Original line number Diff line number Diff line Loading @@ -191,6 +191,7 @@ struct dwc3_msm { bool ext_chg_active; struct completion ext_chg_wait; unsigned int scm_dev_id; bool reset_hsphy_sleep_clk; bool suspend_resume_no_support; bool disable_power_collapse; }; Loading Loading @@ -1366,6 +1367,28 @@ static void dwc3_start_chg_det(struct dwc3_charger *charger, bool start) queue_delayed_work(system_nrt_wq, &mdwc->chg_work, 0); } static int dwc3_hsphy_reset(struct dwc3_msm *mdwc) { int ret; /* Reset hsusb phy */ ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_ASSERT); if (ret) { dev_err(mdwc->dev, "hsphy_sleep_clk assert failed\n"); goto reset_hsphy_exit; } usleep_range(1000, 1200); ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_DEASSERT); if (ret) { dev_err(mdwc->dev, "hsphy_sleep_clk reset deassert failed\n"); goto reset_hsphy_exit; } reset_hsphy_exit: return ret; } static int dwc3_msm_suspend(struct dwc3_msm *mdwc) { int ret, i; Loading Loading @@ -1567,6 +1590,14 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc) dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0), dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) & 0x7FFFFFFF); /* Reset HSPHY */ if (mdwc->reset_hsphy_sleep_clk) { ret = dwc3_hsphy_reset(mdwc); if (ret) { dev_err(mdwc->dev, "hsphy reset failed\n"); return ret; } } ret = dwc3_msm_restore_sec_config(mdwc->scm_dev_id); if (ret) Loading Loading @@ -2713,21 +2744,13 @@ static int dwc3_msm_probe(struct platform_device *pdev) enable_irq_wake(mdwc->pmic_id_irq); } if (of_property_read_bool(node, "qcom,reset_hsphy_sleep_clk_on_init")) { ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_ASSERT); mdwc->reset_hsphy_sleep_clk = of_property_read_bool(node, "qcom,reset_hsphy_sleep_clk_on_init"); if (mdwc->reset_hsphy_sleep_clk) { ret = dwc3_hsphy_reset(mdwc); if (ret) { dev_err(&pdev->dev, "hsphy_sleep_clk assert failed\n"); return ret; } usleep_range(1000, 1200); ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_DEASSERT); if (ret) { dev_err(&pdev->dev, "hsphy_sleep_clk reset deassert failed\n"); return ret; dev_err(&pdev->dev, "hsphy_sleep_clk reset failed\n"); goto put_dwc3; } } Loading drivers/usb/phy/phy-msm-hsusb.c +1 −1 Original line number Diff line number Diff line Loading @@ -438,7 +438,7 @@ static int msm_hsphy_set_suspend(struct usb_phy *uphy, int suspend) /* Bring PHY out of suspend */ msm_usb_write_readback(phy->base, HS_PHY_CTRL_REG, (USB2_SUSPEND_N_SEL | USB2_SUSPEND_N), 0); USB2_SUSPEND_N_SEL, 0); if (phy->core_ver >= MSM_CORE_VER_120) msm_usb_write_readback(phy->base, Loading Loading
drivers/usb/dwc3/dwc3-msm.c +37 −14 Original line number Diff line number Diff line Loading @@ -191,6 +191,7 @@ struct dwc3_msm { bool ext_chg_active; struct completion ext_chg_wait; unsigned int scm_dev_id; bool reset_hsphy_sleep_clk; bool suspend_resume_no_support; bool disable_power_collapse; }; Loading Loading @@ -1366,6 +1367,28 @@ static void dwc3_start_chg_det(struct dwc3_charger *charger, bool start) queue_delayed_work(system_nrt_wq, &mdwc->chg_work, 0); } static int dwc3_hsphy_reset(struct dwc3_msm *mdwc) { int ret; /* Reset hsusb phy */ ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_ASSERT); if (ret) { dev_err(mdwc->dev, "hsphy_sleep_clk assert failed\n"); goto reset_hsphy_exit; } usleep_range(1000, 1200); ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_DEASSERT); if (ret) { dev_err(mdwc->dev, "hsphy_sleep_clk reset deassert failed\n"); goto reset_hsphy_exit; } reset_hsphy_exit: return ret; } static int dwc3_msm_suspend(struct dwc3_msm *mdwc) { int ret, i; Loading Loading @@ -1567,6 +1590,14 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc) dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0), dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) & 0x7FFFFFFF); /* Reset HSPHY */ if (mdwc->reset_hsphy_sleep_clk) { ret = dwc3_hsphy_reset(mdwc); if (ret) { dev_err(mdwc->dev, "hsphy reset failed\n"); return ret; } } ret = dwc3_msm_restore_sec_config(mdwc->scm_dev_id); if (ret) Loading Loading @@ -2713,21 +2744,13 @@ static int dwc3_msm_probe(struct platform_device *pdev) enable_irq_wake(mdwc->pmic_id_irq); } if (of_property_read_bool(node, "qcom,reset_hsphy_sleep_clk_on_init")) { ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_ASSERT); mdwc->reset_hsphy_sleep_clk = of_property_read_bool(node, "qcom,reset_hsphy_sleep_clk_on_init"); if (mdwc->reset_hsphy_sleep_clk) { ret = dwc3_hsphy_reset(mdwc); if (ret) { dev_err(&pdev->dev, "hsphy_sleep_clk assert failed\n"); return ret; } usleep_range(1000, 1200); ret = clk_reset(mdwc->hsphy_sleep_clk, CLK_RESET_DEASSERT); if (ret) { dev_err(&pdev->dev, "hsphy_sleep_clk reset deassert failed\n"); return ret; dev_err(&pdev->dev, "hsphy_sleep_clk reset failed\n"); goto put_dwc3; } } Loading
drivers/usb/phy/phy-msm-hsusb.c +1 −1 Original line number Diff line number Diff line Loading @@ -438,7 +438,7 @@ static int msm_hsphy_set_suspend(struct usb_phy *uphy, int suspend) /* Bring PHY out of suspend */ msm_usb_write_readback(phy->base, HS_PHY_CTRL_REG, (USB2_SUSPEND_N_SEL | USB2_SUSPEND_N), 0); USB2_SUSPEND_N_SEL, 0); if (phy->core_ver >= MSM_CORE_VER_120) msm_usb_write_readback(phy->base, Loading