Thread (19 messages) 19 messages, 3 authors, 2012-04-02

[PATCH 06/12] USB: ohci-at91: change maximum number of ports

From: stern@rowland.harvard.edu (Alan Stern)
Date: 2012-03-29 15:04:46
Also in: lkml

On Thu, 29 Mar 2012, Nicolas Ferre wrote:
quoted hunk ↗ jump to hunk
Change number of ports to 3 for newer SoCs. Modify pdata structure
and ohci-at91 code that was dealing with ports information and check
of port indexes.

Signed-off-by: Nicolas Ferre <redacted>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <redacted>
---
 arch/arm/mach-at91/include/mach/board.h |   13 +++++++------
 drivers/usb/host/ohci-at91.c            |   22 +++++++++++++---------
 2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h
index 544a5d5..49a8211 100644
--- a/arch/arm/mach-at91/include/mach/board.h
+++ b/arch/arm/mach-at91/include/mach/board.h
@@ -86,14 +86,15 @@ extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *d
 extern void __init at91_add_device_eth(struct macb_platform_data *data);
 
  /* USB Host */
+#define AT91_MAX_USBH_PORTS	3
 struct at91_usbh_data {
-	u8		ports;		/* number of ports on root hub */
-	int		vbus_pin[2];	/* port power-control pin */
-	u8              vbus_pin_active_low[2];
+	int		vbus_pin[AT91_MAX_USBH_PORTS];	/* port power-control pin */
+	int             overcurrent_pin[AT91_MAX_USBH_PORTS];
+	u8		ports;				/* number of ports on root hub */
 	u8              overcurrent_supported;
-	int             overcurrent_pin[2];
-	u8              overcurrent_status[2];
-	u8              overcurrent_changed[2];
+	u8              vbus_pin_active_low[AT91_MAX_USBH_PORTS];
+	u8              overcurrent_status[AT91_MAX_USBH_PORTS];
+	u8              overcurrent_changed[AT91_MAX_USBH_PORTS];
 };
 extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
 extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 1262532..cf9707d 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -240,7 +240,7 @@ ohci_at91_start (struct usb_hcd *hcd)
 
 static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int enable)
 {
-	if (port < 0 || port >= 2)
+	if (port < 0 || port >= ARRAY_SIZE(pdata->vbus_pin))
Here and below, it will be a lot clearer to write AT91_MAX_USBH_PORTS 
instead of ARRAY_SIZE(padata->...).
quoted hunk ↗ jump to hunk
@@ -301,7 +301,11 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 	case SetPortFeature:
 		if (wValue == USB_PORT_FEAT_POWER) {
 			dev_dbg(hcd->self.controller, "SetPortFeat: POWER\n");
-			ohci_at91_usb_set_power(pdata, wIndex - 1, 1);
+			if (wIndex && wIndex <= ARRAY_SIZE(pdata->vbus_pin)) {
+				ohci_at91_usb_set_power(pdata, wIndex - 1, 1);
Here and throughout the hub_control routine, things will be a lot 
simpler if you decrement wIndex at the start of the SetPortFeature 
case.  Same for ClearPortFeature and maybe also GetPortStatus.

Alan Stern
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help