#include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
+#include <linux/gpio.h>
 #include <video/omapdss.h>
 
 #include <video/omap-panel-data.h>
 
 static int generic_dpi_panel_power_on(struct omap_dss_device *dssdev)
 {
-       int r;
+       int r, i;
        struct panel_generic_dpi_data *panel_data = get_panel_data(dssdev);
        struct panel_drv_data *drv_data = dev_get_drvdata(&dssdev->dev);
        struct panel_config *panel_config = drv_data->panel_config;
                        goto err1;
        }
 
+       for (i = 0; i < panel_data->num_gpios; ++i) {
+               gpio_set_value_cansleep(panel_data->gpios[i],
+                               panel_data->gpio_invert[i] ? 0 : 1);
+       }
+
        return 0;
 err1:
        omapdss_dpi_display_disable(dssdev);
        struct panel_generic_dpi_data *panel_data = get_panel_data(dssdev);
        struct panel_drv_data *drv_data = dev_get_drvdata(&dssdev->dev);
        struct panel_config *panel_config = drv_data->panel_config;
+       int i;
 
        if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
                return;
 
+       for (i = panel_data->num_gpios - 1; i >= 0; --i) {
+               gpio_set_value_cansleep(panel_data->gpios[i],
+                               panel_data->gpio_invert[i] ? 1 : 0);
+       }
+
        if (panel_data->platform_disable)
                panel_data->platform_disable(dssdev);
 
        struct panel_generic_dpi_data *panel_data = get_panel_data(dssdev);
        struct panel_config *panel_config = NULL;
        struct panel_drv_data *drv_data = NULL;
-       int i;
+       int i, r;
 
        dev_dbg(&dssdev->dev, "probe\n");
 
        if (!panel_config)
                return -EINVAL;
 
+       for (i = 0; i < panel_data->num_gpios; ++i) {
+               r = devm_gpio_request_one(&dssdev->dev, panel_data->gpios[i],
+                               panel_data->gpio_invert[i] ?
+                               GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
+                               "panel gpio");
+               if (r)
+                       return r;
+       }
+
        dssdev->panel.timings = panel_config->timings;
 
        drv_data = devm_kzalloc(&dssdev->dev, sizeof(*drv_data), GFP_KERNEL);