linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/13] at91: 3.4-rc1 fixes
@ 2012-04-03  7:32 Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 01/13] ARM: at91/at91sam9x5: add clkdev entries for DMA controllers Nicolas Ferre
                   ` (13 more replies)
  0 siblings, 14 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Here is a bunch of fixes for AT91 that will go on top of 3.4-rc1.
Some modifications are related to certain drivers (USB ohci-at91 for instance)
but are touching the core AT91 devices/board files and Device Tree files.
The modification of "vbus_pin_active_low" in particular cannot be separated
from the modification of .dts[i] and devices/board files.

I will have to collect "Acked-by" from USB people on the ohci-at91
modifications (Greg?). I will try to find them just after having posted
this v2 today...

Ludovic Desroches (1):
  ARM: at91: dt: remove unit-address part for memory nodes

Nicolas Ferre (12):
  ARM: at91/at91sam9x5: add clkdev entries for DMA controllers
  USB: ohci-at91: fix vbus_pin_active_low handling
  ARM: at91/USB host: specify and handle properly vbus_pin_active_low
  ARM: at91/dts: USB host vbus is active low
  USB: ohci-at91: rework and fix initialization
  USB: ohci-at91: change maximum number of ports
  USB: ohci-at91: coding style modifications with one-line ifs
  USB: ohci-at91: trivial return code name change
  ARM: at91/at91sam9x5.dtsi: fix NAND ale/cle in DT file
  ARM: at91/NAND DT bindings: add comments
  USB: ehci-atmel: add needed of.h header file
  ARM: at91: fix check of valid GPIO for SPI and USB

 .../devicetree/bindings/mtd/atmel-nand.txt         |   10 +-
 arch/arm/boot/dts/at91sam9g20.dtsi                 |    2 +-
 arch/arm/boot/dts/at91sam9g25ek.dts                |    4 +-
 arch/arm/boot/dts/at91sam9g45.dtsi                 |    2 +-
 arch/arm/boot/dts/at91sam9m10g45ek.dts             |    6 +-
 arch/arm/boot/dts/at91sam9x5.dtsi                  |    6 +-
 arch/arm/boot/dts/at91sam9x5cm.dtsi                |    2 +-
 arch/arm/boot/dts/usb_a9g20.dts                    |    2 +-
 arch/arm/mach-at91/at91sam9260_devices.c           |    3 +
 arch/arm/mach-at91/at91sam9261_devices.c           |    3 +
 arch/arm/mach-at91/at91sam9263_devices.c           |    6 +-
 arch/arm/mach-at91/at91sam9g45_devices.c           |   11 +-
 arch/arm/mach-at91/at91sam9rl_devices.c            |    3 +
 arch/arm/mach-at91/at91sam9x5.c                    |    2 +
 arch/arm/mach-at91/board-sam9263ek.c               |    1 +
 arch/arm/mach-at91/board-sam9m10g45ek.c            |    1 +
 arch/arm/mach-at91/include/mach/board.h            |   13 +-
 drivers/usb/host/ehci-atmel.c                      |    1 +
 drivers/usb/host/ohci-at91.c                       |  159 +++++++++++---------
 19 files changed, 135 insertions(+), 102 deletions(-)

Thanks, best regards,
-- 
1.7.9.4


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 01/13] ARM: at91/at91sam9x5: add clkdev entries for DMA controllers
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 02/13] USB: ohci-at91: fix vbus_pin_active_low handling Nicolas Ferre
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/mach-at91/at91sam9x5.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c
index b6831ee..13c8cae 100644
--- a/arch/arm/mach-at91/at91sam9x5.c
+++ b/arch/arm/mach-at91/at91sam9x5.c
@@ -223,6 +223,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk),
 	CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk),
 	CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk),
+	CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk),
+	CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk),
 	CLKDEV_CON_ID("pioA", &pioAB_clk),
 	CLKDEV_CON_ID("pioB", &pioAB_clk),
 	CLKDEV_CON_ID("pioC", &pioCD_clk),
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 02/13] USB: ohci-at91: fix vbus_pin_active_low handling
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 01/13] ARM: at91/at91sam9x5: add clkdev entries for DMA controllers Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 03/13] ARM: at91/USB host: specify and handle properly vbus_pin_active_low Nicolas Ferre
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

The information is not properly taken into account
for {get|set}_power() functions.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: stable <stable@vger.kernel.org>		[3.2+]
---
 drivers/usb/host/ohci-at91.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index db8963f..4d266ae 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -247,7 +247,7 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int
 		return;
 
 	gpio_set_value(pdata->vbus_pin[port],
-		       !pdata->vbus_pin_active_low[port] ^ enable);
+		       pdata->vbus_pin_active_low[port] ^ enable);
 }
 
 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
@@ -259,7 +259,7 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
 		return -EINVAL;
 
 	return gpio_get_value(pdata->vbus_pin[port]) ^
-		!pdata->vbus_pin_active_low[port];
+		pdata->vbus_pin_active_low[port];
 }
 
 /*
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 03/13] ARM: at91/USB host: specify and handle properly vbus_pin_active_low
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 01/13] ARM: at91/at91sam9x5: add clkdev entries for DMA controllers Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 02/13] USB: ohci-at91: fix vbus_pin_active_low handling Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 04/13] ARM: at91/dts: USB host vbus is active low Nicolas Ferre
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Due to an error while handling vbus_pin_active_low in ohci-at91 driver,
the specification of this property was not good in devices/board files.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: stable <stable@vger.kernel.org>         [3.2+]
---
 arch/arm/mach-at91/at91sam9263_devices.c |    3 ++-
 arch/arm/mach-at91/at91sam9g45_devices.c |    6 ++++--
 arch/arm/mach-at91/board-sam9263ek.c     |    1 +
 arch/arm/mach-at91/board-sam9m10g45ek.c  |    1 +
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
index 53688c4..27cfce3 100644
--- a/arch/arm/mach-at91/at91sam9263_devices.c
+++ b/arch/arm/mach-at91/at91sam9263_devices.c
@@ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data)
 	/* Enable VBus control for UHP ports */
 	for (i = 0; i < data->ports; i++) {
 		if (gpio_is_valid(data->vbus_pin[i]))
-			at91_set_gpio_output(data->vbus_pin[i], 0);
+			at91_set_gpio_output(data->vbus_pin[i],
+					     data->vbus_pin_active_low[i]);
 	}
 
 	/* Enable overcurrent notification */
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index 698479f..ddf210a 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -127,7 +127,8 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
 	/* Enable VBus control for UHP ports */
 	for (i = 0; i < data->ports; i++) {
 		if (gpio_is_valid(data->vbus_pin[i]))
-			at91_set_gpio_output(data->vbus_pin[i], 0);
+			at91_set_gpio_output(data->vbus_pin[i],
+					     data->vbus_pin_active_low[i]);
 	}
 
 	/* Enable overcurrent notification */
@@ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
 	/* Enable VBus control for UHP ports */
 	for (i = 0; i < data->ports; i++) {
 		if (gpio_is_valid(data->vbus_pin[i]))
-			at91_set_gpio_output(data->vbus_pin[i], 0);
+			at91_set_gpio_output(data->vbus_pin[i],
+					     data->vbus_pin_active_low[i]);
 	}
 
 	usbh_ehci_data = *data;
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c
index 66f0ddf..2ffe50f 100644
--- a/arch/arm/mach-at91/board-sam9263ek.c
+++ b/arch/arm/mach-at91/board-sam9263ek.c
@@ -74,6 +74,7 @@ static void __init ek_init_early(void)
 static struct at91_usbh_data __initdata ek_usbh_data = {
 	.ports		= 2,
 	.vbus_pin	= { AT91_PIN_PA24, AT91_PIN_PA21 },
+	.vbus_pin_active_low = {1, 1},
 	.overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c
index e1bea73..c88e908 100644
--- a/arch/arm/mach-at91/board-sam9m10g45ek.c
+++ b/arch/arm/mach-at91/board-sam9m10g45ek.c
@@ -71,6 +71,7 @@ static void __init ek_init_early(void)
 static struct at91_usbh_data __initdata ek_usbh_hs_data = {
 	.ports		= 2,
 	.vbus_pin	= {AT91_PIN_PD1, AT91_PIN_PD3},
+	.vbus_pin_active_low = {1, 1},
 	.overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 04/13] ARM: at91/dts: USB host vbus is active low
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (2 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 03/13] ARM: at91/USB host: specify and handle properly vbus_pin_active_low Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 05/13] USB: ohci-at91: rework and fix initialization Nicolas Ferre
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof,
	Nicolas Ferre, stable

Change vbus gpio configuration in .dts files to switch to
active low configuration.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: stable <stable@vger.kernel.org>
---
 arch/arm/boot/dts/at91sam9g25ek.dts    |    4 ++--
 arch/arm/boot/dts/at91sam9m10g45ek.dts |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/boot/dts/at91sam9g25ek.dts b/arch/arm/boot/dts/at91sam9g25ek.dts
index ac0dc00..7829a4d 100644
--- a/arch/arm/boot/dts/at91sam9g25ek.dts
+++ b/arch/arm/boot/dts/at91sam9g25ek.dts
@@ -37,8 +37,8 @@
 		usb0: ohci@00600000 {
 			status = "okay";
 			num-ports = <2>;
-			atmel,vbus-gpio = <&pioD 19 0
-					   &pioD 20 0
+			atmel,vbus-gpio = <&pioD 19 1
+					   &pioD 20 1
 					  >;
 		};
 
diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts
index c4c8ae4..6abb571 100644
--- a/arch/arm/boot/dts/at91sam9m10g45ek.dts
+++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts
@@ -73,8 +73,8 @@
 		usb0: ohci@00700000 {
 			status = "okay";
 			num-ports = <2>;
-			atmel,vbus-gpio = <&pioD 1 0
-					   &pioD 3 0>;
+			atmel,vbus-gpio = <&pioD 1 1
+					   &pioD 3 1>;
 		};
 
 		usb1: ehci@00800000 {
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 05/13] USB: ohci-at91: rework and fix initialization
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (3 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 04/13] ARM: at91/dts: USB host vbus is active low Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports Nicolas Ferre
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

The DT information are filled in a pdata structure and then passed on
to the usual check code of the probe function. Thus we do not need to
redo the gpio checking and irq configuration in the DT-related code.
On the other hand, we setup GPIO direction in driver for vbus and
overcurrent. It will be useful when moving to pinctrl subsystem.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/usb/host/ohci-at91.c |   88 ++++++++++++++++++++++--------------------
 1 file changed, 46 insertions(+), 42 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 4d266ae..c30da6a 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -492,7 +492,7 @@ static u64 at91_ohci_dma_mask = DMA_BIT_MASK(32);
 static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
-	int i, ret, gpio;
+	int i, gpio;
 	enum of_gpio_flags flags;
 	struct at91_usbh_data	*pdata;
 	u32 ports;
@@ -520,42 +520,11 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 		if (!gpio_is_valid(gpio))
 			continue;
 		pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW;
-		ret = gpio_request(gpio, "ohci_vbus");
-		if (ret) {
-			dev_warn(&pdev->dev, "can't request vbus gpio %d", gpio);
-			continue;
-		}
-		ret = gpio_direction_output(gpio, !(flags & OF_GPIO_ACTIVE_LOW) ^ 1);
-		if (ret)
-			dev_warn(&pdev->dev, "can't put vbus gpio %d as output %d",
-				 !(flags & OF_GPIO_ACTIVE_LOW) ^ 1, gpio);
 	}
 
-	for (i = 0; i < 2; i++) {
-		gpio = of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
-		pdata->overcurrent_pin[i] = gpio;
-		if (!gpio_is_valid(gpio))
-			continue;
-		ret = gpio_request(gpio, "ohci_overcurrent");
-		if (ret) {
-			dev_err(&pdev->dev, "can't request overcurrent gpio %d", gpio);
-			continue;
-		}
-
-		ret = gpio_direction_input(gpio);
-		if (ret) {
-			dev_err(&pdev->dev, "can't configure overcurrent gpio %d as input", gpio);
-			continue;
-		}
-
-		ret = request_irq(gpio_to_irq(gpio),
-				  ohci_hcd_at91_overcurrent_irq,
-				  IRQF_SHARED, "ohci_overcurrent", pdev);
-		if (ret) {
-			gpio_free(gpio);
-			dev_warn(& pdev->dev, "cannot get GPIO IRQ for overcurrent\n");
-		}
-	}
+	for (i = 0; i < 2; i++)
+		pdata->overcurrent_pin[i] =
+			of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
 
 	pdev->dev.platform_data = pdata;
 
@@ -574,6 +543,8 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 {
 	struct at91_usbh_data	*pdata;
 	int			i;
+	int			gpio;
+	int			ret;
 
 	i = ohci_at91_of_init(pdev);
 
@@ -586,23 +557,56 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 		for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
 			if (!gpio_is_valid(pdata->vbus_pin[i]))
 				continue;
-			gpio_request(pdata->vbus_pin[i], "ohci_vbus");
+			gpio = pdata->vbus_pin[i];
+
+			ret = gpio_request(gpio, "ohci_vbus");
+			if (ret) {
+				dev_err(&pdev->dev,
+					"can't request vbus gpio %d\n", gpio);
+				continue;
+			}
+			ret = gpio_direction_output(gpio,
+						!pdata->vbus_pin_active_low[i]);
+			if (ret) {
+				dev_err(&pdev->dev,
+					"can't put vbus gpio %d as output %d\n",
+					gpio, !pdata->vbus_pin_active_low[i]);
+				gpio_free(gpio);
+				continue;
+			}
+
 			ohci_at91_usb_set_power(pdata, i, 1);
 		}
 
 		for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
-			int ret;
-
 			if (!gpio_is_valid(pdata->overcurrent_pin[i]))
 				continue;
-			gpio_request(pdata->overcurrent_pin[i], "ohci_overcurrent");
+			gpio = pdata->overcurrent_pin[i];
+
+			ret = gpio_request(gpio, "ohci_overcurrent");
+			if (ret) {
+				dev_err(&pdev->dev,
+					"can't request overcurrent gpio %d\n",
+					gpio);
+				continue;
+			}
+
+			ret = gpio_direction_input(gpio);
+			if (ret) {
+				dev_err(&pdev->dev,
+					"can't configure overcurrent gpio %d as input\n",
+					gpio);
+				gpio_free(gpio);
+				continue;
+			}
 
-			ret = request_irq(gpio_to_irq(pdata->overcurrent_pin[i]),
+			ret = request_irq(gpio_to_irq(gpio),
 					  ohci_hcd_at91_overcurrent_irq,
 					  IRQF_SHARED, "ohci_overcurrent", pdev);
 			if (ret) {
-				gpio_free(pdata->overcurrent_pin[i]);
-				dev_warn(& pdev->dev, "cannot get GPIO IRQ for overcurrent\n");
+				gpio_free(gpio);
+				dev_err(&pdev->dev,
+					"can't get gpio IRQ for overcurrent\n");
 			}
 		}
 	}
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (4 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 05/13] USB: ohci-at91: rework and fix initialization Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03 14:11   ` Alan Stern
  2012-04-03  7:32 ` [PATCH v2 07/13] USB: ohci-at91: coding style modifications with one-line ifs Nicolas Ferre
                   ` (7 subsequent siblings)
  13 siblings, 1 reply; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

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 <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/mach-at91/include/mach/board.h |   13 +++----
 drivers/usb/host/ohci-at91.c            |   58 ++++++++++++++++++-------------
 2 files changed, 41 insertions(+), 30 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 c30da6a..859177c 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -27,6 +27,10 @@
 #error "CONFIG_ARCH_AT91 must be defined."
 #endif
 
+#define valid_port(index)	((index) >= 0 && (index) < AT91_MAX_USBH_PORTS)
+#define at91_for_each_port(index)	\
+        for ((index) = 0; (index) < AT91_MAX_USBH_PORTS; (index)++)
+
 /* interface and function clocks; sometimes also an AHB clock */
 static struct clk *iclk, *fclk, *hclk;
 static int clocked;
@@ -240,7 +244,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 (!valid_port(port))
 		return;
 
 	if (!gpio_is_valid(pdata->vbus_pin[port]))
@@ -252,7 +256,7 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int
 
 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
 {
-	if (port < 0 || port >= 2)
+	if (!valid_port(port))
 		return -EINVAL;
 
 	if (!gpio_is_valid(pdata->vbus_pin[port]))
@@ -271,7 +275,7 @@ static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf)
 	int length = ohci_hub_status_data(hcd, buf);
 	int port;
 
-	for (port = 0; port < ARRAY_SIZE(pdata->overcurrent_pin); port++) {
+	at91_for_each_port (port) {
 		if (pdata->overcurrent_changed[port]) {
 			if (! length)
 				length = 1;
@@ -297,11 +301,17 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 		"ohci_at91_hub_control(%p,0x%04x,0x%04x,0x%04x,%p,%04x)\n",
 		hcd, typeReq, wValue, wIndex, buf, wLength);
 
+	wIndex--;
+
 	switch (typeReq) {
 	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 (valid_port(wIndex)) {
+				ohci_at91_usb_set_power(pdata, wIndex, 1);
+				ret = 0;
+			}
+
 			goto out;
 		}
 		break;
@@ -312,9 +322,9 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: C_OVER_CURRENT\n");
 
-			if (wIndex == 1 || wIndex == 2) {
-				pdata->overcurrent_changed[wIndex-1] = 0;
-				pdata->overcurrent_status[wIndex-1] = 0;
+			if (valid_port(wIndex)) {
+				pdata->overcurrent_changed[wIndex] = 0;
+				pdata->overcurrent_status[wIndex] = 0;
 			}
 
 			goto out;
@@ -323,8 +333,8 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: OVER_CURRENT\n");
 
-			if (wIndex == 1 || wIndex == 2) {
-				pdata->overcurrent_status[wIndex-1] = 0;
+			if (valid_port(wIndex)) {
+				pdata->overcurrent_status[wIndex] = 0;
 			}
 
 			goto out;
@@ -333,15 +343,15 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: POWER\n");
 
-			if (wIndex == 1 || wIndex == 2) {
-				ohci_at91_usb_set_power(pdata, wIndex - 1, 0);
+			if (valid_port(wIndex)) {
+				ohci_at91_usb_set_power(pdata, wIndex, 0);
 				return 0;
 			}
 		}
 		break;
 	}
 
-	ret = ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
+	ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength);
 	if (ret)
 		goto out;
 
@@ -377,16 +387,16 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 
 		dev_dbg(hcd->self.controller, "GetPortStatus(%d)\n", wIndex);
 
-		if (wIndex == 1 || wIndex == 2) {
-			if (! ohci_at91_usb_get_power(pdata, wIndex-1)) {
+		if (valid_port(wIndex)) {
+			if (! ohci_at91_usb_get_power(pdata, wIndex)) {
 				*data &= ~cpu_to_le32(RH_PS_PPS);
 			}
 
-			if (pdata->overcurrent_changed[wIndex-1]) {
+			if (pdata->overcurrent_changed[wIndex]) {
 				*data |= cpu_to_le32(RH_PS_OCIC);
 			}
 
-			if (pdata->overcurrent_status[wIndex-1]) {
+			if (pdata->overcurrent_status[wIndex]) {
 				*data |= cpu_to_le32(RH_PS_POCI);
 			}
 		}
@@ -450,14 +460,14 @@ 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 */
-	for (port = 0; port < ARRAY_SIZE(pdata->overcurrent_pin); port++) {
+	at91_for_each_port (port) {
 		if (gpio_to_irq(pdata->overcurrent_pin[port]) == irq) {
 			gpio = pdata->overcurrent_pin[port];
 			break;
 		}
 	}
 
-	if (port == ARRAY_SIZE(pdata->overcurrent_pin)) {
+	if (port == AT91_MAX_USBH_PORTS) {
 		dev_err(& pdev->dev, "overcurrent interrupt from unknown GPIO\n");
 		return IRQ_HANDLED;
 	}
@@ -514,7 +524,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 	if (!of_property_read_u32(np, "num-ports", &ports))
 		pdata->ports = ports;
 
-	for (i = 0; i < 2; i++) {
+	at91_for_each_port (i) {
 		gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i, &flags);
 		pdata->vbus_pin[i] = gpio;
 		if (!gpio_is_valid(gpio))
@@ -522,7 +532,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 		pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW;
 	}
 
-	for (i = 0; i < 2; i++)
+	at91_for_each_port (i)
 		pdata->overcurrent_pin[i] =
 			of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
 
@@ -554,7 +564,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 	pdata = pdev->dev.platform_data;
 
 	if (pdata) {
-		for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
+		at91_for_each_port (i) {
 			if (!gpio_is_valid(pdata->vbus_pin[i]))
 				continue;
 			gpio = pdata->vbus_pin[i];
@@ -578,7 +588,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 			ohci_at91_usb_set_power(pdata, i, 1);
 		}
 
-		for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
+		at91_for_each_port (i) {
 			if (!gpio_is_valid(pdata->overcurrent_pin[i]))
 				continue;
 			gpio = pdata->overcurrent_pin[i];
@@ -621,14 +631,14 @@ static int ohci_hcd_at91_drv_remove(struct platform_device *pdev)
 	int			i;
 
 	if (pdata) {
-		for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
+		at91_for_each_port (i) {
 			if (!gpio_is_valid(pdata->vbus_pin[i]))
 				continue;
 			ohci_at91_usb_set_power(pdata, i, 0);
 			gpio_free(pdata->vbus_pin[i]);
 		}
 
-		for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
+		at91_for_each_port (i) {
 			if (!gpio_is_valid(pdata->overcurrent_pin[i]))
 				continue;
 			free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev);
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 07/13] USB: ohci-at91: coding style modifications with one-line ifs
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (5 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 08/13] USB: ohci-at91: trivial return code name change Nicolas Ferre
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/usb/host/ohci-at91.c |   12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 859177c..a8e0446 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -333,9 +333,8 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: OVER_CURRENT\n");
 
-			if (valid_port(wIndex)) {
+			if (valid_port(wIndex))
 				pdata->overcurrent_status[wIndex] = 0;
-			}
 
 			goto out;
 
@@ -388,17 +387,14 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 		dev_dbg(hcd->self.controller, "GetPortStatus(%d)\n", wIndex);
 
 		if (valid_port(wIndex)) {
-			if (! ohci_at91_usb_get_power(pdata, wIndex)) {
+			if (! ohci_at91_usb_get_power(pdata, wIndex))
 				*data &= ~cpu_to_le32(RH_PS_PPS);
-			}
 
-			if (pdata->overcurrent_changed[wIndex]) {
+			if (pdata->overcurrent_changed[wIndex])
 				*data |= cpu_to_le32(RH_PS_OCIC);
-			}
 
-			if (pdata->overcurrent_status[wIndex]) {
+			if (pdata->overcurrent_status[wIndex])
 				*data |= cpu_to_le32(RH_PS_POCI);
-			}
 		}
 	}
 
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 08/13] USB: ohci-at91: trivial return code name change
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (6 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 07/13] USB: ohci-at91: coding style modifications with one-line ifs Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 09/13] ARM: at91/at91sam9x5.dtsi: fix NAND ale/cle in DT file Nicolas Ferre
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/usb/host/ohci-at91.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index a8e0446..7e1abbd 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -552,10 +552,9 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 	int			gpio;
 	int			ret;
 
-	i = ohci_at91_of_init(pdev);
-
-	if (i)
-		return i;
+	ret = ohci_at91_of_init(pdev);
+	if (ret)
+		return ret;
 
 	pdata = pdev->dev.platform_data;
 
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 09/13] ARM: at91/at91sam9x5.dtsi: fix NAND ale/cle in DT file
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (7 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 08/13] USB: ohci-at91: trivial return code name change Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 10/13] ARM: at91/NAND DT bindings: add comments Nicolas Ferre
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/boot/dts/at91sam9x5.dtsi |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi
index c111001..6597177 100644
--- a/arch/arm/boot/dts/at91sam9x5.dtsi
+++ b/arch/arm/boot/dts/at91sam9x5.dtsi
@@ -201,8 +201,8 @@
 			      >;
 			atmel,nand-addr-offset = <21>;
 			atmel,nand-cmd-offset = <22>;
-			gpios = <&pioC 8 0
-				 &pioC 14 0
+			gpios = <&pioD 5 0
+				 &pioD 4 0
 				 0
 				>;
 			status = "disabled";
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 10/13] ARM: at91/NAND DT bindings: add comments
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (8 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 09/13] ARM: at91/at91sam9x5.dtsi: fix NAND ale/cle in DT file Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 11/13] USB: ehci-atmel: add needed of.h header file Nicolas Ferre
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Add comments to NAND "gpios" property to make it clearer.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 .../devicetree/bindings/mtd/atmel-nand.txt         |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/mtd/atmel-nand.txt b/Documentation/devicetree/bindings/mtd/atmel-nand.txt
index 5903ecf..a200695 100644
--- a/Documentation/devicetree/bindings/mtd/atmel-nand.txt
+++ b/Documentation/devicetree/bindings/mtd/atmel-nand.txt
@@ -27,13 +27,13 @@ nand0: nand@40000000,0 {
 	reg = <0x40000000 0x10000000
 	       0xffffe800 0x200
 	      >;
-	atmel,nand-addr-offset = <21>;
-	atmel,nand-cmd-offset = <22>;
+	atmel,nand-addr-offset = <21>;	/* ale */
+	atmel,nand-cmd-offset = <22>;	/* cle */
 	nand-on-flash-bbt;
 	nand-ecc-mode = "soft";
-	gpios = <&pioC 13 0
-		 &pioC 14 0
-		 0
+	gpios = <&pioC 13 0	/* rdy */
+		 &pioC 14 0 	/* nce */
+		 0		/* cd */
 		>;
 	partition@0 {
 		...
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 11/13] USB: ehci-atmel: add needed of.h header file
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (9 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 10/13] ARM: at91/NAND DT bindings: add comments Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 12/13] ARM: at91: fix check of valid GPIO for SPI and USB Nicolas Ferre
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

Compilation error in case of non-DT configuration without this
of.h header file.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/usb/host/ehci-atmel.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
index 19f318a..cf14c95 100644
--- a/drivers/usb/host/ehci-atmel.c
+++ b/drivers/usb/host/ehci-atmel.c
@@ -13,6 +13,7 @@
 
 #include <linux/clk.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
 #include <linux/of_platform.h>
 
 /* interface and function clocks */
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 12/13] ARM: at91: fix check of valid GPIO for SPI and USB
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (10 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 11/13] USB: ehci-atmel: add needed of.h header file Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-03  7:32 ` [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes Nicolas Ferre
  2012-04-03 11:55 ` [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

SPI chip select pins have to be checked by gpio_is_valid().
The USB host overcurrent_pin checking was missing.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 arch/arm/mach-at91/at91sam9260_devices.c |    3 +++
 arch/arm/mach-at91/at91sam9261_devices.c |    3 +++
 arch/arm/mach-at91/at91sam9263_devices.c |    3 +++
 arch/arm/mach-at91/at91sam9g45_devices.c |    5 ++++-
 arch/arm/mach-at91/at91sam9rl_devices.c  |    3 +++
 5 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
index 7e5651e..5652dde 100644
--- a/arch/arm/mach-at91/at91sam9260_devices.c
+++ b/arch/arm/mach-at91/at91sam9260_devices.c
@@ -598,6 +598,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
 		else
 			cs_pin = spi1_standard_cs[devices[i].chip_select];
 
+		if (!gpio_is_valid(cs_pin))
+			continue;
+
 		if (devices[i].bus_num == 0)
 			enable_spi0 = 1;
 		else
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
index 096da87..4db961a 100644
--- a/arch/arm/mach-at91/at91sam9261_devices.c
+++ b/arch/arm/mach-at91/at91sam9261_devices.c
@@ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
 		else
 			cs_pin = spi1_standard_cs[devices[i].chip_select];
 
+		if (!gpio_is_valid(cs_pin))
+			continue;
+
 		if (devices[i].bus_num == 0)
 			enable_spi0 = 1;
 		else
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
index 27cfce3..fe99206 100644
--- a/arch/arm/mach-at91/at91sam9263_devices.c
+++ b/arch/arm/mach-at91/at91sam9263_devices.c
@@ -672,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
 		else
 			cs_pin = spi1_standard_cs[devices[i].chip_select];
 
+		if (!gpio_is_valid(cs_pin))
+			continue;
+
 		if (devices[i].bus_num == 0)
 			enable_spi0 = 1;
 		else
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index ddf210a..6b008ae 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -133,7 +133,7 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
 
 	/* Enable overcurrent notification */
 	for (i = 0; i < data->ports; i++) {
-		if (data->overcurrent_pin[i])
+		if (gpio_is_valid(data->overcurrent_pin[i]))
 			at91_set_gpio_input(data->overcurrent_pin[i], 1);
 	}
 
@@ -787,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
 		else
 			cs_pin = spi1_standard_cs[devices[i].chip_select];
 
+		if (!gpio_is_valid(cs_pin))
+			continue;
+
 		if (devices[i].bus_num == 0)
 			enable_spi0 = 1;
 		else
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
index eda72e8..fe4ae22 100644
--- a/arch/arm/mach-at91/at91sam9rl_devices.c
+++ b/arch/arm/mach-at91/at91sam9rl_devices.c
@@ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
 		else
 			cs_pin = spi_standard_cs[devices[i].chip_select];
 
+		if (!gpio_is_valid(cs_pin))
+			continue;
+
 		/* enable chip-select pin */
 		at91_set_gpio_output(cs_pin, 1);
 
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (11 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 12/13] ARM: at91: fix check of valid GPIO for SPI and USB Nicolas Ferre
@ 2012-04-03  7:32 ` Nicolas Ferre
  2012-04-04 19:17   ` Olof Johansson
  2012-04-03 11:55 ` [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
  13 siblings, 1 reply; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03  7:32 UTC (permalink / raw)
  To: linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof,
	Nicolas Ferre, devicetree-discuss

From: Ludovic Desroches <ludovic.desroches@atmel.com>

Having a unit-address different from 0 causes bad memory node detection
during early_init_dt_scan_memory.

Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: devicetree-discuss@lists.ozlabs.org
---
 arch/arm/boot/dts/at91sam9g20.dtsi     |    2 +-
 arch/arm/boot/dts/at91sam9g45.dtsi     |    2 +-
 arch/arm/boot/dts/at91sam9m10g45ek.dts |    2 +-
 arch/arm/boot/dts/at91sam9x5.dtsi      |    2 +-
 arch/arm/boot/dts/at91sam9x5cm.dtsi    |    2 +-
 arch/arm/boot/dts/usb_a9g20.dts        |    2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/boot/dts/at91sam9g20.dtsi b/arch/arm/boot/dts/at91sam9g20.dtsi
index 92f3662..799ad18 100644
--- a/arch/arm/boot/dts/at91sam9g20.dtsi
+++ b/arch/arm/boot/dts/at91sam9g20.dtsi
@@ -35,7 +35,7 @@
 		};
 	};
 
-	memory@20000000 {
+	memory {
 		reg = <0x20000000 0x08000000>;
 	};
 
diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi
index 3d0c32f..9e6eb6e 100644
--- a/arch/arm/boot/dts/at91sam9g45.dtsi
+++ b/arch/arm/boot/dts/at91sam9g45.dtsi
@@ -36,7 +36,7 @@
 		};
 	};
 
-	memory@70000000 {
+	memory {
 		reg = <0x70000000 0x10000000>;
 	};
 
diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts
index 6abb571..a3633bd 100644
--- a/arch/arm/boot/dts/at91sam9m10g45ek.dts
+++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts
@@ -17,7 +17,7 @@
 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2";
 	};
 
-	memory@70000000 {
+	memory {
 		reg = <0x70000000 0x4000000>;
 	};
 
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi
index 6597177..70ab3a4 100644
--- a/arch/arm/boot/dts/at91sam9x5.dtsi
+++ b/arch/arm/boot/dts/at91sam9x5.dtsi
@@ -34,7 +34,7 @@
 		};
 	};
 
-	memory@20000000 {
+	memory {
 		reg = <0x20000000 0x10000000>;
 	};
 
diff --git a/arch/arm/boot/dts/at91sam9x5cm.dtsi b/arch/arm/boot/dts/at91sam9x5cm.dtsi
index 67936f8..31e7be2 100644
--- a/arch/arm/boot/dts/at91sam9x5cm.dtsi
+++ b/arch/arm/boot/dts/at91sam9x5cm.dtsi
@@ -8,7 +8,7 @@
  */
 
 / {
-	memory@20000000 {
+	memory {
 		reg = <0x20000000 0x8000000>;
 	};
 
diff --git a/arch/arm/boot/dts/usb_a9g20.dts b/arch/arm/boot/dts/usb_a9g20.dts
index 3b3c4e0..7c2399c 100644
--- a/arch/arm/boot/dts/usb_a9g20.dts
+++ b/arch/arm/boot/dts/usb_a9g20.dts
@@ -16,7 +16,7 @@
 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
 	};
 
-	memory@20000000 {
+	memory {
 		reg = <0x20000000 0x4000000>;
 	};
 
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 00/13] at91: 3.4-rc1 fixes
  2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
                   ` (12 preceding siblings ...)
  2012-04-03  7:32 ` [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes Nicolas Ferre
@ 2012-04-03 11:55 ` Nicolas Ferre
  13 siblings, 0 replies; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03 11:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Alan Stern
  Cc: linux-arm-kernel, linux-usb, plagnioj, ludovic.desroches,
	linux-kernel, arnd, olof

On 04/03/2012 09:32 AM, Nicolas Ferre :
> Here is a bunch of fixes for AT91 that will go on top of 3.4-rc1.
> Some modifications are related to certain drivers (USB ohci-at91 for instance)
> but are touching the core AT91 devices/board files and Device Tree files.
> The modification of "vbus_pin_active_low" in particular cannot be separated
> from the modification of .dts[i] and devices/board files.
> 
> I will have to collect "Acked-by" from USB people on the ohci-at91
> modifications (Greg?). I will try to find them just after having posted
> this v2 today...

Hi Greg,

I would like to send this "fixes" patch series via arm-soc. Is it
possible for you to have a look at patches that will modify ohci-at91
(and the tiny ehci-atmel one) and give me your "Acked-by" so that I can
ask Arnd and Olof to queue this material for 3.4-rc?

Here is the thread in linux-usb mainling-list:
http://www.spinics.net/lists/linux-usb/msg60798.html

Thanks for your help, best regards,

> Ludovic Desroches (1):
>   ARM: at91: dt: remove unit-address part for memory nodes
> 
> Nicolas Ferre (12):
>   ARM: at91/at91sam9x5: add clkdev entries for DMA controllers
>   USB: ohci-at91: fix vbus_pin_active_low handling
>   ARM: at91/USB host: specify and handle properly vbus_pin_active_low
>   ARM: at91/dts: USB host vbus is active low
>   USB: ohci-at91: rework and fix initialization
>   USB: ohci-at91: change maximum number of ports
>   USB: ohci-at91: coding style modifications with one-line ifs
>   USB: ohci-at91: trivial return code name change
>   ARM: at91/at91sam9x5.dtsi: fix NAND ale/cle in DT file
>   ARM: at91/NAND DT bindings: add comments
>   USB: ehci-atmel: add needed of.h header file
>   ARM: at91: fix check of valid GPIO for SPI and USB
> 
>  .../devicetree/bindings/mtd/atmel-nand.txt         |   10 +-
>  arch/arm/boot/dts/at91sam9g20.dtsi                 |    2 +-
>  arch/arm/boot/dts/at91sam9g25ek.dts                |    4 +-
>  arch/arm/boot/dts/at91sam9g45.dtsi                 |    2 +-
>  arch/arm/boot/dts/at91sam9m10g45ek.dts             |    6 +-
>  arch/arm/boot/dts/at91sam9x5.dtsi                  |    6 +-
>  arch/arm/boot/dts/at91sam9x5cm.dtsi                |    2 +-
>  arch/arm/boot/dts/usb_a9g20.dts                    |    2 +-
>  arch/arm/mach-at91/at91sam9260_devices.c           |    3 +
>  arch/arm/mach-at91/at91sam9261_devices.c           |    3 +
>  arch/arm/mach-at91/at91sam9263_devices.c           |    6 +-
>  arch/arm/mach-at91/at91sam9g45_devices.c           |   11 +-
>  arch/arm/mach-at91/at91sam9rl_devices.c            |    3 +
>  arch/arm/mach-at91/at91sam9x5.c                    |    2 +
>  arch/arm/mach-at91/board-sam9263ek.c               |    1 +
>  arch/arm/mach-at91/board-sam9m10g45ek.c            |    1 +
>  arch/arm/mach-at91/include/mach/board.h            |   13 +-
>  drivers/usb/host/ehci-atmel.c                      |    1 +
>  drivers/usb/host/ohci-at91.c                       |  159 +++++++++++---------
>  19 files changed, 135 insertions(+), 102 deletions(-)
> 
> Thanks, best regards,


-- 
Nicolas Ferre

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports
  2012-04-03  7:32 ` [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports Nicolas Ferre
@ 2012-04-03 14:11   ` Alan Stern
  2012-04-03 15:04     ` Nicolas Ferre
  0 siblings, 1 reply; 22+ messages in thread
From: Alan Stern @ 2012-04-03 14:11 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: linux-arm-kernel, linux-usb, plagnioj, ludovic.desroches,
	linux-kernel, arnd, olof

On Tue, 3 Apr 2012, Nicolas Ferre wrote:

> 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 <nicolas.ferre@atmel.com>
> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>

Did you run this patch through scripts/checkpatch.pl?  I have the 
feeling that it might complain about some of the changes.

Alan Stern


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports
  2012-04-03 14:11   ` Alan Stern
@ 2012-04-03 15:04     ` Nicolas Ferre
  2012-04-03 15:25       ` Alan Stern
  0 siblings, 1 reply; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03 15:04 UTC (permalink / raw)
  To: Alan Stern, plagnioj
  Cc: linux-arm-kernel, linux-usb, ludovic.desroches, linux-kernel, arnd, olof

On 04/03/2012 04:11 PM, Alan Stern :
> On Tue, 3 Apr 2012, Nicolas Ferre wrote:
> 
>> 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 <nicolas.ferre@atmel.com>
>> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> 
> Did you run this patch through scripts/checkpatch.pl?  I have the 
> feeling that it might complain about some of the changes.

Yes, definitively.

I can modify the patch to comply with error issued by checkpatch.pl: several are
due to a bad replacement of previous code with my regular expression but others
where existing before my modifications.
So what do you think about:
 - addressing all style errors in this patch (to prevent carrying them)
 - merging this one and the following patch:
   "[PATCH v2 07/13] USB: ohci-at91: coding style modifications with one-line ifs
 - posting a v3 of this patch only if you agree on this...

Best regards,
-- 
Nicolas Ferre

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports
  2012-04-03 15:04     ` Nicolas Ferre
@ 2012-04-03 15:25       ` Alan Stern
  2012-04-03 15:30         ` [PATCH v3 06/12] " Nicolas Ferre
  0 siblings, 1 reply; 22+ messages in thread
From: Alan Stern @ 2012-04-03 15:25 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: plagnioj, linux-arm-kernel, linux-usb, ludovic.desroches,
	linux-kernel, arnd, olof

On Tue, 3 Apr 2012, Nicolas Ferre wrote:

> > Did you run this patch through scripts/checkpatch.pl?  I have the 
> > feeling that it might complain about some of the changes.
> 
> Yes, definitively.
> 
> I can modify the patch to comply with error issued by checkpatch.pl: several are
> due to a bad replacement of previous code with my regular expression but others
> where existing before my modifications.
> So what do you think about:
>  - addressing all style errors in this patch (to prevent carrying them)
>  - merging this one and the following patch:
>    "[PATCH v2 07/13] USB: ohci-at91: coding style modifications with one-line ifs
>  - posting a v3 of this patch only if you agree on this...

Sure, go ahead.  Aside from this minor issue I didn't notice anything 
objectionable in the patch series.

Alan Stern


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v3 06/12] USB: ohci-at91: change maximum number of ports
  2012-04-03 15:25       ` Alan Stern
@ 2012-04-03 15:30         ` Nicolas Ferre
  2012-04-04 16:07           ` Alan Stern
  0 siblings, 1 reply; 22+ messages in thread
From: Nicolas Ferre @ 2012-04-03 15:30 UTC (permalink / raw)
  To: stern, linux-arm-kernel, linux-usb
  Cc: plagnioj, ludovic.desroches, linux-kernel, arnd, olof, Nicolas Ferre

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.
Several coding style errors have been addresses as the patch was touching
affected lines of code and was producing errors while run through
checkpatch.pl.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
v3: - address all style errors in this patch (to prevent carrying them)
    - merge following patch about one-line ifs

v2: - use of AT91_MAX_USBH_PORTS instead of ARRAY_SIZE()
    - modify wIndex ohci_at91_hub_control() for simpler code

 arch/arm/mach-at91/include/mach/board.h |   13 +++---
 drivers/usb/host/ohci-at91.c            |   66 +++++++++++++++++--------------
 2 files changed, 43 insertions(+), 36 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 c30da6a..7cf4797 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -27,6 +27,10 @@
 #error "CONFIG_ARCH_AT91 must be defined."
 #endif
 
+#define valid_port(index)	((index) >= 0 && (index) < AT91_MAX_USBH_PORTS)
+#define at91_for_each_port(index)	\
+		for ((index) = 0; (index) < AT91_MAX_USBH_PORTS; (index)++)
+
 /* interface and function clocks; sometimes also an AHB clock */
 static struct clk *iclk, *fclk, *hclk;
 static int clocked;
@@ -240,7 +244,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 (!valid_port(port))
 		return;
 
 	if (!gpio_is_valid(pdata->vbus_pin[port]))
@@ -252,7 +256,7 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int
 
 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
 {
-	if (port < 0 || port >= 2)
+	if (!valid_port(port))
 		return -EINVAL;
 
 	if (!gpio_is_valid(pdata->vbus_pin[port]))
@@ -271,9 +275,9 @@ static int ohci_at91_hub_status_data(struct usb_hcd *hcd, char *buf)
 	int length = ohci_hub_status_data(hcd, buf);
 	int port;
 
-	for (port = 0; port < ARRAY_SIZE(pdata->overcurrent_pin); port++) {
+	at91_for_each_port(port) {
 		if (pdata->overcurrent_changed[port]) {
-			if (! length)
+			if (!length)
 				length = 1;
 			buf[0] |= 1 << (port + 1);
 		}
@@ -297,11 +301,17 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 		"ohci_at91_hub_control(%p,0x%04x,0x%04x,0x%04x,%p,%04x)\n",
 		hcd, typeReq, wValue, wIndex, buf, wLength);
 
+	wIndex--;
+
 	switch (typeReq) {
 	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 (valid_port(wIndex)) {
+				ohci_at91_usb_set_power(pdata, wIndex, 1);
+				ret = 0;
+			}
+
 			goto out;
 		}
 		break;
@@ -312,9 +322,9 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: C_OVER_CURRENT\n");
 
-			if (wIndex == 1 || wIndex == 2) {
-				pdata->overcurrent_changed[wIndex-1] = 0;
-				pdata->overcurrent_status[wIndex-1] = 0;
+			if (valid_port(wIndex)) {
+				pdata->overcurrent_changed[wIndex] = 0;
+				pdata->overcurrent_status[wIndex] = 0;
 			}
 
 			goto out;
@@ -323,9 +333,8 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: OVER_CURRENT\n");
 
-			if (wIndex == 1 || wIndex == 2) {
-				pdata->overcurrent_status[wIndex-1] = 0;
-			}
+			if (valid_port(wIndex))
+				pdata->overcurrent_status[wIndex] = 0;
 
 			goto out;
 
@@ -333,15 +342,15 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 			dev_dbg(hcd->self.controller,
 				"ClearPortFeature: POWER\n");
 
-			if (wIndex == 1 || wIndex == 2) {
-				ohci_at91_usb_set_power(pdata, wIndex - 1, 0);
+			if (valid_port(wIndex)) {
+				ohci_at91_usb_set_power(pdata, wIndex, 0);
 				return 0;
 			}
 		}
 		break;
 	}
 
-	ret = ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
+	ret = ohci_hub_control(hcd, typeReq, wValue, wIndex + 1, buf, wLength);
 	if (ret)
 		goto out;
 
@@ -377,18 +386,15 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
 
 		dev_dbg(hcd->self.controller, "GetPortStatus(%d)\n", wIndex);
 
-		if (wIndex == 1 || wIndex == 2) {
-			if (! ohci_at91_usb_get_power(pdata, wIndex-1)) {
+		if (valid_port(wIndex)) {
+			if (!ohci_at91_usb_get_power(pdata, wIndex))
 				*data &= ~cpu_to_le32(RH_PS_PPS);
-			}
 
-			if (pdata->overcurrent_changed[wIndex-1]) {
+			if (pdata->overcurrent_changed[wIndex])
 				*data |= cpu_to_le32(RH_PS_OCIC);
-			}
 
-			if (pdata->overcurrent_status[wIndex-1]) {
+			if (pdata->overcurrent_status[wIndex])
 				*data |= cpu_to_le32(RH_PS_POCI);
-			}
 		}
 	}
 
@@ -450,14 +456,14 @@ 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 */
-	for (port = 0; port < ARRAY_SIZE(pdata->overcurrent_pin); port++) {
+	at91_for_each_port(port) {
 		if (gpio_to_irq(pdata->overcurrent_pin[port]) == irq) {
 			gpio = pdata->overcurrent_pin[port];
 			break;
 		}
 	}
 
-	if (port == ARRAY_SIZE(pdata->overcurrent_pin)) {
+	if (port == AT91_MAX_USBH_PORTS) {
 		dev_err(& pdev->dev, "overcurrent interrupt from unknown GPIO\n");
 		return IRQ_HANDLED;
 	}
@@ -467,7 +473,7 @@ static irqreturn_t ohci_hcd_at91_overcurrent_irq(int irq, void *data)
 	/* When notified of an over-current situation, disable power
 	   on the corresponding port, and mark this port in
 	   over-current. */
-	if (! val) {
+	if (!val) {
 		ohci_at91_usb_set_power(pdata, port, 0);
 		pdata->overcurrent_status[port]  = 1;
 		pdata->overcurrent_changed[port] = 1;
@@ -514,7 +520,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 	if (!of_property_read_u32(np, "num-ports", &ports))
 		pdata->ports = ports;
 
-	for (i = 0; i < 2; i++) {
+	at91_for_each_port(i) {
 		gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i, &flags);
 		pdata->vbus_pin[i] = gpio;
 		if (!gpio_is_valid(gpio))
@@ -522,7 +528,7 @@ static int __devinit ohci_at91_of_init(struct platform_device *pdev)
 		pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW;
 	}
 
-	for (i = 0; i < 2; i++)
+	at91_for_each_port(i)
 		pdata->overcurrent_pin[i] =
 			of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
 
@@ -554,7 +560,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 	pdata = pdev->dev.platform_data;
 
 	if (pdata) {
-		for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
+		at91_for_each_port(i) {
 			if (!gpio_is_valid(pdata->vbus_pin[i]))
 				continue;
 			gpio = pdata->vbus_pin[i];
@@ -578,7 +584,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
 			ohci_at91_usb_set_power(pdata, i, 1);
 		}
 
-		for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
+		at91_for_each_port(i) {
 			if (!gpio_is_valid(pdata->overcurrent_pin[i]))
 				continue;
 			gpio = pdata->overcurrent_pin[i];
@@ -621,14 +627,14 @@ static int ohci_hcd_at91_drv_remove(struct platform_device *pdev)
 	int			i;
 
 	if (pdata) {
-		for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
+		at91_for_each_port(i) {
 			if (!gpio_is_valid(pdata->vbus_pin[i]))
 				continue;
 			ohci_at91_usb_set_power(pdata, i, 0);
 			gpio_free(pdata->vbus_pin[i]);
 		}
 
-		for (i = 0; i < ARRAY_SIZE(pdata->overcurrent_pin); i++) {
+		at91_for_each_port(i) {
 			if (!gpio_is_valid(pdata->overcurrent_pin[i]))
 				continue;
 			free_irq(gpio_to_irq(pdata->overcurrent_pin[i]), pdev);
-- 
1.7.9.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH v3 06/12] USB: ohci-at91: change maximum number of ports
  2012-04-03 15:30         ` [PATCH v3 06/12] " Nicolas Ferre
@ 2012-04-04 16:07           ` Alan Stern
  0 siblings, 0 replies; 22+ messages in thread
From: Alan Stern @ 2012-04-04 16:07 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: linux-arm-kernel, linux-usb, plagnioj, ludovic.desroches,
	linux-kernel, arnd, olof

On Tue, 3 Apr 2012, Nicolas Ferre wrote:

> 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.
> Several coding style errors have been addresses as the patch was touching
> affected lines of code and was producing errors while run through
> checkpatch.pl.
> 
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
> v3: - address all style errors in this patch (to prevent carrying them)
>     - merge following patch about one-line ifs
> 
> v2: - use of AT91_MAX_USBH_PORTS instead of ARRAY_SIZE()
>     - modify wIndex ohci_at91_hub_control() for simpler code

This is better.  For this patch and the other ones in this series
affecting ohci-at91 and ehci-at91:

Acked-by: Alan Stern <stern@rowland.harvard.edu>


^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes
  2012-04-03  7:32 ` [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes Nicolas Ferre
@ 2012-04-04 19:17   ` Olof Johansson
  2012-04-07  1:43     ` Grant Likely
  0 siblings, 1 reply; 22+ messages in thread
From: Olof Johansson @ 2012-04-04 19:17 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: linux-arm-kernel, linux-usb, plagnioj, ludovic.desroches,
	linux-kernel, arnd, devicetree-discuss

On Tue, Apr 03, 2012 at 09:32:57AM +0200, Nicolas Ferre wrote:
> From: Ludovic Desroches <ludovic.desroches@atmel.com>
> 
> Having a unit-address different from 0 causes bad memory node detection
> during early_init_dt_scan_memory.

Sounds like a bug in the generic code to me? But specifying a unit
address on a non-ambiguous device node isn't necessary anyway, so this
patch is still a reasonable thing to do.

> Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> Cc: devicetree-discuss@lists.ozlabs.org

Acked-by: Olof Johansson <olof@lixom.net>



-Olof

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes
  2012-04-04 19:17   ` Olof Johansson
@ 2012-04-07  1:43     ` Grant Likely
  0 siblings, 0 replies; 22+ messages in thread
From: Grant Likely @ 2012-04-07  1:43 UTC (permalink / raw)
  To: Olof Johansson, Nicolas Ferre
  Cc: arnd, devicetree-discuss, linux-usb, linux-kernel,
	ludovic.desroches, plagnioj, linux-arm-kernel

On Wed, 4 Apr 2012 12:17:54 -0700, Olof Johansson <olof@lixom.net> wrote:
> On Tue, Apr 03, 2012 at 09:32:57AM +0200, Nicolas Ferre wrote:
> > From: Ludovic Desroches <ludovic.desroches@atmel.com>
> > 
> > Having a unit-address different from 0 causes bad memory node detection
> > during early_init_dt_scan_memory.
> 
> Sounds like a bug in the generic code to me? But specifying a unit
> address on a non-ambiguous device node isn't necessary anyway, so this
> patch is still a reasonable thing to do.

It's actually a 'feature' of the way we're including skeleton.dtsi.
skeleton.dtsi has already set the node name, so if the next file
doesn't use exactly the same node name then the .dtb ends up with two
memory nodes, which is really bad.

It real problem is the dtc tooling.

g.


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2012-04-07  1:52 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-03  7:32 [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 01/13] ARM: at91/at91sam9x5: add clkdev entries for DMA controllers Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 02/13] USB: ohci-at91: fix vbus_pin_active_low handling Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 03/13] ARM: at91/USB host: specify and handle properly vbus_pin_active_low Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 04/13] ARM: at91/dts: USB host vbus is active low Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 05/13] USB: ohci-at91: rework and fix initialization Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 06/13] USB: ohci-at91: change maximum number of ports Nicolas Ferre
2012-04-03 14:11   ` Alan Stern
2012-04-03 15:04     ` Nicolas Ferre
2012-04-03 15:25       ` Alan Stern
2012-04-03 15:30         ` [PATCH v3 06/12] " Nicolas Ferre
2012-04-04 16:07           ` Alan Stern
2012-04-03  7:32 ` [PATCH v2 07/13] USB: ohci-at91: coding style modifications with one-line ifs Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 08/13] USB: ohci-at91: trivial return code name change Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 09/13] ARM: at91/at91sam9x5.dtsi: fix NAND ale/cle in DT file Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 10/13] ARM: at91/NAND DT bindings: add comments Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 11/13] USB: ehci-atmel: add needed of.h header file Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 12/13] ARM: at91: fix check of valid GPIO for SPI and USB Nicolas Ferre
2012-04-03  7:32 ` [PATCH v2 13/13] ARM: at91: dt: remove unit-address part for memory nodes Nicolas Ferre
2012-04-04 19:17   ` Olof Johansson
2012-04-07  1:43     ` Grant Likely
2012-04-03 11:55 ` [PATCH v2 00/13] at91: 3.4-rc1 fixes Nicolas Ferre

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).