diff options
Diffstat (limited to 'drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c')
| -rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 26 | 
1 files changed, 26 insertions, 0 deletions
| 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 cd20cfc04996..d9a482908380 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 @@ -44,6 +44,30 @@  #include "dm_helpers.h"  #include "ddc_service_types.h" +static u32 edid_extract_panel_id(struct edid *edid) +{ +	return (u32)edid->mfg_id[0] << 24   | +	       (u32)edid->mfg_id[1] << 16   | +	       (u32)EDID_PRODUCT_ID(edid); +} + +static void apply_edid_quirks(struct edid *edid, struct dc_edid_caps *edid_caps) +{ +	uint32_t panel_id = edid_extract_panel_id(edid); + +	switch (panel_id) { +	/* Workaround for some monitors which does not work well with FAMS */ +	case drm_edid_encode_panel_id('S', 'A', 'M', 0x0E5E): +	case drm_edid_encode_panel_id('S', 'A', 'M', 0x7053): +	case drm_edid_encode_panel_id('S', 'A', 'M', 0x71AC): +		DRM_DEBUG_DRIVER("Disabling FAMS on monitor with panel id %X\n", panel_id); +		edid_caps->panel_patch.disable_fams = true; +		break; +	default: +		return; +	} +} +  /* dm_helpers_parse_edid_caps   *   * Parse edid caps @@ -115,6 +139,8 @@ enum dc_edid_status dm_helpers_parse_edid_caps(  	else  		edid_caps->speaker_flags = DEFAULT_SPEAKER_LOCATION; +	apply_edid_quirks(edid_buf, edid_caps); +  	kfree(sads);  	kfree(sadb); | 
