Commit 0ca7231f authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

ARM: pxa: mainstone-wm97xx: use gpio lookup table



This driver hardcodes gpio numbers without a header file.
Use lookup tables instead.

Cc: Marek Vasut <marek.vasut@gmail.com>
Acked-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Acked-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Cc: linux-input@vger.kernel.org
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent f1131a46
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -548,6 +548,14 @@ static struct gpiod_lookup_table mainstone_pcmcia_gpio_table = {
	},
};

static struct gpiod_lookup_table mainstone_wm97xx_gpio_table = {
	.dev_id = "wm97xx-touch",
	.table = {
		GPIO_LOOKUP("gpio-pxa", 4, "touch", GPIO_ACTIVE_HIGH),
		{ },
	},
};

static void __init mainstone_init(void)
{
	int SW7 = 0;  /* FIXME: get from SCR (Mst doc section 3.2.1.1) */
@@ -562,6 +570,7 @@ static void __init mainstone_init(void)
		      "mst-pcmcia1", MST_PCMCIA_INPUTS, 0, NULL,
		      NULL, mst_pcmcia1_irqs);
	gpiod_add_lookup_table(&mainstone_pcmcia_gpio_table);
	gpiod_add_lookup_table(&mainstone_wm97xx_gpio_table);

	pxa_set_ffuart_info(NULL);
	pxa_set_btuart_info(NULL);
+9 −0
Original line number Diff line number Diff line
@@ -347,6 +347,14 @@ static struct gpiod_lookup_table palmld_mci_gpio_table = {
	},
};

static struct gpiod_lookup_table palmld_wm97xx_touch_gpio_table = {
	.dev_id = "wm97xx-touch",
	.table = {
		GPIO_LOOKUP("gpio-pxa", 27, "touch", GPIO_ACTIVE_HIGH),
		{ },
	},
};

static void __init palmld_init(void)
{
	pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config));
@@ -355,6 +363,7 @@ static void __init palmld_init(void)
	pxa_set_stuart_info(NULL);

	palm27x_mmc_init(&palmld_mci_gpio_table);
	gpiod_add_lookup_table(&palmld_wm97xx_touch_gpio_table);
	palm27x_pm_init(PALMLD_STR_BASE);
	palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
	palm27x_irda_init(GPIO_NR_PALMLD_IR_DISABLE);
+9 −0
Original line number Diff line number Diff line
@@ -190,6 +190,14 @@ static struct gpiod_lookup_table palmt5_mci_gpio_table = {
	},
};

static struct gpiod_lookup_table palmt5_wm97xx_touch_gpio_table = {
	.dev_id = "wm97xx-touch",
	.table = {
		GPIO_LOOKUP("gpio-pxa", 27, "touch", GPIO_ACTIVE_HIGH),
		{ },
	},
};

static void __init palmt5_init(void)
{
	pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
@@ -198,6 +206,7 @@ static void __init palmt5_init(void)
	pxa_set_stuart_info(NULL);

	palm27x_mmc_init(&palmt5_mci_gpio_table);
	gpiod_add_lookup_table(&palmt5_wm97xx_touch_gpio_table);
	palm27x_pm_init(PALMT5_STR_BASE);
	palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
	palm27x_udc_init(GPIO_NR_PALMT5_USB_DETECT_N,
+9 −0
Original line number Diff line number Diff line
@@ -345,6 +345,14 @@ static struct gpiod_lookup_table palmtx_mci_gpio_table = {
	},
};

static struct gpiod_lookup_table palmtx_wm97xx_touch_gpio_table = {
	.dev_id = "wm97xx-touch",
	.table = {
		GPIO_LOOKUP("gpio-pxa", 27, "touch", GPIO_ACTIVE_HIGH),
		{ },
	},
};

static void __init palmtx_init(void)
{
	pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
@@ -353,6 +361,7 @@ static void __init palmtx_init(void)
	pxa_set_stuart_info(NULL);

	palm27x_mmc_init(&palmtx_mci_gpio_table);
	gpiod_add_lookup_table(&palmtx_wm97xx_touch_gpio_table);
	palm27x_pm_init(PALMTX_STR_BASE);
	palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
	palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
+14 −21
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/wm97xx.h>
@@ -58,7 +59,7 @@ static const struct continuous cinfo[] = {
/* continuous speed index */
static int sp_idx;
static u16 last, tries;
static int irq;
static struct gpio_desc *gpiod_irq;

/*
 * Pen sampling frequency (Hz) in continuous mode.
@@ -194,28 +195,21 @@ static int wm97xx_acc_startup(struct wm97xx *wm)
	/* IRQ driven touchscreen is used on Palm hardware */
	if (machine_is_palmt5() || machine_is_palmtx() || machine_is_palmld()) {
		pen_int = 1;
		irq = 27;
		/* There is some obscure mutant of WM9712 interbred with WM9713
		 * used on Palm HW */
		wm->variant = WM97xx_WM1613;
	} else if (machine_is_mainstone() && pen_int)
		irq = 4;

	if (irq) {
		ret = gpio_request(irq, "Touchscreen IRQ");
		if (ret)
			goto out;

		ret = gpio_direction_input(irq);
		if (ret) {
			gpio_free(irq);
			goto out;
	}

		wm->pen_irq = gpio_to_irq(irq);
		irq_set_irq_type(wm->pen_irq, IRQ_TYPE_EDGE_BOTH);
	} else /* pen irq not supported */
	if (pen_int) {
		gpiod_irq = gpiod_get(wm->dev, "touch", GPIOD_IN);
		if (IS_ERR(gpiod_irq))
			pen_int = 0;
	}

	if (pen_int) {
		wm->pen_irq = gpiod_to_irq(gpiod_irq);
		irq_set_irq_type(wm->pen_irq, IRQ_TYPE_EDGE_BOTH);
	}

	/* codec specific irq config */
	if (pen_int) {
@@ -242,7 +236,6 @@ static int wm97xx_acc_startup(struct wm97xx *wm)
		}
	}

out:
	return ret;
}

@@ -250,8 +243,8 @@ static void wm97xx_acc_shutdown(struct wm97xx *wm)
{
	/* codec specific deconfig */
	if (pen_int) {
		if (irq)
			gpio_free(irq);
		if (gpiod_irq)
			gpiod_put(gpiod_irq);
		wm->pen_irq = 0;
	}
}