diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 23 | 
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 94f860cce3f..110552ff302 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -49,7 +49,7 @@ struct intel_dp {  	uint32_t DP;  	uint8_t  link_configuration[DP_LINK_CONFIGURATION_SIZE];  	bool has_audio; -	int force_audio; +	enum hdmi_force_audio force_audio;  	uint32_t color_range;  	int dpms_mode;  	uint8_t link_bw; @@ -352,7 +352,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,  	int recv_bytes;  	uint32_t status;  	uint32_t aux_clock_divider; -	int try, precharge; +	int try, precharge = 5;  	intel_dp_check_edp(intel_dp);  	/* The clock divider is based off the hrawclk, @@ -368,15 +368,10 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,  		else  			aux_clock_divider = 225; /* eDP input clock at 450Mhz */  	} else if (HAS_PCH_SPLIT(dev)) -		aux_clock_divider = 62; /* IRL input clock fixed at 125Mhz */ +		aux_clock_divider = 63; /* IRL input clock fixed at 125Mhz */  	else  		aux_clock_divider = intel_hrawclk(dev) / 2; -	if (IS_GEN6(dev)) -		precharge = 3; -	else -		precharge = 5; -  	/* Try to wait for any previous AUX channel activity */  	for (try = 0; try < 3; try++) {  		status = I915_READ(ch_ctl); @@ -421,6 +416,10 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,  			   DP_AUX_CH_CTL_DONE |  			   DP_AUX_CH_CTL_TIME_OUT_ERROR |  			   DP_AUX_CH_CTL_RECEIVE_ERROR); + +		if (status & (DP_AUX_CH_CTL_TIME_OUT_ERROR | +			      DP_AUX_CH_CTL_RECEIVE_ERROR)) +			continue;  		if (status & DP_AUX_CH_CTL_DONE)  			break;  	} @@ -2117,8 +2116,8 @@ intel_dp_detect(struct drm_connector *connector, bool force)  	if (status != connector_status_connected)  		return status; -	if (intel_dp->force_audio) { -		intel_dp->has_audio = intel_dp->force_audio > 0; +	if (intel_dp->force_audio != HDMI_AUDIO_AUTO) { +		intel_dp->has_audio = (intel_dp->force_audio == HDMI_AUDIO_ON);  	} else {  		edid = intel_dp_get_edid(connector, &intel_dp->adapter);  		if (edid) { @@ -2218,10 +2217,10 @@ intel_dp_set_property(struct drm_connector *connector,  		intel_dp->force_audio = i; -		if (i == 0) +		if (i == HDMI_AUDIO_AUTO)  			has_audio = intel_dp_detect_audio(connector);  		else -			has_audio = i > 0; +			has_audio = (i == HDMI_AUDIO_ON);  		if (has_audio == intel_dp->has_audio)  			return 0;  |