Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+22 -13
+21 -13
drivers/mfd/omap-usb-host.c
··· 493 493 */ 494 494 pm_runtime_put_sync(dev); 495 495 496 - switch (omap->usbhs_rev) { 497 - case OMAP_USBHS_REV1: 498 - omap->nports = 3; 499 - break; 500 - case OMAP_USBHS_REV2: 501 - omap->nports = 2; 502 - break; 503 - default: 504 - omap->nports = OMAP3_HS_USB_PORTS; 505 - dev_dbg(dev, 506 - "USB HOST Rev : 0x%d not recognized, assuming %d ports\n", 507 - omap->usbhs_rev, omap->nports); 508 - break; 496 + /* 497 + * If platform data contains nports then use that 498 + * else make out number of ports from USBHS revision 499 + */ 500 + if (pdata->nports) { 501 + omap->nports = pdata->nports; 502 + } else { 503 + switch (omap->usbhs_rev) { 504 + case OMAP_USBHS_REV1: 505 + omap->nports = 3; 506 + break; 507 + case OMAP_USBHS_REV2: 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 519 for (i = 0; i < omap->nports; i++)
+1
include/linux/platform_data/usb-omap.h
··· 55 55 }; 56 56 57 57 struct usbhs_omap_platform_data { 58 + int nports; 58 59 enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; 59 60 int reset_gpio_port[OMAP3_HS_USB_PORTS]; 60 61 struct regulator *regulator[OMAP3_HS_USB_PORTS];