Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c227c65 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: dwc3: Fix HSUSB enumeration issue"

parents 49e96122 38f19cd8
Loading
Loading
Loading
Loading
+37 −14
Original line number Diff line number Diff line
@@ -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;
};
@@ -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;
@@ -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)
@@ -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;
		}
	}

+1 −1
Original line number Diff line number Diff line
@@ -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,