}
 }
 
+static struct gpiod_lookup_table corgi_lcdcon_gpio_table = {
+       .dev_id = "spi1.1",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", CORGI_GPIO_BACKLIGHT_CONT,
+                           "BL_CONT", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
 static struct corgi_lcd_platform_data corgi_lcdcon_info = {
        .init_mode              = CORGI_LCD_MODE_VGA,
        .max_intensity          = 0x2f,
        .default_intensity      = 0x1f,
        .limit_mask             = 0x0b,
-       .gpio_backlight_cont    = CORGI_GPIO_BACKLIGHT_CONT,
-       .gpio_backlight_on      = -1,
        .kick_battery           = corgi_bl_kick_battery,
 };
 
 static void __init corgi_init_spi(void)
 {
        pxa2xx_set_spi_info(1, &corgi_spi_info);
+       gpiod_add_lookup_table(&corgi_lcdcon_gpio_table);
        spi_register_board_info(ARRAY_AND_SIZE(corgi_spi_devices));
 }
 #else
 
        }
 }
 
+static struct gpiod_lookup_table spitz_lcdcon_gpio_table = {
+       .dev_id = "spi2.1",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", SPITZ_GPIO_BACKLIGHT_CONT,
+                           "BL_CONT", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", SPITZ_GPIO_BACKLIGHT_ON,
+                           "BL_ON", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
+static struct gpiod_lookup_table akita_lcdcon_gpio_table = {
+       .dev_id = "spi2.1",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", AKITA_GPIO_BACKLIGHT_CONT,
+                           "BL_CONT", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", AKITA_GPIO_BACKLIGHT_ON,
+                           "BL_ON", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
 static struct corgi_lcd_platform_data spitz_lcdcon_info = {
        .init_mode              = CORGI_LCD_MODE_VGA,
        .max_intensity          = 0x2f,
        .default_intensity      = 0x1f,
        .limit_mask             = 0x0b,
-       .gpio_backlight_cont    = SPITZ_GPIO_BACKLIGHT_CONT,
-       .gpio_backlight_on      = SPITZ_GPIO_BACKLIGHT_ON,
        .kick_battery           = spitz_bl_kick_battery,
 };
 
 
 static void __init spitz_spi_init(void)
 {
-       struct corgi_lcd_platform_data *lcd_data = &spitz_lcdcon_info;
-
-       if (machine_is_akita()) {
-               lcd_data->gpio_backlight_cont = AKITA_GPIO_BACKLIGHT_CONT;
-               lcd_data->gpio_backlight_on = AKITA_GPIO_BACKLIGHT_ON;
-       }
+       if (machine_is_akita())
+               gpiod_add_lookup_table(&akita_lcdcon_gpio_table);
+       else
+               gpiod_add_lookup_table(&spitz_lcdcon_gpio_table);
 
        pxa2xx_set_spi_info(2, &spitz_spi_info);
        spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices));
 
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/fb.h>
 #include <linux/lcd.h>
 #include <linux/spi/spi.h>
        int     mode;
        char    buf[2];
 
-       int     gpio_backlight_on;
-       int     gpio_backlight_cont;
-       int     gpio_backlight_cont_inverted;
+       struct gpio_desc *backlight_on;
+       struct gpio_desc *backlight_cont;
 
        void (*kick_battery)(void);
 };
        corgi_ssp_lcdtg_send(lcd, DUTYCTRL_ADRS, intensity);
 
        /* Bit 5 via GPIO_BACKLIGHT_CONT */
-       cont = !!(intensity & 0x20) ^ lcd->gpio_backlight_cont_inverted;
+       cont = !!(intensity & 0x20);
 
-       if (gpio_is_valid(lcd->gpio_backlight_cont))
-               gpio_set_value_cansleep(lcd->gpio_backlight_cont, cont);
+       if (lcd->backlight_cont)
+               gpiod_set_value_cansleep(lcd->backlight_cont, cont);
 
-       if (gpio_is_valid(lcd->gpio_backlight_on))
-               gpio_set_value_cansleep(lcd->gpio_backlight_on, intensity);
+       if (lcd->backlight_on)
+               gpiod_set_value_cansleep(lcd->backlight_on, intensity);
 
        if (lcd->kick_battery)
                lcd->kick_battery();
                                struct corgi_lcd_platform_data *pdata)
 {
        struct spi_device *spi = lcd->spi_dev;
-       int err;
-
-       lcd->gpio_backlight_on = -1;
-       lcd->gpio_backlight_cont = -1;
-
-       if (gpio_is_valid(pdata->gpio_backlight_on)) {
-               err = devm_gpio_request(&spi->dev, pdata->gpio_backlight_on,
-                                       "BL_ON");
-               if (err) {
-                       dev_err(&spi->dev,
-                               "failed to request GPIO%d for backlight_on\n",
-                               pdata->gpio_backlight_on);
-                       return err;
-               }
-
-               lcd->gpio_backlight_on = pdata->gpio_backlight_on;
-               gpio_direction_output(lcd->gpio_backlight_on, 0);
-       }
 
-       if (gpio_is_valid(pdata->gpio_backlight_cont)) {
-               err = devm_gpio_request(&spi->dev, pdata->gpio_backlight_cont,
-                                       "BL_CONT");
-               if (err) {
-                       dev_err(&spi->dev,
-                               "failed to request GPIO%d for backlight_cont\n",
-                               pdata->gpio_backlight_cont);
-                       return err;
-               }
-
-               lcd->gpio_backlight_cont = pdata->gpio_backlight_cont;
-
-               /* spitz and akita use both GPIOs for backlight, and
-                * have inverted polarity of GPIO_BACKLIGHT_CONT
-                */
-               if (gpio_is_valid(lcd->gpio_backlight_on)) {
-                       lcd->gpio_backlight_cont_inverted = 1;
-                       gpio_direction_output(lcd->gpio_backlight_cont, 1);
-               } else {
-                       lcd->gpio_backlight_cont_inverted = 0;
-                       gpio_direction_output(lcd->gpio_backlight_cont, 0);
-               }
-       }
+       lcd->backlight_on = devm_gpiod_get_optional(&spi->dev,
+                                                   "BL_ON", GPIOD_OUT_LOW);
+       if (IS_ERR(lcd->backlight_on))
+               return PTR_ERR(lcd->backlight_on);
+
+       lcd->backlight_cont = devm_gpiod_get_optional(&spi->dev, "BL_CONT",
+                                                     GPIOD_OUT_LOW);
+       if (IS_ERR(lcd->backlight_cont))
+               return PTR_ERR(lcd->backlight_cont);
+
        return 0;
 }