Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c666384 authored by Russell King's avatar Russell King Committed by Robert Jarzmik
Browse files

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.

Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
parent c6f8d31c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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

+16 −8
Original line number Diff line number Diff line
@@ -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);