Skip to contentSkip to conversation

ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register

PATCH New Russell King 4 participants 6 messages Dec 11, 2017 – Dec 17, 2017

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register

Add a gpio driver for the lubbock miscellaneous write IO register so we can take advantage of subsystems modelled around gpiolib, rather than having to provide platform specific callbacks.

---
 arch/arm/mach-pxa/Kconfig   |  1 +
 arch/arm/mach-pxa/lubbock.c | 24 ++++++++++++++++--------
 2 files changed, 17 insertions(+), 8 deletions(-)
arch/arm/mach-pxa/Kconfig +1 -0
index ce7d97babb0f..a68b34183107 100644
@@ -40,6 +40,7 @@ config MACH_PXA3XX_DT
 
 config ARCH_LUBBOCK
 	bool "Intel DBPXA250 Development Platform (aka Lubbock)"
+	select GPIO_REG
 	select PXA25x
 	select SA1111
 
arch/arm/mach-pxa/lubbock.c +16 -8
index df45682e99a5..fe2ef9b78602 100644
@@ -13,6 +13,7 @@
  */
 #include <linux/clkdev.h>
 #include <linux/gpio.h>
+#include <linux/gpio/gpio-reg.h>
 #include <linux/gpio/machine.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -110,20 +111,18 @@ static unsigned long lubbock_pin_config[] __initdata = {
 };
 
 #define LUB_HEXLED		__LUB_REG(LUBBOCK_FPGA_PHYS + 0x010)
-#define LUB_MISC_WR		__LUB_REG(LUBBOCK_FPGA_PHYS + 0x080)
 
 void lubbock_set_hexled(uint32_t value)
 {
 	LUB_HEXLED = value;
 }
 
+static struct gpio_chip *lubbock_misc_wr_gc;
+
 void lubbock_set_misc_wr(unsigned int mask, unsigned int set)
 {
-	unsigned long flags;
-
-	local_irq_save(flags);
-	LUB_MISC_WR = (LUB_MISC_WR & ~mask) | (set & mask);
-	local_irq_restore(flags);
+	unsigned long m = mask, v = set;
+	lubbock_misc_wr_gc->set_multiple(lubbock_misc_wr_gc, &m, &v);
 }
 EXPORT_SYMBOL(lubbock_set_misc_wr);
 
@@ -452,9 +451,9 @@ static void lubbock_irda_transceiver_mode(struct device *dev, int mode)
 
 	local_irq_save(flags);
 	if (mode & IR_SIRMODE) {
-		LUB_MISC_WR &= ~(1 << 4);
+		lubbock_set_misc_wr(BIT(4), 0);
 	} else if (mode & IR_FIRMODE) {
-		LUB_MISC_WR |= 1 << 4;
+		lubbock_set_misc_wr(BIT(4), BIT(4));
 	}
 	pxa2xx_transceiver_mode(dev, mode);
 	local_irq_restore(flags);
@@ -472,6 +471,15 @@ static void __init lubbock_init(void)
 
 	pxa2xx_mfp_config(ARRAY_AND_SIZE(lubbock_pin_config));
 
+	lubbock_misc_wr_gc = gpio_reg_init(NULL, (void *)&LUB_MISC_WR,
+					   -1, 16, "lubbock", 0, LUB_MISC_WR,
+					   NULL, NULL, NULL);
+	if (IS_ERR(lubbock_misc_wr_gc)) {
+		pr_err("Lubbock: unable to register lubbock GPIOs: %ld\n",
+		       PTR_ERR(lubbock_misc_wr_gc));
+		lubbock_misc_wr_gc = NULL;
+	}
+
 	pxa_set_ffuart_info(NULL);
 	pxa_set_btuart_info(NULL);
 	pxa_set_stuart_info(NULL);
Signature · 1 line
2.7.4
maintainer
#1 lore raw

PATCH 1/1 ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register

Quoted 5 lines · Russell King

Add a gpio driver for the lubbock miscellaneous write IO register so we can take advantage of subsystems modelled around gpiolib, rather than having to provide platform specific callbacks.

Hi Russell and Linux,

It looks certainly good to me. It's unfortunate in the current status of linux-next I have, gpio-reg.c seems broken (that one is for Linus in [1] and [2]), and therefore I can't test it live.

Nonetheless, do you want me to carry it through the pxa tree or do you want to keep it through your tree ?

Cheers.

Signature · 17 lines
Robert

[1] For Linus if he wasn't notified before :
---8>---
  CC      drivers/gpio/gpio-reg.o
drivers/gpio/gpio-reg.c: In function 'gpio_reg_to_irq':
drivers/gpio/gpio-reg.c:106:19: error: 'struct gpio_reg' has no member named 'irq'
  if (irq >= 0 && r->irq.domain)
                   ^
drivers/gpio/gpio-reg.c:107:27: error: 'struct gpio_reg' has no member named 'irq'
   irq = irq_find_mapping(r->irq.domain, irq);
                           ^
make[2]: *** [drivers/gpio/gpio-reg.o] Erreur 1
---8>---

[2] For Linux, git commit of my linux-next tip
d20787938ddb ("Add linux-next specific files for 20171212")
#2 lore raw

PATCH 1/1 ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register

Quoted 6 lines · Robert Jarzmik
Quoted 4 lines · Russell King

Add a gpio driver for the lubbock miscellaneous write IO register so we can take advantage of subsystems modelled around gpiolib, rather than having to provide platform specific callbacks.

Quoted 7 lines
Quoted 1 line

Hi Russell and Linux,

It looks certainly good to me. It's unfortunate in the current status of linux-next I have, gpio-reg.c seems broken (that one is for Linus in [1] and [2]), and therefore I can't test it live.

OK I have applied a patch fixing it, sorry for not preparing the trees and pushing it out quicker :(

Quoted 2 lines

Nonetheless, do you want me to carry it through the pxa tree or do you want to keep it through your tree ?

By all means carry it in the PXA tree.

Yours,
Linus Walleij

#3 lore raw

PATCH 1/1 ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register

In reply to Robert Jarzmik
Quoted 6 lines · Robert Jarzmik
Quoted 4 lines · Russell King

Add a gpio driver for the lubbock miscellaneous write IO register so we can take advantage of subsystems modelled around gpiolib, rather than having to provide platform specific callbacks.

Quoted 7 lines
Quoted 1 line

Hi Russell and Linux,

It looks certainly good to me. It's unfortunate in the current status of linux-next I have, gpio-reg.c seems broken (that one is for Linus in [1] and [2]), and therefore I can't test it live.

It won't do much on its own without some patches to make use of the new GPIOs... but it will be used as the direct register write becomes a call to gpio-reg's ->set_multiple() method.

Further patches will be switching various bits over to using gpiod stuff for some sa11x0/pxa bits, and on some platforms completely eliminating the legacy "board control register" manipulations and hacks spread around the kernel tree.

Signature · 3 lines
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up
According to speedtest.net: 8.21Mbps down 510kbps up
maintainer Applied
#4 lore raw

PATCH 1/1 ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register

Quoted 11 lines · Russell King - ARM Linux
Quoted 10 lines · Robert Jarzmik
Quoted 5 lines · Russell King

Add a gpio driver for the lubbock miscellaneous write IO register so we can take advantage of subsystems modelled around gpiolib, rather than having to provide platform specific callbacks.

Hi Russell and Linux,

Quoted 7 lines
Quoted 3 lines

It looks certainly good to me. It's unfortunate in the current status of linux-next I have, gpio-reg.c seems broken (that one is for Linus in [1] and [2]), and therefore I can't test it live.

It won't do much on its own without some patches to make use of the new GPIOs... but it will be used as the direct register write becomes a call to gpio-reg's ->set_multiple() method.

Applied to pxa/for-next, thanks.

Cheers.

Signature · 1 line
Robert