diff options
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 11 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/display/dc/dc_types.h | 1 | 
3 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 6e79028c5d78..7a826f20c38a 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6735,12 +6735,21 @@ create_stream_for_sink(struct drm_connector *connector,  	if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT ||  	    stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST ||  	    stream->signal == SIGNAL_TYPE_EDP) { +		const struct dc_edid_caps *edid_caps; +		unsigned int disable_colorimetry = 0; + +		if (aconnector->dc_sink) { +			edid_caps = &aconnector->dc_sink->edid_caps; +			disable_colorimetry = edid_caps->panel_patch.disable_colorimetry; +		} +  		//  		// should decide stream support vsc sdp colorimetry capability  		// before building vsc info packet  		//  		stream->use_vsc_sdp_for_colorimetry = stream->link->dpcd_caps.dpcd_rev.raw >= 0x14 && -						      stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED; +						      stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED && +						      !disable_colorimetry;  		if (stream->out_transfer_func.tf == TRANSFER_FUNCTION_GAMMA22)  			tf = TRANSFER_FUNC_GAMMA_22; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 50109d13d967..069e0195e50a 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -73,6 +73,10 @@ static void apply_edid_quirks(struct edid *edid, struct dc_edid_caps *edid_caps)  		DRM_DEBUG_DRIVER("Clearing DPCD 0x317 on monitor with panel id %X\n", panel_id);  		edid_caps->panel_patch.remove_sink_ext_caps = true;  		break; +	case drm_edid_encode_panel_id('S', 'D', 'C', 0x4154): +		DRM_DEBUG_DRIVER("Disabling VSC on monitor with panel id %X\n", panel_id); +		edid_caps->panel_patch.disable_colorimetry = true; +		break;  	default:  		return;  	} diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h index fd6dca735714..6d7989b751e2 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_types.h +++ b/drivers/gpu/drm/amd/display/dc/dc_types.h @@ -178,6 +178,7 @@ struct dc_panel_patch {  	unsigned int skip_avmute;  	unsigned int mst_start_top_delay;  	unsigned int remove_sink_ext_caps; +	unsigned int disable_colorimetry;  };  struct dc_edid_caps {  | 
