aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoger Quadros <rogerq@ti.com>2012-11-08 12:18:08 -0500
committerRoger Quadros <rogerq@ti.com>2013-02-13 06:22:49 -0500
commitccac71a7f063ad31eb99fac37e95b70ff57f1354 (patch)
tree22c7f8034f204cc793e14fec5635f509a6c6e311
parentd7eaf866104757d66ccb6627dccf7fb9d07aae7e (diff)
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.c34
-rw-r--r--include/linux/platform_data/usb-omap.h1
2 files changed, 22 insertions, 13 deletions
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 26319ca72e38..779588be8ab2 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)
493 */ 493 */
494 pm_runtime_put_sync(dev); 494 pm_runtime_put_sync(dev);
495 495
496 switch (omap->usbhs_rev) { 496 /*
497 case OMAP_USBHS_REV1: 497 * If platform data contains nports then use that
498 omap->nports = 3; 498 * else make out number of ports from USBHS revision
499 break; 499 */
500 case OMAP_USBHS_REV2: 500 if (pdata->nports) {
501 omap->nports = 2; 501 omap->nports = pdata->nports;
502 break; 502 } else {
503 default: 503 switch (omap->usbhs_rev) {
504 omap->nports = OMAP3_HS_USB_PORTS; 504 case OMAP_USBHS_REV1:
505 dev_dbg(dev, 505 omap->nports = 3;
506 "USB HOST Rev : 0x%d not recognized, assuming %d ports\n", 506 break;
507 omap->usbhs_rev, omap->nports); 507 case OMAP_USBHS_REV2:
508 break; 508 omap->nports = 2;
509 break;
510 default:
511 omap->nports = OMAP3_HS_USB_PORTS;
512 dev_dbg(dev,
513 "USB HOST Rev:0x%d not recognized, assuming %d ports\n",
514 omap->usbhs_rev, omap->nports);
515 break;
516 }
509 } 517 }
510 518
511 for (i = 0; i < omap->nports; i++) 519 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 e697c85ad3bc..fa579b4c666b 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 {
55}; 55};
56 56
57struct usbhs_omap_platform_data { 57struct usbhs_omap_platform_data {
58 int nports;
58 enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; 59 enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
59 int reset_gpio_port[OMAP3_HS_USB_PORTS]; 60 int reset_gpio_port[OMAP3_HS_USB_PORTS];
60 struct regulator *regulator[OMAP3_HS_USB_PORTS]; 61 struct regulator *regulator[OMAP3_HS_USB_PORTS];