diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_dvo.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_dvo.c | 24 | 
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c index 77419f8c05e9..2eeb209afc64 100644 --- a/drivers/gpu/drm/i915/display/intel_dvo.c +++ b/drivers/gpu/drm/i915/display/intel_dvo.c @@ -223,9 +223,10 @@ static enum drm_mode_status  intel_dvo_mode_valid(struct drm_connector *connector,  		     struct drm_display_mode *mode)  { -	struct intel_dvo *intel_dvo = intel_attached_dvo(to_intel_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 = -		to_intel_connector(connector)->panel.fixed_mode; +		intel_connector->panel.fixed_mode;  	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;  	int target_clock = mode->clock; @@ -235,10 +236,11 @@ intel_dvo_mode_valid(struct drm_connector *connector,  	/* XXX: Validate clock range */  	if (fixed_mode) { -		if (mode->hdisplay > fixed_mode->hdisplay) -			return MODE_PANEL; -		if (mode->vdisplay > fixed_mode->vdisplay) -			return MODE_PANEL; +		enum drm_mode_status status; + +		status = intel_panel_mode_valid(intel_connector, mode); +		if (status != MODE_OK) +			return status;  		target_clock = fixed_mode->clock;  	} @@ -254,6 +256,7 @@ static int intel_dvo_compute_config(struct intel_encoder *encoder,  				    struct drm_connector_state *conn_state)  {  	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; @@ -264,8 +267,13 @@ static int intel_dvo_compute_config(struct intel_encoder *encoder,  	 * with the panel scaling set up to source from the H/VDisplay  	 * of the original mode.  	 */ -	if (fixed_mode) -		intel_fixed_panel_mode(fixed_mode, adjusted_mode); +	if (fixed_mode) { +		int ret; + +		ret = intel_panel_compute_config(connector, adjusted_mode); +		if (ret) +			return ret; +	}  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)  		return -EINVAL;  |