diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_dp.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/atombios_dp.c | 28 | 
1 files changed, 15 insertions, 13 deletions
| diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c index 3e3290c203c6..f81e0d7d0232 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c @@ -253,7 +253,7 @@ void radeon_dp_aux_init(struct radeon_connector *radeon_connector)  #define DP_VOLTAGE_MAX         DP_TRAIN_VOLTAGE_SWING_LEVEL_3  #define DP_PRE_EMPHASIS_MAX    DP_TRAIN_PRE_EMPH_LEVEL_3 -static void dp_get_adjust_train(u8 link_status[DP_LINK_STATUS_SIZE], +static void dp_get_adjust_train(const u8 link_status[DP_LINK_STATUS_SIZE],  				int lane_count,  				u8 train_set[4])  { @@ -311,7 +311,7 @@ static int dp_get_max_dp_pix_clock(int link_rate,  /***** radeon specific DP functions *****/  int radeon_dp_get_max_link_rate(struct drm_connector *connector, -				u8 dpcd[DP_DPCD_SIZE]) +				const u8 dpcd[DP_DPCD_SIZE])  {  	int max_link_rate; @@ -328,7 +328,7 @@ int radeon_dp_get_max_link_rate(struct drm_connector *connector,   * if the max lane# < low rate lane# then use max lane# instead.   */  static int radeon_dp_get_dp_lane_number(struct drm_connector *connector, -					u8 dpcd[DP_DPCD_SIZE], +					const u8 dpcd[DP_DPCD_SIZE],  					int pix_clock)  {  	int bpp = convert_bpc_to_bpp(radeon_get_monitor_bpc(connector)); @@ -347,7 +347,7 @@ static int radeon_dp_get_dp_lane_number(struct drm_connector *connector,  }  static int radeon_dp_get_dp_link_clock(struct drm_connector *connector, -				       u8 dpcd[DP_DPCD_SIZE], +				       const u8 dpcd[DP_DPCD_SIZE],  				       int pix_clock)  {  	int bpp = convert_bpc_to_bpp(radeon_get_monitor_bpc(connector)); @@ -421,19 +421,21 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector)  {  	struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv;  	u8 msg[DP_DPCD_SIZE]; -	int ret; +	int ret, i; -	ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, -			       DP_DPCD_SIZE); -	if (ret > 0) { -		memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); +	for (i = 0; i < 7; i++) { +		ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, +				       DP_DPCD_SIZE); +		if (ret == DP_DPCD_SIZE) { +			memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); -		DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd), -			      dig_connector->dpcd); +			DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd), +				      dig_connector->dpcd); -		radeon_dp_probe_oui(radeon_connector); +			radeon_dp_probe_oui(radeon_connector); -		return true; +			return true; +		}  	}  	dig_connector->dpcd[0] = 0;  	return false; | 
