Skip to contentSkip to conversation

PXA1928 GPIO support

PATCH In review Rob Herring 2 participants 9 messages Jan 27, 2015 – Mar 2, 2015

Subsystems (3)
lore
Share & tools
lore

Rob Herring

author maintainer
#0 lore raw

cover PXA1928 GPIO support

PXA1928 is an ARMv8 SOC in the PXA/MMP family. This series enables building on ARM64 and adds support for the PXA1928. The PXA1928 GPIO differs from previous generations by adding a 6th GPIO bank.

Rob

Rob Herring (3):
gpio: pxa: remove mach IRQ includes
dt/bindings: gpio: add compatible string for marvell,pxa1928-gpio
gpio: pxa: add PXA1928 gpio type support

 .../devicetree/bindings/gpio/mrvl-gpio.txt         |  4 +-
 drivers/gpio/gpio-pxa.c                            | 55 +++++++++++++---------
 2 files changed, 35 insertions(+), 24 deletions(-)
Signature · 1 line
2.1.0
author maintainer
#1 lore raw

PATCH 1/3 gpio: pxa: remove mach IRQ includes

In preparation to enable ARCH_MMP on ARM64, the include of mach/irqs.h must be eliminated. mach/irqs.h was being included for IRQ_GPIO{0,1}, but these IRQs are always passed in as resources now. We can use irq0 and irq1 and get rid of IRQ_GPIOx. Get rid of the ifdef in the process as it is no longer needed.

Cc Linus Walleij <[email protected]>
Cc Alexandre Courbot <[email protected]>
---
 drivers/gpio/gpio-pxa.c | 38 ++++++++++++++++++--------------------
 1 file changed, 18 insertions(+), 20 deletions(-)
drivers/gpio/gpio-pxa.c +18 -20
index ad3feec..b4fb8de 100644
@@ -17,6 +17,7 @@
 #include <linux/gpio.h>
 #include <linux/gpio-pxa.h>
 #include <linux/init.h>
+#include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/irqdomain.h>
 #include <linux/irqchip/chained_irq.h>
@@ -27,8 +28,6 @@
 #include <linux/syscore_ops.h>
 #include <linux/slab.h>
 
-#include <mach/irqs.h>
-
 /*
  * We handle the GPIOs by banks, each bank covers up to 32 GPIOs with
  * one set of registers. The register offsets are organized below:
@@ -629,19 +628,18 @@ static int pxa_gpio_probe(struct platform_device *pdev)
 	}
 
 	if (!use_of) {
-#ifdef CONFIG_ARCH_PXA
-		irq = gpio_to_irq(0);
-		irq_set_chip_and_handler(irq, &pxa_muxed_gpio_chip,
-					 handle_edge_irq);
-		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
-		irq_set_chained_handler(IRQ_GPIO0, pxa_gpio_demux_handler);
-
-		irq = gpio_to_irq(1);
-		irq_set_chip_and_handler(irq, &pxa_muxed_gpio_chip,
-					 handle_edge_irq);
-		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
-		irq_set_chained_handler(IRQ_GPIO1, pxa_gpio_demux_handler);
-#endif
+		if (irq0 > 0) {
+			irq = gpio_to_irq(0);
+			irq_set_chip_and_handler(irq, &pxa_muxed_gpio_chip,
+						 handle_edge_irq);
+			set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
+		}
+		if (irq1 > 0) {
+			irq = gpio_to_irq(1);
+			irq_set_chip_and_handler(irq, &pxa_muxed_gpio_chip,
+						 handle_edge_irq);
+			set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
+		}
 
 		for (irq  = gpio_to_irq(gpio_offset);
 			irq <= gpio_to_irq(pxa_last_gpio); irq++) {
@@ -649,13 +647,13 @@ static int pxa_gpio_probe(struct platform_device *pdev)
 						 handle_edge_irq);
 			set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
 		}
-	} else {
-		if (irq0 > 0)
-			irq_set_chained_handler(irq0, pxa_gpio_demux_handler);
-		if (irq1 > 0)
-			irq_set_chained_handler(irq1, pxa_gpio_demux_handler);
 	}
 
+	if (irq0 > 0)
+		irq_set_chained_handler(irq0, pxa_gpio_demux_handler);
+	if (irq1 > 0)
+		irq_set_chained_handler(irq1, pxa_gpio_demux_handler);
+
 	irq_set_chained_handler(irq_mux, pxa_gpio_demux_handler);
 	return 0;
 }
Signature · 1 line
2.1.0
#2 lore raw

Re: [PATCH 1/3] gpio: pxa: remove mach IRQ includes

Quoted 9 lines · Rob Herring

In preparation to enable ARCH_MMP on ARM64, the include of mach/irqs.h must be eliminated. mach/irqs.h was being included for IRQ_GPIO{0,1}, but these IRQs are always passed in as resources now. We can use irq0 and irq1 and get rid of IRQ_GPIOx. Get rid of the ifdef in the process as it is no longer needed.

Cc Linus Walleij <[email protected]>
Cc Alexandre Courbot <[email protected]>

Nice cleanup, patch applied.

Yours,
Linus Walleij

author maintainer
#3 lore raw

PATCH 2/3 dt/bindings: gpio: add compatible string for marvell,pxa1928-gpio

In reply to Rob Herring

Add a new compatible string for PXA1928 GPIO controller. The IP block is same as prior chips with a 6th bank added.

Cc Pawel Moll <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Ian Campbell <[email protected]>
Cc Kumar Gala <[email protected]>
---
 Documentation/devicetree/bindings/gpio/mrvl-gpio.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/gpio/mrvl-gpio.txt +2 -2
index b2afdb2..67a2e4e 100644
@@ -3,8 +3,8 @@
 Required properties:
 - compatible : Should be "intel,pxa25x-gpio", "intel,pxa26x-gpio",
 		"intel,pxa27x-gpio", "intel,pxa3xx-gpio",
-		"marvell,pxa93x-gpio", "marvell,mmp-gpio" or
-		"marvell,mmp2-gpio".
+		"marvell,pxa93x-gpio", "marvell,mmp-gpio",
+		"marvell,mmp2-gpio" or marvell,pxa1928-gpio.
 - reg : Address and length of the register set for the device
 - interrupts : Should be the port interrupt shared by all gpio pins.
   There're three gpio interrupts in arch-pxa, and they're gpio0,
Signature · 1 line
2.1.0
#4 lore raw

Re: [PATCH 2/3] dt/bindings: gpio: add compatible string for marvell,pxa1928-gpio

Quoted 9 lines · Rob Herring

Add a new compatible string for PXA1928 GPIO controller. The IP block is same as prior chips with a 6th bank added.

Cc Pawel Moll <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Ian Campbell <[email protected]>
Cc Kumar Gala <[email protected]>

Patch applied to the GPIO tree.

Yours,
Linus Walleij

author maintainer
#5 lore raw

PATCH 3/3 gpio: pxa: add PXA1928 gpio type support

In reply to Rob Herring

Add support for PXA1928 GPIOs. The PXA1928 adds a 6th bank from previous generations.

[robh: ported to 3.19 from vendor kernel]
Cc Linus Walleij <[email protected]>
Cc Alexandre Courbot <[email protected]>
---
 drivers/gpio/gpio-pxa.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
drivers/gpio/gpio-pxa.c +15 -2
index b4fb8de..2fdb04b 100644
@@ -41,9 +41,12 @@
  * BANK 4 - 0x0104  0x0110  0x011C  0x0128  0x0134  0x0140  0x014C
  * BANK 5 - 0x0108  0x0114  0x0120  0x012C  0x0138  0x0144  0x0150
  *
+ * BANK 6 - 0x0200  0x020C  0x0218  0x0224  0x0230  0x023C  0x0248
+ *
  * NOTE:
  *   BANK 3 is only available on PXA27x and later processors.
- *   BANK 4 and 5 are only available on PXA935
+ *   BANK 4 and 5 are only available on PXA935, PXA1928
+ *   BANK 6 is only available on PXA1928
  */
 
 #define GPLR_OFFSET	0x00
@@ -56,7 +59,8 @@
 #define GAFR_OFFSET	0x54
 #define ED_MASK_OFFSET	0x9C	/* GPIO edge detection for AP side */
 
-#define BANK_OFF(n)	(((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2))
+#define BANK_OFF(n)	(((n) < 3) ? (n) << 2 : ((n) > 5 ? 0x200 : 0x100)	\
+			+ (((n) % 3) << 2))
 
 int pxa_last_gpio;
 static int irq_base;
@@ -92,6 +96,7 @@ enum pxa_gpio_type {
 	PXA93X_GPIO,
 	MMP_GPIO = 0x10,
 	MMP2_GPIO,
+	PXA1928_GPIO,
 };
 
 struct pxa_gpio_id {
@@ -139,6 +144,11 @@ static struct pxa_gpio_id mmp2_id = {
 	.gpio_nums	= 192,
 };
 
+static struct pxa_gpio_id pxa1928_id = {
+	.type		= PXA1928_GPIO,
+	.gpio_nums	= 224,
+};
+
 #define for_each_gpio_chip(i, c)			\
 	for (i = 0, c = &pxa_gpio_chips[0]; i <= pxa_last_gpio; i += 32, c++)
 
@@ -486,6 +496,7 @@ static int pxa_gpio_nums(struct platform_device *pdev)
 	case PXA93X_GPIO:
 	case MMP_GPIO:
 	case MMP2_GPIO:
+	case PXA1928_GPIO:
 		gpio_type = pxa_id->type;
 		count = pxa_id->gpio_nums - 1;
 		break;
@@ -505,6 +516,7 @@ static const struct of_device_id pxa_gpio_dt_ids[] = {
 	{ .compatible = "marvell,pxa93x-gpio",	.data = &pxa93x_id, },
 	{ .compatible = "marvell,mmp-gpio",	.data = &mmp_id, },
 	{ .compatible = "marvell,mmp2-gpio",	.data = &mmp2_id, },
+	{ .compatible = "marvell,pxa1928-gpio",	.data = &pxa1928_id, },
 	{}
 };
 
@@ -666,6 +678,7 @@ static const struct platform_device_id gpio_id_table[] = {
 	{ "pxa93x-gpio",	(unsigned long)&pxa93x_id },
 	{ "mmp-gpio",		(unsigned long)&mmp_id },
 	{ "mmp2-gpio",		(unsigned long)&mmp2_id },
+	{ "pxa1928-gpio",	(unsigned long)&pxa1928_id },
 	{ },
 };
 
Signature · 1 line
2.1.0
#6 lore raw

Re: [PATCH 3/3] gpio: pxa: add PXA1928 gpio type support

Quoted 9 lines · Rob Herring

Add support for PXA1928 GPIOs. The PXA1928 adds a 6th bank from previous generations.

[robh: ported to 3.19 from vendor kernel]
Cc Linus Walleij <[email protected]>
Cc Alexandre Courbot <[email protected]>

Patch applied...

drivers/gpio/gpio-pxa.c line 63

Quoted 3 lines
drivers/gpio/gpio-pxa.c +2 -1
-#define BANK_OFF(n)    (((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2))
+#define BANK_OFF(n)    (((n) < 3) ? (n) << 2 : ((n) > 5 ? 0x200 : 0x100)       \
+                       + (((n) % 3) << 2))

While this is a bit convoluted.

Someone care to send a patch converting it to something like a parseable static inline?

Yours,
Linus Walleij

author maintainer
#7 lore raw

Re: [PATCH 3/3] gpio: pxa: add PXA1928 gpio type support

Quoted 14 lines · Linus Walleij
Quoted 9 lines · Rob Herring

Add support for PXA1928 GPIOs. The PXA1928 adds a 6th bank from previous generations.

[robh: ported to 3.19 from vendor kernel]
Cc Linus Walleij <[email protected]>
Cc Alexandre Courbot <[email protected]>

Patch applied...

Quoted 8 lines

drivers/gpio/gpio-pxa.c line 63

Quoted 3 lines
drivers/gpio/gpio-pxa.c +2 -1
-#define BANK_OFF(n)    (((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2))
+#define BANK_OFF(n)    (((n) < 3) ? (n) << 2 : ((n) > 5 ? 0x200 : 0x100)       \
+                       + (((n) % 3) << 2))

While this is a bit convoluted.

Someone care to send a patch converting it to something like a parseable static inline?

I should have looked more closely than just taking the vendor code. This was needlessly convoluted before and this just added on to it. It can be simplified down to this:

#define BANK_OFF(n) (((n) / 3) << 8) + (((n) % 3) << 2)

I'll send a fix unless you want to fix up this patch.

Rob

#8 lore raw

Re: [PATCH 3/3] gpio: pxa: add PXA1928 gpio type support

Quoted 24 lines · Rob Herring
Quoted 14 lines · Linus Walleij
Quoted 9 lines · Rob Herring

Add support for PXA1928 GPIOs. The PXA1928 adds a 6th bank from previous generations.

[robh: ported to 3.19 from vendor kernel]
Cc Linus Walleij <[email protected]>
Cc Alexandre Courbot <[email protected]>

Patch applied...

Quoted 8 lines

drivers/gpio/gpio-pxa.c line 63

Quoted 3 lines
drivers/gpio/gpio-pxa.c +2 -1
-#define BANK_OFF(n)    (((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2))
+#define BANK_OFF(n)    (((n) < 3) ? (n) << 2 : ((n) > 5 ? 0x200 : 0x100)       \
+                       + (((n) % 3) << 2))

While this is a bit convoluted.

Someone care to send a patch converting it to something like a parseable static inline?

Quoted 7 lines

I should have looked more closely than just taking the vendor code. This was needlessly convoluted before and this just added on to it. It can be simplified down to this:

#define BANK_OFF(n) (((n) / 3) << 8) + (((n) % 3) << 2)

I'll send a fix unless you want to fix up this patch.

I never saw a fixup patch, so if you have time... please tend to it.

Yours,
Linus Walleij