#include <linux/kernel.h>
 #include <linux/tty.h>
 #include <linux/delay.h>
+#include <linux/gpio/machine.h>
 #include <linux/platform_data/sa11x0-serial.h>
 #include <linux/platform_device.h>
 #include <linux/ioport.h>
        .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 = {
        .name           = "jornada_ts",
        .id             = -1,
                GPSR = GPIO_GPIO20;     /* restart gpio20 */
                udelay(20);             /* give it some time to restart */
 
+               gpiod_add_lookup_table(&jornada_ts_gpiod_table);
+
                ret = platform_add_devices(devices, ARRAY_SIZE(devices));
        }
 
 
  * HP Jornada 710/720/729 Touchscreen Driver
  */
 
+#include <linux/gpio/consumer.h>
 #include <linux/platform_device.h>
 #include <linux/input.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
 #include <linux/io.h>
 
-#include <mach/hardware.h>
 #include <mach/jornada720.h>
-#include <mach/irqs.h>
 
 MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>");
 MODULE_DESCRIPTION("HP Jornada 710/720/728 touchscreen driver");
 
 struct jornada_ts {
        struct input_dev *dev;
+       struct gpio_desc *gpio;
        int x_data[4];          /* X sample values */
        int y_data[4];          /* Y sample values */
 };
        struct input_dev *input = jornada_ts->dev;
        int x, y;
 
-       /* If GPIO_GPIO9 is set to high then report pen up */
-       if (GPLR & GPIO_GPIO(9)) {
+       /* If gpio is high then report pen up */
+       if (gpiod_get_value(jornada_ts->gpio)) {
                input_report_key(input, BTN_TOUCH, 0);
                input_sync(input);
        } else {
 {
        struct jornada_ts *jornada_ts;
        struct input_dev *input_dev;
-       int error;
+       int error, irq;
 
        jornada_ts = devm_kzalloc(&pdev->dev, sizeof(*jornada_ts), GFP_KERNEL);
        if (!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;
 
        input_dev->name = "HP Jornada 7xx Touchscreen";
        input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0);
        input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0);
 
-       error = devm_request_irq(&pdev->dev, IRQ_GPIO9,
-                                jornada720_ts_interrupt,
+       error = devm_request_irq(&pdev->dev, irq, jornada720_ts_interrupt,
                                 IRQF_TRIGGER_RISING,
                                 "HP7XX Touchscreen driver", pdev);
        if (error) {