/branches/18.06.1/target/linux/brcm63xx/patches-4.14/350-MIPS-BCM63XX-support-settings-num-usbh-ports.patch |
@@ -0,0 +1,108 @@ |
--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h |
+++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h |
@@ -40,6 +40,7 @@ struct board_info { |
|
/* USB config */ |
struct bcm63xx_usbd_platform_data usbd; |
+ unsigned int num_usbh_ports:2; |
|
/* GPIO LEDs */ |
struct gpio_led leds[5]; |
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h |
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h |
@@ -1,6 +1,6 @@ |
#ifndef BCM63XX_DEV_USB_EHCI_H_ |
#define BCM63XX_DEV_USB_EHCI_H_ |
|
-int bcm63xx_ehci_register(void); |
+int bcm63xx_ehci_register(unsigned int num_ports); |
|
#endif /* BCM63XX_DEV_USB_EHCI_H_ */ |
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h |
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h |
@@ -1,6 +1,6 @@ |
#ifndef BCM63XX_DEV_USB_OHCI_H_ |
#define BCM63XX_DEV_USB_OHCI_H_ |
|
-int bcm63xx_ohci_register(void); |
+int bcm63xx_ohci_register(unsigned int num_ports); |
|
#endif /* BCM63XX_DEV_USB_OHCI_H_ */ |
--- a/arch/mips/bcm63xx/boards/board_common.c |
+++ b/arch/mips/bcm63xx/boards/board_common.c |
@@ -165,6 +165,8 @@ static struct platform_device bcm63xx_gp |
*/ |
int __init board_register_devices(void) |
{ |
+ int usbh_ports = 0; |
+ |
if (board.has_uart0) |
bcm63xx_uart_register(0); |
|
@@ -186,14 +188,21 @@ int __init board_register_devices(void) |
!board_get_mac_address(board.enetsw.mac_addr)) |
bcm63xx_enetsw_register(&board.enetsw); |
|
+ if ((board.has_ohci0 || board.has_ehci0)) { |
+ usbh_ports = board.num_usbh_ports; |
+ |
+ if (!usbh_ports || WARN_ON(usbh_ports > 1 && board.has_usbd)) |
+ usbh_ports = 1; |
+ } |
+ |
if (board.has_usbd) |
bcm63xx_usbd_register(&board.usbd); |
|
if (board.has_ehci0) |
- bcm63xx_ehci_register(); |
+ bcm63xx_ehci_register(usbh_ports); |
|
if (board.has_ohci0) |
- bcm63xx_ohci_register(); |
+ bcm63xx_ohci_register(usbh_ports); |
|
/* Generate MAC address for WLAN and register our SPROM, |
* do this after registering enet devices |
--- a/arch/mips/bcm63xx/dev-usb-ehci.c |
+++ b/arch/mips/bcm63xx/dev-usb-ehci.c |
@@ -79,12 +79,14 @@ static struct platform_device bcm63xx_eh |
}, |
}; |
|
-int __init bcm63xx_ehci_register(void) |
+int __init bcm63xx_ehci_register(unsigned int num_ports) |
{ |
if (!BCMCPU_IS_6318() && !BCMCPU_IS_6328() && !BCMCPU_IS_6358() && |
!BCMCPU_IS_6362() && !BCMCPU_IS_6368() && !BCMCPU_IS_63268()) |
return 0; |
|
+ bcm63xx_ehci_pdata.num_ports = num_ports; |
+ |
ehci_resources[0].start = bcm63xx_regset_address(RSET_EHCI0); |
ehci_resources[0].end = ehci_resources[0].start; |
ehci_resources[0].end += RSET_EHCI_SIZE - 1; |
--- a/arch/mips/bcm63xx/dev-usb-ohci.c |
+++ b/arch/mips/bcm63xx/dev-usb-ohci.c |
@@ -62,7 +62,6 @@ static struct usb_ohci_pdata bcm63xx_ohc |
.big_endian_desc = 1, |
.big_endian_mmio = 1, |
.no_big_frame_no = 1, |
- .num_ports = 1, |
.power_on = bcm63xx_ohci_power_on, |
.power_off = bcm63xx_ohci_power_off, |
.power_suspend = bcm63xx_ohci_power_off, |
@@ -80,11 +79,13 @@ static struct platform_device bcm63xx_oh |
}, |
}; |
|
-int __init bcm63xx_ohci_register(void) |
+int __init bcm63xx_ohci_register(unsigned int num_ports) |
{ |
if (BCMCPU_IS_6345() || BCMCPU_IS_6338()) |
return -ENODEV; |
|
+ bcm63xx_ohci_pdata.num_ports = num_ports; |
+ |
ohci_resources[0].start = bcm63xx_regset_address(RSET_OHCI0); |
ohci_resources[0].end = ohci_resources[0].start; |
ohci_resources[0].end += RSET_OHCI_SIZE - 1; |