[PATCH] omapfb: panel enable/disable reordering

Brian Swetland swetland at google.com
Mon Dec 5 07:49:05 CST 2005


[Imre Deak <imre.deak at nokia.com>]
> Actually there is no requirement on calling panel->enable() before
> omapfb_set_update_mode(), which enables the LCD DMA. It's even possible
> to enable / disable the panel while having the LCD DMA active.
> 
> So lets simply switch the order of the two calls in omapfb_probe and the
> suspend / resume functions. Please send a patch.

Sounds fine to me.

Here's such a patch.

Brian
-------------- next part --------------
diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c
index 2c4098d..0eefec5 100644
--- a/drivers/video/omap/omapfb_main.c
+++ b/drivers/video/omap/omapfb_main.c
@@ -349,9 +349,9 @@ static int omapfb_blank(int blank, struc
 	switch (blank) {
 	case VESA_NO_BLANKING:
 		if (fbdev->state == OMAPFB_SUSPENDED) {
-			fbdev->panel->enable();
 			if (fbdev->ctrl->resume)
 				fbdev->ctrl->resume();
+			fbdev->panel->enable();
 			fbdev->state = OMAPFB_ACTIVE;
 			if (fbdev->ctrl->get_update_mode() ==
 					OMAPFB_MANUAL_UPDATE)
@@ -360,9 +360,9 @@ static int omapfb_blank(int blank, struc
 		break;
 	case VESA_POWERDOWN:
 		if (fbdev->state == OMAPFB_ACTIVE) {
+			fbdev->panel->disable();
 			if (fbdev->ctrl->suspend)
 				fbdev->ctrl->suspend();
-			fbdev->panel->disable();
 			fbdev->state = OMAPFB_SUSPENDED;
 		}
 		break;
@@ -1108,11 +1108,12 @@ static void omapfb_free_resources(struct
 	switch (state) {
 	case OMAPFB_ACTIVE:
 		unregister_framebuffer(fbdev->fb_info);
-	case 6:
+	case 7:
 		omapfb_unregister_sysfs(fbdev);
-		omapfb_set_update_mode(fbdev, OMAPFB_UPDATE_DISABLED);
-	case 5:
+	case 6:
 		fbdev->panel->disable();
+	case 5:
+		omapfb_set_update_mode(fbdev, OMAPFB_UPDATE_DISABLED);
 	case 4:
 		fbinfo_cleanup(fbdev);
 	case 3:
@@ -1296,11 +1297,6 @@ static int omapfb_probe(struct platform_
 	omap_set_dma_priority(OMAP_DMA_PORT_EMIFF, 15);
 #endif
 
-	r = fbdev->panel->enable();
-	if (r)
-		goto cleanup;
-	init_state++;
-
 	r = ctrl_change_mode(fbdev);
 	if (r) {
 		pr_err("mode setting failed\n");
@@ -1311,6 +1307,12 @@ static int omapfb_probe(struct platform_
 
 	omapfb_set_update_mode(fbdev, manual_update ?
 				   OMAPFB_MANUAL_UPDATE : OMAPFB_AUTO_UPDATE);
+	init_state++;
+
+	r = fbdev->panel->enable();
+	if (r)
+		goto cleanup;
+	init_state++;
 
 	r = omapfb_register_sysfs(fbdev);
 	if (r)


More information about the Linux-omap-open-source mailing list