OMAP: DSS2: move enable/disable/suspend/resume
[linux-2.6-block.git] / drivers / video / omap2 / displays / panel-generic.c
index eb48d1afd8008437458bb3fe87e351b5ce785c42..c59e4baed8b2b7d780a67c24bd45ce50c25b4de7 100644 (file)
@@ -35,6 +35,35 @@ static struct omap_video_timings generic_panel_timings = {
        .vbp            = 7,
 };
 
+static int generic_panel_power_on(struct omap_dss_device *dssdev)
+{
+       int r;
+
+       r = omapdss_dpi_display_enable(dssdev);
+       if (r)
+               goto err0;
+
+       if (dssdev->platform_enable) {
+               r = dssdev->platform_enable(dssdev);
+               if (r)
+                       goto err1;
+       }
+
+       return 0;
+err1:
+       omapdss_dpi_display_disable(dssdev);
+err0:
+       return r;
+}
+
+static void generic_panel_power_off(struct omap_dss_device *dssdev)
+{
+       if (dssdev->platform_disable)
+               dssdev->platform_disable(dssdev);
+
+       omapdss_dpi_display_disable(dssdev);
+}
+
 static int generic_panel_probe(struct omap_dss_device *dssdev)
 {
        dssdev->panel.config = OMAP_DSS_LCD_TFT;
@@ -51,27 +80,40 @@ static int generic_panel_enable(struct omap_dss_device *dssdev)
 {
        int r = 0;
 
-       if (dssdev->platform_enable)
-               r = dssdev->platform_enable(dssdev);
+       r = generic_panel_power_on(dssdev);
+       if (r)
+               return r;
 
-       return r;
+       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
+
+       return 0;
 }
 
 static void generic_panel_disable(struct omap_dss_device *dssdev)
 {
-       if (dssdev->platform_disable)
-               dssdev->platform_disable(dssdev);
+       generic_panel_power_off(dssdev);
+
+       dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
 }
 
 static int generic_panel_suspend(struct omap_dss_device *dssdev)
 {
-       generic_panel_disable(dssdev);
+       generic_panel_power_off(dssdev);
+       dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
        return 0;
 }
 
 static int generic_panel_resume(struct omap_dss_device *dssdev)
 {
-       return generic_panel_enable(dssdev);
+       int r = 0;
+
+       r = generic_panel_power_on(dssdev);
+       if (r)
+               return r;
+
+       dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
+
+       return 0;
 }
 
 static struct omap_dss_driver generic_driver = {