diff options
| author | Roger Quadros <rogerq@ti.com> | 2012-11-08 19:18:08 +0200 | 
|---|---|---|
| committer | Roger Quadros <rogerq@ti.com> | 2013-02-13 13:22:49 +0200 | 
| commit | ccac71a7f063ad31eb99fac37e95b70ff57f1354 (patch) | |
| tree | 22c7f8034f204cc793e14fec5635f509a6c6e311 | |
| parent | d7eaf866104757d66ccb6627dccf7fb9d07aae7e (diff) | |
| download | olio-linux-3.10-ccac71a7f063ad31eb99fac37e95b70ff57f1354.tar.xz olio-linux-3.10-ccac71a7f063ad31eb99fac37e95b70ff57f1354.zip  | |
mfd: omap-usb-host: override number of ports from platform data
Both OMAP4 and 5 exhibit the same revision ID in the REVISION register
but they have different number of ports i.e. 2 and 3 respectively.
So we can't rely on REVISION register for number of ports on OMAP5
and depend on platform data (or device tree) instead.
Signed-off-by: Roger Quadros <rogerq@ti.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
| -rw-r--r-- | drivers/mfd/omap-usb-host.c | 34 | ||||
| -rw-r--r-- | include/linux/platform_data/usb-omap.h | 1 | 
2 files changed, 22 insertions, 13 deletions
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c index 26319ca72e3..779588be8ab 100644 --- a/drivers/mfd/omap-usb-host.c +++ b/drivers/mfd/omap-usb-host.c @@ -493,19 +493,27 @@ static int usbhs_omap_probe(struct platform_device *pdev)  	 */  	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; +	/* +	 * If platform data contains nports then use that +	 * else make out number of ports from USBHS revision +	 */ +	if (pdata->nports) { +		omap->nports = pdata->nports; +	} else { +		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++) diff --git a/include/linux/platform_data/usb-omap.h b/include/linux/platform_data/usb-omap.h index e697c85ad3b..fa579b4c666 100644 --- a/include/linux/platform_data/usb-omap.h +++ b/include/linux/platform_data/usb-omap.h @@ -55,6 +55,7 @@ struct ohci_hcd_omap_platform_data {  };  struct usbhs_omap_platform_data { +	int				nports;  	enum usbhs_omap_port_mode	port_mode[OMAP3_HS_USB_PORTS];  	int				reset_gpio_port[OMAP3_HS_USB_PORTS];  	struct regulator		*regulator[OMAP3_HS_USB_PORTS];  |