Input: jornada720_ts - get rid of mach/irqs.h and mach/hardware.h includes

Switch the jornada720 touchscreen driver to obtain its gpio from
the platform device via gpiolib and derive the interrupt from the
GPIO, rather than via a hard-coded interrupt number obtained from
the mach/irqs.h and mach/hardware.h headers.

Tested-by: Adam Wysocki <armlinux@chmurka.net>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Russell King 2016-09-07 19:22:01 -07:00 коммит произвёл Dmitry Torokhov
Родитель 72f6d0b9ea
Коммит 3521a0f05d
2 изменённых файлов: 24 добавлений и 7 удалений

Просмотреть файл

@ -17,6 +17,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio/machine.h>
#include <linux/platform_data/sa11x0-serial.h> #include <linux/platform_data/sa11x0-serial.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/ioport.h> #include <linux/ioport.h>
@ -228,6 +229,13 @@ static struct platform_device jornada_kbd_device = {
.resource = jornada_kbd_resources, .resource = jornada_kbd_resources,
}; };
static struct gpiod_lookup_table jornada_ts_gpiod_table = {
.dev_id = "jornada_ts",
.table = {
GPIO_LOOKUP("gpio", 9, "penup", GPIO_ACTIVE_HIGH),
},
};
static struct platform_device jornada_ts_device = { static struct platform_device jornada_ts_device = {
.name = "jornada_ts", .name = "jornada_ts",
.id = -1, .id = -1,
@ -256,6 +264,8 @@ static int __init jornada720_init(void)
GPSR = GPIO_GPIO20; /* restart gpio20 */ GPSR = GPIO_GPIO20; /* restart gpio20 */
udelay(20); /* give it some time to restart */ udelay(20); /* give it some time to restart */
gpiod_add_lookup_table(&jornada_ts_gpiod_table);
ret = platform_add_devices(devices, ARRAY_SIZE(devices)); ret = platform_add_devices(devices, ARRAY_SIZE(devices));
} }

Просмотреть файл

@ -13,6 +13,7 @@
* HP Jornada 710/720/729 Touchscreen Driver * HP Jornada 710/720/729 Touchscreen Driver
*/ */
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
@ -20,9 +21,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/io.h> #include <linux/io.h>
#include <mach/hardware.h>
#include <mach/jornada720.h> #include <mach/jornada720.h>
#include <mach/irqs.h>
MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>");
MODULE_DESCRIPTION("HP Jornada 710/720/728 touchscreen driver"); MODULE_DESCRIPTION("HP Jornada 710/720/728 touchscreen driver");
@ -30,6 +29,7 @@ MODULE_LICENSE("GPL v2");
struct jornada_ts { struct jornada_ts {
struct input_dev *dev; struct input_dev *dev;
struct gpio_desc *gpio;
int x_data[4]; /* X sample values */ int x_data[4]; /* X sample values */
int y_data[4]; /* Y sample values */ int y_data[4]; /* Y sample values */
}; };
@ -71,8 +71,8 @@ static irqreturn_t jornada720_ts_interrupt(int irq, void *dev_id)
struct input_dev *input = jornada_ts->dev; struct input_dev *input = jornada_ts->dev;
int x, y; int x, y;
/* If GPIO_GPIO9 is set to high then report pen up */ /* If gpio is high then report pen up */
if (GPLR & GPIO_GPIO(9)) { if (gpiod_get_value(jornada_ts->gpio)) {
input_report_key(input, BTN_TOUCH, 0); input_report_key(input, BTN_TOUCH, 0);
input_sync(input); input_sync(input);
} else { } else {
@ -101,7 +101,7 @@ static int jornada720_ts_probe(struct platform_device *pdev)
{ {
struct jornada_ts *jornada_ts; struct jornada_ts *jornada_ts;
struct input_dev *input_dev; struct input_dev *input_dev;
int error; int error, irq;
jornada_ts = devm_kzalloc(&pdev->dev, sizeof(*jornada_ts), GFP_KERNEL); jornada_ts = devm_kzalloc(&pdev->dev, sizeof(*jornada_ts), GFP_KERNEL);
if (!jornada_ts) if (!jornada_ts)
@ -113,6 +113,14 @@ static int jornada720_ts_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, jornada_ts); platform_set_drvdata(pdev, jornada_ts);
jornada_ts->gpio = devm_gpiod_get(&pdev->dev, "penup", GPIOD_IN);
if (IS_ERR(jornada_ts->gpio))
return PTR_ERR(jornada_ts->gpio);
irq = gpiod_to_irq(jornada_ts->gpio);
if (irq <= 0)
return irq < 0 ? irq : -EINVAL;
jornada_ts->dev = input_dev; jornada_ts->dev = input_dev;
input_dev->name = "HP Jornada 7xx Touchscreen"; input_dev->name = "HP Jornada 7xx Touchscreen";
@ -125,8 +133,7 @@ static int jornada720_ts_probe(struct platform_device *pdev)
input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0); input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0);
input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0); input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0);
error = devm_request_irq(&pdev->dev, IRQ_GPIO9, error = devm_request_irq(&pdev->dev, irq, jornada720_ts_interrupt,
jornada720_ts_interrupt,
IRQF_TRIGGER_RISING, IRQF_TRIGGER_RISING,
"HP7XX Touchscreen driver", pdev); "HP7XX Touchscreen driver", pdev);
if (error) { if (error) {