Skip to content

Commit 613a795

Browse files
Aurabindo Pillaialexdeucher
authored andcommitted
drm/amd/display: Add monitor specific edid quirk
Disable FAMS on a Samsung Odyssey G9 monitor. Experiments show that this monitor does not work well under some use cases, and is likely implementation specific bug on the monitor's firmware. Cc: [email protected] Reviewed-by: Rodrigo Siqueira <[email protected]> Signed-off-by: Aurabindo Pillai <[email protected]> Tested-by: Daniel Wheeler <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent f2c5852 commit 613a795

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,30 @@
4444
#include "dm_helpers.h"
4545
#include "ddc_service_types.h"
4646

47+
static u32 edid_extract_panel_id(struct edid *edid)
48+
{
49+
return (u32)edid->mfg_id[0] << 24 |
50+
(u32)edid->mfg_id[1] << 16 |
51+
(u32)EDID_PRODUCT_ID(edid);
52+
}
53+
54+
static void apply_edid_quirks(struct edid *edid, struct dc_edid_caps *edid_caps)
55+
{
56+
uint32_t panel_id = edid_extract_panel_id(edid);
57+
58+
switch (panel_id) {
59+
/* Workaround for some monitors which does not work well with FAMS */
60+
case drm_edid_encode_panel_id('S', 'A', 'M', 0x0E5E):
61+
case drm_edid_encode_panel_id('S', 'A', 'M', 0x7053):
62+
case drm_edid_encode_panel_id('S', 'A', 'M', 0x71AC):
63+
DRM_DEBUG_DRIVER("Disabling FAMS on monitor with panel id %X\n", panel_id);
64+
edid_caps->panel_patch.disable_fams = true;
65+
break;
66+
default:
67+
return;
68+
}
69+
}
70+
4771
/* dm_helpers_parse_edid_caps
4872
*
4973
* Parse edid caps
@@ -115,6 +139,8 @@ enum dc_edid_status dm_helpers_parse_edid_caps(
115139
else
116140
edid_caps->speaker_flags = DEFAULT_SPEAKER_LOCATION;
117141

142+
apply_edid_quirks(edid_buf, edid_caps);
143+
118144
kfree(sads);
119145
kfree(sadb);
120146

0 commit comments

Comments
 (0)