gma500: Prevent endless loop in panel power up sequence
authorAlan Cox <alan@linux.intel.com>
Mon, 21 May 2012 14:27:10 +0000 (15:27 +0100)
committerDave Airlie <airlied@redhat.com>
Tue, 22 May 2012 09:15:29 +0000 (10:15 +0100)
Some devices don't have a panel connected to LVDS and thus will never power up.
This patch checks the power sequence progress bits in PP_STATUS to prevent an
endless loop on such devices.

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/gma500/psb_lid.c

index 7ff8bb2..1d2ebb5 100644 (file)
@@ -40,10 +40,16 @@ static void psb_lid_timer_func(unsigned long data)
                REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) | POWER_TARGET_ON);
                do {
                        pp_status = REG_READ(PP_STATUS);
-               } while ((pp_status & PP_ON) == 0);
+               } while ((pp_status & PP_ON) == 0 &&
+                        (pp_status & PP_SEQUENCE_MASK) != 0);
 
-               /*FIXME: should be backlight level before*/
-               psb_intel_lvds_set_brightness(dev, 100);
+               if (REG_READ(PP_STATUS) & PP_ON) {
+                       /*FIXME: should be backlight level before*/
+                       psb_intel_lvds_set_brightness(dev, 100);
+               } else {
+                       DRM_DEBUG("LVDS panel never powered up");
+                       return;
+               }
        } else {
                psb_intel_lvds_set_brightness(dev, 0);