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

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

Merge "ARM: dts: msm: Add TCSR_PHY_LVL_SHIFT_KEEPER resource for msm8953"

parents 856ee9e1 e9bc4e2e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -163,6 +163,7 @@ Optional properties:
   "emu_phy_base" : phy base address used for programming emulation target phy.
   "ref_clk_addr" : ref_clk bcr address used for on/off ref_clk before reset.
   "tcsr_phy_clk_scheme_sel": address used to determine QUSB PHY clk source.
   "tcsr_phy_level_shift_keeper": address used to clamp QUSB PHY level shifter.
 - reg-names: Should be "qscratch_base". The qscratch register bank
   allows us to manipulate QUSB PHY bits eg. to enable D+ pull-up using s/w
   control in device mode. The reg-names property is required if the
+4 −2
Original line number Diff line number Diff line
@@ -2109,11 +2109,13 @@
		reg = <0x079000 0x180>,
			<0x070f8800 0x400>,
			<0x01841030 0x4>,
			<0x0193f044 0x4>;
			<0x0193f044 0x4>,
			<0x0193f020 0x4>;
		reg-names = "qusb_phy_base",
			"qscratch_base",
			"ref_clk_addr",
			"tcsr_phy_clk_scheme_sel";
			"tcsr_phy_clk_scheme_sel",
			"tcsr_phy_level_shift_keeper";

		USB3_GDSC-supply = <&gdsc_usb30>;
		vdd-supply = <&pm8953_l3>;
+30 −13
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ struct qusb_phy {
	void __iomem		*tune2_efuse_reg;
	void __iomem		*ref_clk_base;
	void __iomem		*tcsr_phy_clk_scheme_sel;
	void __iomem		*tcsr_phy_lvl_shift_keeper;

	struct clk		*ref_clk_src;
	struct clk		*ref_clk;
@@ -402,13 +403,18 @@ 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);
			if (ret >= 0) {
				qphy->rm_pulldown = true;
				dev_dbg(phy->dev, "DP_DM_F: rm_pulldown:%d\n",
						qphy->rm_pulldown);
			}

			if (qphy->put_into_high_z_state) {
				if (qphy->tcsr_phy_lvl_shift_keeper)
					writel_relaxed(0x1,
					       qphy->tcsr_phy_lvl_shift_keeper);

				/* Bring up DVDD */
				ret = qusb_phy_vdd(qphy, true);
				if (ret < 0)
					goto clk_error;
				qusb_phy_gdsc(qphy, true);
				qusb_phy_enable_clocks(qphy, true);

@@ -438,16 +444,7 @@ static int qusb_phy_update_dpdm(struct usb_phy *phy, int value)
					qphy->base + QUSB2PHY_PORT_POWERDOWN);
				/* Make sure that above write is completed */
				wmb();
			}

			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",
						qphy->rm_pulldown);
			}

			if (qphy->put_into_high_z_state) {
				qusb_phy_enable_clocks(qphy, false);
				qusb_phy_gdsc(qphy, false);
			}
@@ -489,6 +486,9 @@ static int qusb_phy_update_dpdm(struct usb_phy *phy, int value)
			}

			if (!qphy->cable_connected) {
				if (qphy->tcsr_phy_lvl_shift_keeper)
					writel_relaxed(0x0,
					       qphy->tcsr_phy_lvl_shift_keeper);
				dev_dbg(phy->dev, "turn off for HVDCP case\n");
				ret = qusb_phy_enable_power(qphy, false);
			}
@@ -1002,6 +1002,9 @@ static int qusb_phy_set_suspend(struct usb_phy *phy, int suspend)
			wmb();

			qusb_phy_enable_clocks(qphy, false);
			if (qphy->tcsr_phy_lvl_shift_keeper)
				writel_relaxed(0x0,
					qphy->tcsr_phy_lvl_shift_keeper);
			qusb_phy_enable_power(qphy, false);
			/*
			 * Set put_into_high_z_state to true so next USB
@@ -1023,6 +1026,9 @@ static int qusb_phy_set_suspend(struct usb_phy *phy, int suspend)
				qphy->base + QUSB2PHY_PORT_INTR_CTRL);
		} else {
			qusb_phy_enable_power(qphy, true);
			if (qphy->tcsr_phy_lvl_shift_keeper)
				writel_relaxed(0x1,
					qphy->tcsr_phy_lvl_shift_keeper);
			qusb_phy_enable_clocks(qphy, true);
		}
		qphy->suspended = false;
@@ -1177,6 +1183,17 @@ static int qusb_phy_probe(struct platform_device *pdev)
			dev_dbg(dev, "err reading tcsr_phy_clk_scheme_sel\n");
	}

	res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
			"tcsr_phy_level_shift_keeper");
	if (res) {
		qphy->tcsr_phy_lvl_shift_keeper = devm_ioremap_nocache(dev,
				res->start, resource_size(res));
		if (IS_ERR(qphy->tcsr_phy_lvl_shift_keeper)) {
			dev_err(dev, "err reading tcsr_phy_lvl_shift_keeper\n");
			qphy->tcsr_phy_lvl_shift_keeper = NULL;
		}
	}

	qphy->dpdm_pulsing_enabled = of_property_read_bool(dev->of_node,
					"qcom,enable-dpdm-pulsing");