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

Commit 5d0acd92 authored by Pratham Pratap's avatar Pratham Pratap
Browse files

usb: phy-msm-qusb-v2: Override PHY registers based on SoC Version



This change sets HSTX_TRIM[3] bit and overrides DEBUG_CTRL1
value to 0x09 based on SoC Version for SDM670 1.1 which is
needed to enable Host mode chirp fix.

Change-Id: Ib9cf883364ccf9766c2cc4b3301c4167f4de449b
Signed-off-by: default avatarPratham Pratap <prathampratap@codeaurora.org>
parent 901d889a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ Optional properties:
   state when attached in host mode and "suspend" state when detached.
 - qcom,tune2-efuse-correction: The value to be adjusted from fused value for
   improved rise/fall times.
 - qcom,host-chirp-erratum: Indicates host chirp fix is required.
 - nvmem-cells: specifies the handle to represent the SoC revision.
   usually it is defined by qfprom device node.
 - nvmem-cell-names: specifies the given nvmem cell name as defined in
+17 −5
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@
#define SQ_CTRL1_CHIRP_DISABLE		0x20
#define SQ_CTRL2_CHIRP_DISABLE		0x80

#define PORT_TUNE1_OVERRIDE_VAL		0xc5
#define DEBUG_CTRL1_OVERRIDE_VAL	0x09

/* PERIPH_SS_PHY_REFGEN_NORTH_BG_CTRL register bits */
@@ -151,6 +152,7 @@ struct qusb_phy {

	struct hrtimer		timer;
	int			soc_min_rev;
	bool			host_chirp_erratum;
};

#ifdef CONFIG_NVMEM
@@ -198,6 +200,9 @@ static long qfprom_read(struct device *dev, const char *name)
/* Reads the SoC version */
static int qusb_phy_get_socrev(struct device *dev, struct qusb_phy *qphy)
{
	if (!qphy->host_chirp_erratum)
		return 0;

	qphy->soc_min_rev  = qfprom_read(dev, "minor_rev");
	if (qphy->soc_min_rev < 0)
		dev_err(dev, "failed getting soc_min_rev, err : %d\n",
@@ -475,6 +480,15 @@ static void qusb_phy_host_init(struct usb_phy *phy)
	qusb_phy_write_seq(qphy->base, qphy->qusb_phy_host_init_seq,
			qphy->host_init_seq_len, 0);

	/* If soc revision is mentioned and host_chirp_erratum flag is set
	 * then override TUNE1 and DEBUG_CTRL1
	 */
	if (qphy->soc_min_rev && qphy->host_chirp_erratum) {
		writel_relaxed(PORT_TUNE1_OVERRIDE_VAL,
				qphy->base + qphy->phy_reg[PORT_TUNE1]);
		writel_relaxed(DEBUG_CTRL1_OVERRIDE_VAL,
				qphy->base + qphy->phy_reg[DEBUG_CTRL1]);
	}
	/* Ensure above write is completed before turning ON ref clk */
	wmb();

@@ -560,11 +574,6 @@ static int qusb_phy_init(struct usb_phy *phy)
			writel_relaxed(BIAS_CTRL_2_OVERRIDE_VAL,
				qphy->base + qphy->phy_reg[BIAS_CTRL_2]);

	/* if soc revision is mentioned override DEBUG_CTRL1 value */
	if (qphy->soc_min_rev)
		writel_relaxed(DEBUG_CTRL1_OVERRIDE_VAL,
				qphy->base + qphy->phy_reg[DEBUG_CTRL1]);

	/* ensure above writes are completed before re-enabling PHY */
	wmb();

@@ -1170,6 +1179,9 @@ static int qusb_phy_probe(struct platform_device *pdev)
			return -ENOMEM;
	}

	qphy->host_chirp_erratum = of_property_read_bool(dev->of_node,
					"qcom,host-chirp-erratum");

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