diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_dp_mst.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_dp_mst.c | 32 | 
1 files changed, 11 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c index 89d701e8ae9d..b8bc7d397c81 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c @@ -231,6 +231,7 @@ intel_dp_mst_atomic_master_trans_check(struct intel_connector *connector,  	struct drm_i915_private *dev_priv = to_i915(state->base.dev);  	struct drm_connector_list_iter connector_list_iter;  	struct intel_connector *connector_iter; +	int ret = 0;  	if (DISPLAY_VER(dev_priv) < 12)  		return  0; @@ -243,7 +244,6 @@ intel_dp_mst_atomic_master_trans_check(struct intel_connector *connector,  		struct intel_digital_connector_state *conn_iter_state;  		struct intel_crtc_state *crtc_state;  		struct intel_crtc *crtc; -		int ret;  		if (connector_iter->mst_port != connector->mst_port ||  		    connector_iter == connector) @@ -252,8 +252,8 @@ intel_dp_mst_atomic_master_trans_check(struct intel_connector *connector,  		conn_iter_state = intel_atomic_get_digital_connector_state(state,  									   connector_iter);  		if (IS_ERR(conn_iter_state)) { -			drm_connector_list_iter_end(&connector_list_iter); -			return PTR_ERR(conn_iter_state); +			ret = PTR_ERR(conn_iter_state); +			break;  		}  		if (!conn_iter_state->base.crtc) @@ -262,20 +262,18 @@ intel_dp_mst_atomic_master_trans_check(struct intel_connector *connector,  		crtc = to_intel_crtc(conn_iter_state->base.crtc);  		crtc_state = intel_atomic_get_crtc_state(&state->base, crtc);  		if (IS_ERR(crtc_state)) { -			drm_connector_list_iter_end(&connector_list_iter); -			return PTR_ERR(crtc_state); +			ret = PTR_ERR(crtc_state); +			break;  		}  		ret = drm_atomic_add_affected_planes(&state->base, &crtc->base); -		if (ret) { -			drm_connector_list_iter_end(&connector_list_iter); -			return ret; -		} +		if (ret) +			break;  		crtc_state->uapi.mode_changed = true;  	}  	drm_connector_list_iter_end(&connector_list_iter); -	return 0; +	return ret;  }  static int @@ -348,16 +346,6 @@ static void wait_for_act_sent(struct intel_encoder *encoder,  	drm_dp_check_act_status(&intel_dp->mst_mgr);  } -static void intel_mst_pre_disable_dp(struct intel_atomic_state *state, -				     struct intel_encoder *encoder, -				     const struct intel_crtc_state *old_crtc_state, -				     const struct drm_connector_state *old_conn_state) -{ -	if (old_crtc_state->has_audio) -		intel_audio_codec_disable(encoder, old_crtc_state, -					  old_conn_state); -} -  static void intel_mst_disable_dp(struct intel_atomic_state *state,  				 struct intel_encoder *encoder,  				 const struct intel_crtc_state *old_crtc_state, @@ -382,6 +370,9 @@ static void intel_mst_disable_dp(struct intel_atomic_state *state,  	if (ret) {  		drm_dbg_kms(&i915->drm, "failed to update payload %d\n", ret);  	} +	if (old_crtc_state->has_audio) +		intel_audio_codec_disable(encoder, +					  old_crtc_state, old_conn_state);  }  static void intel_mst_post_disable_dp(struct intel_atomic_state *state, @@ -916,7 +907,6 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *dig_port, enum pipe  	intel_encoder->compute_config = intel_dp_mst_compute_config;  	intel_encoder->compute_config_late = intel_dp_mst_compute_config_late; -	intel_encoder->pre_disable = intel_mst_pre_disable_dp;  	intel_encoder->disable = intel_mst_disable_dp;  	intel_encoder->post_disable = intel_mst_post_disable_dp;  	intel_encoder->update_pipe = intel_ddi_update_pipe;  | 
