drm/radeon/kms: make sure LVDS panel is valid in detect()
authorAlex Deucher <alexdeucher@gmail.com>
Thu, 8 Oct 2009 17:02:19 +0000 (13:02 -0400)
committerDave Airlie <airlied@redhat.com>
Mon, 12 Oct 2009 03:42:32 +0000 (13:42 +1000)
If the panel data is bogus this can lead to problems
later when the hardware trys to set the mode.  If the
data is invalid, report LVDS as disconnected.

Should fix fdo bug 24247.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon_connectors.c

index e376be47a4a0a67e54d2089b4947d562ac4e9fad..466f6010a2e40ded8331af6c4982bbc79c327249 100644 (file)
@@ -415,8 +415,20 @@ static int radeon_lvds_mode_valid(struct drm_connector *connector,
 
 static enum drm_connector_status radeon_lvds_detect(struct drm_connector *connector)
 {
-       enum drm_connector_status ret = connector_status_connected;
+       enum drm_connector_status ret = connector_status_disconnected;
+       struct drm_encoder *encoder = radeon_best_single_encoder(connector);
+
+       if (encoder) {
+               struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+               struct radeon_native_mode *native_mode = &radeon_encoder->native_mode;
+
+               /* check if panel is valid */
+               if (native_mode->panel_xres >= 320 && native_mode->panel_yres >= 240)
+                       ret = connector_status_connected;
+
+       }
        /* check acpi lid status ??? */
+
        radeon_connector_update_scratch_regs(connector, ret);
        return ret;
 }