diff options
author | Roger Quadros <rogerq@ti.com> | 2012-11-08 12:18:08 -0500 |
---|---|---|
committer | Roger Quadros <rogerq@ti.com> | 2013-02-13 06:22:49 -0500 |
commit | ccac71a7f063ad31eb99fac37e95b70ff57f1354 (patch) | |
tree | 22c7f8034f204cc793e14fec5635f509a6c6e311 | |
parent | d7eaf866104757d66ccb6627dccf7fb9d07aae7e (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.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 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 | ||
57 | struct usbhs_omap_platform_data { | 57 | struct 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]; |