Skip to content

Commit e10aec6

Browse files
kleinermairlied
authored andcommitted
drm/edid: Add 6 bpc quirk for display AEO model 0.
Bugzilla https://bugzilla.kernel.org/show_bug.cgi?id=105331 reports that the "AEO model 0" display is driven with 8 bpc without dithering by default, which looks bad because that panel is apparently a 6 bpc DP panel with faulty EDID. A fix for this was made by commit 013dd9e ("drm/i915/dp: fall back to 18 bpp when sink capability is unknown"). That commit triggers new regressions in precision for DP->DVI and DP->VGA displays. A patch is out to revert that commit, but it will revert video output for the AEO model 0 panel to 8 bpc without dithering. The EDID 1.3 of that panel, as decoded from the xrandr output attached to that bugzilla bug report, is somewhat faulty, and beyond other problems also sets the "DFP 1.x compliant TMDS" bit, which according to DFP spec means to drive the panel with 8 bpc and no dithering in absence of other colorimetry information. Try to make the original bug reporter happy despite the faulty EDID by adding a quirk to mark that panel as 6 bpc, so 6 bpc output with dithering creates a nice picture. Tested by injecting the edid from the fdo bug into a DP connector via drm_kms_helper.edid_firmware and verifying the 6 bpc + dithering is selected. This patch should be backported to stable. Signed-off-by: Mario Kleiner <[email protected]> Cc: [email protected] Cc: Jani Nikula <[email protected]> Cc: Ville Syrjälä <[email protected]> Cc: Daniel Vetter <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
1 parent 4872850 commit e10aec6

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

drivers/gpu/drm/drm_edid.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@
7474
#define EDID_QUIRK_FORCE_8BPC (1 << 8)
7575
/* Force 12bpc */
7676
#define EDID_QUIRK_FORCE_12BPC (1 << 9)
77+
/* Force 6bpc */
78+
#define EDID_QUIRK_FORCE_6BPC (1 << 10)
7779

7880
struct detailed_mode_closure {
7981
struct drm_connector *connector;
@@ -100,6 +102,9 @@ static struct edid_quirk {
100102
/* Unknown Acer */
101103
{ "ACR", 2423, EDID_QUIRK_FIRST_DETAILED_PREFERRED },
102104

105+
/* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
106+
{ "AEO", 0, EDID_QUIRK_FORCE_6BPC },
107+
103108
/* Belinea 10 15 55 */
104109
{ "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
105110
{ "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
@@ -4082,6 +4087,9 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
40824087

40834088
drm_add_display_info(edid, &connector->display_info, connector);
40844089

4090+
if (quirks & EDID_QUIRK_FORCE_6BPC)
4091+
connector->display_info.bpc = 6;
4092+
40854093
if (quirks & EDID_QUIRK_FORCE_8BPC)
40864094
connector->display_info.bpc = 8;
40874095

0 commit comments

Comments
 (0)