]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm: bridge: dw_hdmi: fix preference of RGB modes over YUV420
authorGuillaume BRUN <the.cheaterman@gmail.com>
Wed, 16 Nov 2022 14:35:23 +0000 (15:35 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 14 Dec 2022 13:02:55 +0000 (14:02 +0100)
[ Upstream commit d3d6b1bf85aefe0ebc0624574b3bb62f0693914c ]

Cheap monitors sometimes advertise YUV modes they don't really have
(HDMI specification mandates YUV support so even monitors without actual
support will often wrongfully advertise it) which results in YUV matches
and user forum complaints of a red tint to light colour display areas in
common desktop environments.

Moving the default RGB fall-back before YUV selection results in RGB
mode matching in most cases, reducing complaints.

Fixes: 6c3c719936da ("drm/bridge: synopsys: dw-hdmi: add bus format negociation")
Signed-off-by: Guillaume BRUN <the.cheaterman@gmail.com>
Tested-by: Christian Hewitt <christianshewitt@gmail.com>
Reviewed-by: Robert Foss <robert.foss@linaro.org>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20221116143523.2126-1-the.cheaterman@gmail.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 807a01a3297947074543016320255076efcec3d2)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c

index d3129a3e6ab76c1bf4cc0b2b554c281babff36f8..8bb403bc712a4b58596da3b5d4f19cc691fe37cf 100644 (file)
@@ -2594,6 +2594,9 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
         * if supported. In any case the default RGB888 format is added
         */
 
+       /* Default 8bit RGB fallback */
+       output_fmts[i++] = MEDIA_BUS_FMT_RGB888_1X24;
+
        if (max_bpc >= 16 && info->bpc == 16) {
                if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444)
                        output_fmts[i++] = MEDIA_BUS_FMT_YUV16_1X48;
@@ -2627,9 +2630,6 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
        if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444)
                output_fmts[i++] = MEDIA_BUS_FMT_YUV8_1X24;
 
-       /* Default 8bit RGB fallback */
-       output_fmts[i++] = MEDIA_BUS_FMT_RGB888_1X24;
-
        *num_output_fmts = i;
 
        return output_fmts;