drm/radeon/kms: also check for edid in lvds detect
authorAlex Deucher <alexdeucher@gmail.com>
Fri, 9 Oct 2009 22:41:19 +0000 (18:41 -0400)
committerDave Airlie <airlied@redhat.com>
Mon, 12 Oct 2009 03:42:50 +0000 (13:42 +1000)
In case the system has bad native mode info but
valid edid.

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

index da3a049e364032964616e886808c12c188b14e8d..17d5659cff03fd061fba580bc3c25e9616aaa3c2 100644 (file)
@@ -398,8 +398,10 @@ 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_disconnected;
+       struct radeon_connector *radeon_connector = to_radeon_connector(connector);
        struct drm_encoder *encoder = radeon_best_single_encoder(connector);
+       enum drm_connector_status ret = connector_status_disconnected;
+       bool dret;
 
        if (encoder) {
                struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
@@ -410,6 +412,15 @@ static enum drm_connector_status radeon_lvds_detect(struct drm_connector *connec
                        ret = connector_status_connected;
 
        }
+
+       /* check for edid as well */
+       if (radeon_connector->ddc_bus) {
+               radeon_i2c_do_lock(radeon_connector, 1);
+               dret = radeon_ddc_probe(radeon_connector);
+               radeon_i2c_do_lock(radeon_connector, 0);
+               if (dret)
+                       ret = connector_status_connected;
+       }
        /* check acpi lid status ??? */
 
        radeon_connector_update_scratch_regs(connector, ret);