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

Commit d7eaf866 authored by Roger Quadros's avatar Roger Quadros
Browse files

mfd: omap-usb-host: know about number of ports from revision register



The revision register should tell us how many ports are present.

Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
Reviewed-by: default avatarFelipe Balbi <balbi@ti.com>
parent 27d4f2c6
Loading
Loading
Loading
Loading
+28 −5
Original line number Diff line number Diff line
@@ -91,6 +91,8 @@


struct usbhs_hcd_omap {
	int				nports;

	struct clk			*xclk60mhsp1_ck;
	struct clk			*xclk60mhsp2_ck;
	struct clk			*utmi_p1_fck;
@@ -347,8 +349,6 @@ static void omap_usbhs_init(struct device *dev)

	pm_runtime_get_sync(dev);
	spin_lock_irqsave(&omap->lock, flags);
	omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);
	dev_dbg(dev, "OMAP UHH_REVISION 0x%x\n", omap->usbhs_rev);

	reg = usbhs_read(omap->uhh_base, OMAP_UHH_HOSTCONFIG);
	/* setup ULPI bypass and burst configurations */
@@ -483,7 +483,32 @@ static int usbhs_omap_probe(struct platform_device *pdev)

	pm_runtime_enable(dev);

	for (i = 0; i < OMAP3_HS_USB_PORTS; i++)
	platform_set_drvdata(pdev, omap);
	pm_runtime_get_sync(dev);

	omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);

	/* we need to call runtime suspend before we update omap->nports
	 * to prevent unbalanced clk_disable()
	 */
	pm_runtime_put_sync(dev);

	switch (omap->usbhs_rev) {
	case OMAP_USBHS_REV1:
		omap->nports = 3;
		break;
	case OMAP_USBHS_REV2:
		omap->nports = 2;
		break;
	default:
		omap->nports = OMAP3_HS_USB_PORTS;
		dev_dbg(dev,
		  "USB HOST Rev : 0x%d not recognized, assuming %d ports\n",
		   omap->usbhs_rev, omap->nports);
		break;
	}

	for (i = 0; i < omap->nports; i++)
		if (is_ehci_phy_mode(i) || is_ehci_tll_mode(i) ||
			is_ehci_hsic_mode(i)) {
			omap->ehci_logic_fck = clk_get(dev, "ehci_logic_fck");
@@ -573,8 +598,6 @@ static int usbhs_omap_probe(struct platform_device *pdev)
				"failed error:%d\n", ret);
	}

	platform_set_drvdata(pdev, omap);

	omap_usbhs_init(dev);
	ret = omap_usbhs_alloc_children(pdev);
	if (ret) {