diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_connectors.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 16 | 
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 5eece186e03..20161567dbf 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -208,6 +208,18 @@ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encode  		drm_mode_set_name(mode);  		DRM_DEBUG("Adding native panel mode %s\n", mode->name); +	} else if (native_mode->hdisplay != 0 && +		   native_mode->vdisplay != 0) { +		/* mac laptops without an edid */ +		/* Note that this is not necessarily the exact panel mode, +		 * but an approximation based on the cvt formula.  For these +		 * systems we should ideally read the mode info out of the +		 * registers or add a mode table, but this works and is much +		 * simpler. +		 */ +		mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false); +		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; +		DRM_DEBUG("Adding cvt approximation of native panel mode %s\n", mode->name);  	}  	return mode;  } @@ -1171,7 +1183,7 @@ radeon_add_atom_connector(struct drm_device *dev,  						      1);  			drm_connector_attach_property(&radeon_connector->base,  						      rdev->mode_info.tv_std_property, -						      1); +						      radeon_atombios_get_tv_info(rdev));  		}  		break;  	case DRM_MODE_CONNECTOR_LVDS: @@ -1315,7 +1327,7 @@ radeon_add_legacy_connector(struct drm_device *dev,  						      1);  			drm_connector_attach_property(&radeon_connector->base,  						      rdev->mode_info.tv_std_property, -						      1); +						      radeon_combios_get_tv_info(rdev));  		}  		break;  	case DRM_MODE_CONNECTOR_LVDS:  |