drm/radeon: Prevent hdmi deep color if max_tmds_clock is undefined.
authorMario Kleiner <mario.kleiner.de@gmail.com>
Tue, 5 Aug 2014 03:23:11 +0000 (05:23 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 Aug 2014 15:22:54 +0000 (11:22 -0400)
HDMI spec requires a valid max_tmds_clock from edid for hdmi
deep color modes. If a sink violates this, disable deep color.

Also add a hint to user about the deep_color module parameter if
deep color is disabled due to that.

Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/radeon/radeon_connectors.c

index 19ad4fb0a6107350d19be768a1296195d3696c90..300c4b3d4669426d5085d7e5d2e52e23321988d3 100644 (file)
@@ -197,10 +197,19 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
                                                  connector->name, bpc);
                        }
                }
+               else if (bpc > 8) {
+                       /* max_tmds_clock missing, but hdmi spec mandates it for deep color. */
+                       DRM_DEBUG("%s: Required max tmds clock for HDMI deep color missing. Using 8 bpc.\n",
+                                         connector->name);
+                       bpc = 8;
+               }
        }
 
-       if ((radeon_deep_color == 0) && (bpc > 8))
+       if ((radeon_deep_color == 0) && (bpc > 8)) {
+               DRM_DEBUG("%s: Deep color disabled. Set radeon module param deep_color=1 to enable.\n",
+                                 connector->name);
                bpc = 8;
+       }
 
        DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n",
                          connector->name, connector->display_info.bpc, bpc);