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

Commit 3009721e authored by Hemant Kumar's avatar Hemant Kumar
Browse files

usb: phy: snps: Pass param override reg values from device tree



Pass value, register offset pair from device tree for phy param
override registers X0, X1, X2 and X3. Values need to be programmed
during phy init sequence.

Change-Id: I611810b9fe9a1586ae1db0ca451a4491aa832f56
Signed-off-by: default avatarHemant Kumar <hemantk@codeaurora.org>
parent e3fae817
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@ Required properties:
 - reset-names: reset signal name strings sorted in the same order as the resets
   property.

Optional properties:
 - qcom,param-override-seq: parameter override sequence with value, reg offset pair.

Example:
	hsphy@f9200000 {
		compatible = "qcom,usb-hsphy-snps-femto";
@@ -32,6 +35,7 @@ Example:
		vdda18-supply = <&pm8941_l6>;
		vdda33-supply = <&pm8941_l24>;
		qcom,vdd-voltage-level = <0 872000 872000>;
		qcom,param-override-seq = <0x43 0x70>;
	};

SSUSB-QMP PHY
+36 −0
Original line number Diff line number Diff line
@@ -96,6 +96,9 @@ struct msm_hsphy {
	bool			suspended;
	bool			cable_connected;

	int			*param_override_seq;
	int			param_override_seq_cnt;

	/* emulation targets specific */
	void __iomem		*emu_phy_base;
	int			*emu_init_seq;
@@ -381,6 +384,11 @@ static int msm_hsphy_init(struct usb_phy *uphy)
	msm_usb_write_readback(phy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL1,
				VBUSVLDEXT0, VBUSVLDEXT0);

	/* set parameter ovrride  if needed */
	if (phy->param_override_seq)
		hsusb_phy_write_seq(phy->base, phy->param_override_seq,
				phy->param_override_seq_cnt, 0);

	msm_usb_write_readback(phy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL_COMMON2,
				VREGBYPASS, VREGBYPASS);

@@ -576,6 +584,34 @@ static int msm_hsphy_probe(struct platform_device *pdev)
		}
	}

	phy->param_override_seq_cnt = of_property_count_elems_of_size(
					dev->of_node,
					"qcom,param-override-seq",
					sizeof(*phy->param_override_seq));
	if (phy->param_override_seq_cnt > 0) {
		phy->param_override_seq = devm_kcalloc(dev,
					phy->param_override_seq_cnt,
					sizeof(*phy->param_override_seq),
					GFP_KERNEL);
		if (!phy->param_override_seq)
			return -ENOMEM;

		if (phy->param_override_seq_cnt % 2) {
			dev_err(dev, "invalid param_override_seq_len\n");
			return -EINVAL;
		}

		ret = of_property_read_u32_array(dev->of_node,
				"qcom,param-override-seq",
				phy->param_override_seq,
				phy->param_override_seq_cnt);
		if (ret) {
			dev_err(dev, "qcom,param-override-seq read failed %d\n",
				ret);
			return ret;
		}
	}

	ret = of_property_read_u32_array(dev->of_node, "qcom,vdd-voltage-level",
					 (u32 *) phy->vdd_levels,
					 ARRAY_SIZE(phy->vdd_levels));