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

Commit 3e10a2ce authored by Heikki Krogerus's avatar Heikki Krogerus Committed by Felipe Balbi
Browse files

usb: dwc3: add hsphy_interface property



Platforms that have configured DWC_USB3_HSPHY_INTERFACE with
value 3, i.e. UTMI+ and ULPI, need to inform the driver of
the actual HSPHY interface type with the property. "utmi" if
the interface is UTMI+ or "ulpi" if the interface is ULPI.

Signed-off-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Acked-by: default avatarDavid Cohen <david.a.cohen@linux.intel.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 45bb7de2
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ Optional properties:
 - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal
			utmi_l1_suspend_n, false when asserts utmi_sleep_n
 - snps,hird-threshold: HIRD threshold
 - snps,hsphy_interface: High-Speed PHY interface selection between "utmi" for
   UTMI+ and "ulpi" for ULPI when the DWC_USB3_HSPHY_INTERFACE has value 3.

This is usually a subnode to DWC3 glue to which it is connected.

+20 −0
Original line number Diff line number Diff line
@@ -438,6 +438,22 @@ static void dwc3_phy_setup(struct dwc3 *dwc)

	reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));

	/* Select the HS PHY interface */
	switch (DWC3_GHWPARAMS3_HSPHY_IFC(dwc->hwparams.hwparams3)) {
	case DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI:
		if (!strncmp(dwc->hsphy_interface, "utmi", 4)) {
			reg &= ~DWC3_GUSB2PHYCFG_ULPI_UTMI;
		} else if (!strncmp(dwc->hsphy_interface, "ulpi", 4)) {
			reg |= DWC3_GUSB2PHYCFG_ULPI_UTMI;
		} else {
			dev_warn(dwc->dev, "HSPHY Interface not defined\n");
			break;
		}
		/* FALLTHROUGH */
	default:
		break;
	}

	/*
	 * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
	 * '0' during coreConsultant configuration. So default value will
@@ -844,6 +860,8 @@ static int dwc3_probe(struct platform_device *pdev)
				"snps,tx_de_emphasis_quirk");
		of_property_read_u8(node, "snps,tx_de_emphasis",
				&tx_de_emphasis);
		of_property_read_string(node, "snps,hsphy_interface",
					&dwc->hsphy_interface);
	} else if (pdata) {
		dwc->maximum_speed = pdata->maximum_speed;
		dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -871,6 +889,8 @@ static int dwc3_probe(struct platform_device *pdev)
		dwc->tx_de_emphasis_quirk = pdata->tx_de_emphasis_quirk;
		if (pdata->tx_de_emphasis)
			tx_de_emphasis = pdata->tx_de_emphasis;

		dwc->hsphy_interface = pdata->hsphy_interface;
	}

	/* default to superspeed if no maximum_speed passed */
+3 −0
Original line number Diff line number Diff line
@@ -682,6 +682,7 @@ struct dwc3_scratchpad_array {
 * @test_mode_nr: test feature selector
 * @lpm_nyet_threshold: LPM NYET response threshold
 * @hird_threshold: HIRD threshold
 * @hsphy_interface: "utmi" or "ulpi"
 * @delayed_status: true when gadget driver asks for delayed status
 * @ep0_bounced: true when we used bounce buffer
 * @ep0_expect_in: true when we expect a DATA IN transfer
@@ -809,6 +810,8 @@ struct dwc3 {
	u8			lpm_nyet_threshold;
	u8			hird_threshold;

	const char		*hsphy_interface;

	unsigned		delayed_status:1;
	unsigned		ep0_bounced:1;
	unsigned		ep0_expect_in:1;
+2 −0
Original line number Diff line number Diff line
@@ -45,4 +45,6 @@ struct dwc3_platform_data {

	unsigned tx_de_emphasis_quirk:1;
	unsigned tx_de_emphasis:2;

	const char *hsphy_interface;
};