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

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

Merge "USB: phy: qusb: Turn on vdd along with 1p8/3p3 LDOs when PMI requests"

parents 8fdcf95d 5eaa1d83
Loading
Loading
Loading
Loading
+29 −33
Original line number Diff line number Diff line
@@ -183,15 +183,14 @@ static int qusb_phy_config_vdd(struct qusb_phy *qphy, int high)
	return ret;
}

static int qusb_phy_enable_power(struct qusb_phy *qphy, bool on,
						bool toggle_vdd)
static int qusb_phy_enable_power(struct qusb_phy *qphy, bool on)
{
	int ret = 0;

	dev_dbg(qphy->phy.dev, "%s turn %s regulators. power_enabled:%d\n",
			__func__, on ? "on" : "off", qphy->power_enabled);

	if (toggle_vdd && qphy->power_enabled == on) {
	if (qphy->power_enabled == on) {
		dev_dbg(qphy->phy.dev, "PHYs' regulators are already ON.\n");
		return 0;
	}
@@ -199,7 +198,6 @@ static int qusb_phy_enable_power(struct qusb_phy *qphy, bool on,
	if (!on)
		goto disable_vdda33;

	if (toggle_vdd) {
	ret = qusb_phy_config_vdd(qphy, true);
	if (ret) {
		dev_err(qphy->phy.dev, "Unable to config VDD:%d\n",
@@ -212,7 +210,6 @@ static int qusb_phy_enable_power(struct qusb_phy *qphy, bool on,
		dev_err(qphy->phy.dev, "Unable to enable VDD\n");
		goto unconfig_vdd;
	}
	}

	ret = regulator_set_optimum_mode(qphy->vdda18, QUSB2PHY_1P8_HPM_LOAD);
	if (ret < 0) {
@@ -254,7 +251,6 @@ static int qusb_phy_enable_power(struct qusb_phy *qphy, bool on,
		goto unset_vdd33;
	}

	if (toggle_vdd)
	qphy->power_enabled = true;

	pr_debug("%s(): QUSB PHY's regulators are turned ON.\n", __func__);
@@ -293,7 +289,6 @@ put_vdda18_lpm:
		dev_err(qphy->phy.dev, "Unable to set LPM of vdda18\n");

disable_vdd:
	if (toggle_vdd) {
	ret = regulator_disable(qphy->vdd);
	if (ret)
		dev_err(qphy->phy.dev, "Unable to disable vdd:%d\n",
@@ -304,9 +299,7 @@ unconfig_vdd:
	if (ret)
		dev_err(qphy->phy.dev, "Unable unconfig VDD:%d\n",
								ret);
	}
err_vdd:
	if (toggle_vdd)
	qphy->power_enabled = false;
	dev_dbg(qphy->phy.dev, "QUSB PHY's regulators are turned OFF.\n");
	return ret;
@@ -328,7 +321,7 @@ static int qusb_phy_update_dpdm(struct usb_phy *phy, int value)
	case POWER_SUPPLY_DP_DM_DPF_DMF:
		dev_dbg(phy->dev, "POWER_SUPPLY_DP_DM_DPF_DMF\n");
		if (!qphy->rm_pulldown) {
			ret = qusb_phy_enable_power(qphy, true, false);
			ret = qusb_phy_enable_power(qphy, true);
			if (ret >= 0) {
				qphy->rm_pulldown = true;
				dev_dbg(phy->dev, "DP_DM_F: rm_pulldown:%d\n",
@@ -371,7 +364,10 @@ static int qusb_phy_update_dpdm(struct usb_phy *phy, int value)
				clk_disable_unprepare(qphy->cfg_ahb_clk);
			}

			ret = qusb_phy_enable_power(qphy, false, false);
			if (!qphy->cable_connected) {
				dev_dbg(phy->dev, "turn off for HVDCP case\n");
				ret = qusb_phy_enable_power(qphy, false);
			}
			if (ret >= 0) {
				qphy->rm_pulldown = false;
				dev_dbg(phy->dev, "DP_DM_R: rm_pulldown:%d\n",
@@ -574,7 +570,7 @@ static int qusb_phy_init(struct usb_phy *phy)

	dev_dbg(phy->dev, "%s\n", __func__);

	ret = qusb_phy_enable_power(qphy, true, true);
	ret = qusb_phy_enable_power(qphy, true);
	if (ret)
		return ret;

@@ -807,7 +803,7 @@ static int qusb_phy_set_suspend(struct usb_phy *phy, int suspend)
			wmb();

			qusb_phy_enable_clocks(qphy, false);
			qusb_phy_enable_power(qphy, false, true);
			qusb_phy_enable_power(qphy, false);
		}
		qphy->suspended = true;
	} else {
@@ -819,7 +815,7 @@ static int qusb_phy_set_suspend(struct usb_phy *phy, int suspend)
			writel_relaxed(0x00,
				qphy->base + QUSB2PHY_PORT_INTR_CTRL);
		} else {
			qusb_phy_enable_power(qphy, true, true);
			qusb_phy_enable_power(qphy, true);
			qusb_phy_enable_clocks(qphy, true);
		}
		qphy->suspended = false;
@@ -1156,7 +1152,7 @@ static int qusb_phy_remove(struct platform_device *pdev)
		qphy->clocks_enabled = false;
	}

	qusb_phy_enable_power(qphy, false, true);
	qusb_phy_enable_power(qphy, false);

	return 0;
}