diff options
Diffstat (limited to 'drivers/usb/host/ohci-at91.c')
| -rw-r--r-- | drivers/usb/host/ohci-at91.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index a665b3eaa74..0bf72f943b0 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -467,7 +467,8 @@ static irqreturn_t ohci_hcd_at91_overcurrent_irq(int irq, void *data)  	/* From the GPIO notifying the over-current situation, find  	 * out the corresponding port */  	at91_for_each_port(port) { -		if (gpio_to_irq(pdata->overcurrent_pin[port]) == irq) { +		if (gpio_is_valid(pdata->overcurrent_pin[port]) && +				gpio_to_irq(pdata->overcurrent_pin[port]) == irq) {  			gpio = pdata->overcurrent_pin[port];  			break;  		} @@ -570,6 +571,16 @@ static int __devinit ohci_hcd_at91_drv_probe(struct platform_device *pdev)  	if (pdata) {  		at91_for_each_port(i) { +			/* +			 * do not configure PIO if not in relation with +			 * real USB port on board +			 */ +			if (i >= pdata->ports) { +				pdata->vbus_pin[i] = -EINVAL; +				pdata->overcurrent_pin[i] = -EINVAL; +				break; +			} +  			if (!gpio_is_valid(pdata->vbus_pin[i]))  				continue;  			gpio = pdata->vbus_pin[i];  |