diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_dvo.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_dvo.c | 49 | 
1 files changed, 9 insertions, 40 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c index 2eeb209afc64..5572e43026e4 100644 --- a/drivers/gpu/drm/i915/display/intel_dvo.c +++ b/drivers/gpu/drm/i915/display/intel_dvo.c @@ -226,7 +226,7 @@ intel_dvo_mode_valid(struct drm_connector *connector,  	struct intel_connector *intel_connector = to_intel_connector(connector);  	struct intel_dvo *intel_dvo = intel_attached_dvo(intel_connector);  	const struct drm_display_mode *fixed_mode = -		intel_connector->panel.fixed_mode; +		intel_panel_fixed_mode(intel_connector, mode);  	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;  	int target_clock = mode->clock; @@ -257,9 +257,9 @@ static int intel_dvo_compute_config(struct intel_encoder *encoder,  {  	struct intel_dvo *intel_dvo = enc_to_dvo(encoder);  	struct intel_connector *connector = to_intel_connector(conn_state->connector); -	const struct drm_display_mode *fixed_mode = -		intel_dvo->attached_connector->panel.fixed_mode;  	struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; +	const struct drm_display_mode *fixed_mode = +		intel_panel_fixed_mode(intel_dvo->attached_connector, adjusted_mode);  	/*  	 * If we have timings from the BIOS for the panel, put them in @@ -333,8 +333,6 @@ intel_dvo_detect(struct drm_connector *connector, bool force)  static int intel_dvo_get_modes(struct drm_connector *connector)  {  	struct drm_i915_private *dev_priv = to_i915(connector->dev); -	const struct drm_display_mode *fixed_mode = -		to_intel_connector(connector)->panel.fixed_mode;  	int num_modes;  	/* @@ -348,17 +346,7 @@ static int intel_dvo_get_modes(struct drm_connector *connector)  	if (num_modes)  		return num_modes; -	if (fixed_mode) { -		struct drm_display_mode *mode; - -		mode = drm_mode_duplicate(connector->dev, fixed_mode); -		if (mode) { -			drm_mode_probed_add(connector, mode); -			num_modes++; -		} -	} - -	return num_modes; +	return intel_panel_get_modes(to_intel_connector(connector));  }  static const struct drm_connector_funcs intel_dvo_connector_funcs = { @@ -390,27 +378,6 @@ static const struct drm_encoder_funcs intel_dvo_enc_funcs = {  	.destroy = intel_dvo_enc_destroy,  }; -/* - * Attempts to get a fixed panel timing for LVDS (currently only the i830). - * - * Other chips with DVO LVDS will need to extend this to deal with the LVDS - * chip being on DVOB/C and having multiple pipes. - */ -static struct drm_display_mode * -intel_dvo_get_current_mode(struct intel_encoder *encoder) -{ -	struct drm_display_mode *mode; - -	mode = intel_encoder_current_mode(encoder); -	if (mode) { -		DRM_DEBUG_KMS("using current (BIOS) mode: "); -		drm_mode_debug_printmodeline(mode); -		mode->type |= DRM_MODE_TYPE_PREFERRED; -	} - -	return mode; -} -  static enum port intel_dvo_port(i915_reg_t dvo_reg)  {  	if (i915_mmio_reg_equal(dvo_reg, DVOA)) @@ -561,9 +528,11 @@ void intel_dvo_init(struct drm_i915_private *dev_priv)  			 * headers, likely), so for now, just get the current  			 * mode being output through DVO.  			 */ -			intel_panel_init(&intel_connector->panel, -					 intel_dvo_get_current_mode(intel_encoder), -					 NULL); +			intel_panel_add_encoder_fixed_mode(intel_connector, +							   intel_encoder); + +			intel_panel_init(intel_connector); +  			intel_dvo->panel_wants_dither = true;  		}  |