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

Commit 1e868545 authored by Jules Maselbas's avatar Jules Maselbas Committed by Felipe Balbi
Browse files

usb: dwc2: gadget: Move gadget phy init into core phy init



Most of the phy initialization is shared between host and gadget,
this adds the turnaround configuration only used by gadgets to
the global phy init.

Acked-by: default avatarMinas Harutyunyan <hminas@synopsys.com>
Signed-off-by: default avatarJules Maselbas <jmaselbas@kalray.eu>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 059d8d52
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1152,6 +1152,15 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
		usbcfg &= ~(GUSBCFG_ULPI_UTMI_SEL | GUSBCFG_PHYIF16);
		if (hsotg->params.phy_utmi_width == 16)
			usbcfg |= GUSBCFG_PHYIF16;

		/* Set turnaround time */
		if (dwc2_is_device_mode(hsotg)) {
			usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
			if (hsotg->params.phy_utmi_width == 16)
				usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
			else
				usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
		}
		break;
	default:
		dev_err(hsotg->dev, "FS PHY selected at HS!\n");
+5 −20
Original line number Diff line number Diff line
@@ -3314,30 +3314,15 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,

	/* keep other bits untouched (so e.g. forced modes are not lost) */
	usbcfg = dwc2_readl(hsotg, GUSBCFG);
	/* remove the HNP/SRP */
	usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
		GUSBCFG_HNPCAP);
	usbcfg &= ~GUSBCFG_TOUTCAL_MASK;
	usbcfg |= GUSBCFG_TOUTCAL(7);

	if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
	    (hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
	     hsotg->params.speed == DWC2_SPEED_PARAM_LOW)) {
		/* FS/LS Dedicated Transceiver Interface */
		usbcfg |= GUSBCFG_PHYSEL;
	} else if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_UTMI) {
		if (hsotg->params.phy_utmi_width == 16)
			usbcfg |= GUSBCFG_PHYIF16;

		/* Set turnaround time */
		usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
		if (hsotg->params.phy_utmi_width == 16)
			usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
		else
			usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
	}

	/* remove the HNP/SRP and set the PHY */
	usbcfg &= ~(GUSBCFG_SRPCAP | GUSBCFG_HNPCAP);
        dwc2_writel(hsotg, usbcfg, GUSBCFG);

	dwc2_phy_init(hsotg, true);

	dwc2_hsotg_init_fifo(hsotg);

	if (!is_usb_reset)