drm/i915: Account for sink max TMDS clock when checking the port clock
authorVille Syrjälä <[email protected]>
Wed, 28 Sep 2016 13:51:43 +0000 (16:51 +0300)
committerDaniel Vetter <[email protected]>
Tue, 4 Oct 2016 06:23:13 +0000 (08:23 +0200)
It's perfectly legal for the sink to support 12bpc only for
some lower resolution modes, while the higher resolution modes
can only be used with 8bpc. So let's take the sink's max TMDS clock
into account before we go and decide that a particular mode can
be used with 12bpc.

Signed-off-by: Ville Syrjälä <[email protected]>
Reviewed-by: Ander Conselvan de Oliveira <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
drivers/gpu/drm/i915/intel_hdmi.c

index c51073f78730c4367459cffbb620bdeeeea08a2e..f40a35f2913a8222f2800bfa081b3adb1c636288 100644 (file)
@@ -1220,10 +1220,17 @@ static int hdmi_port_clock_limit(struct intel_hdmi *hdmi,
        int max_tmds_clock = intel_hdmi_source_max_tmds_clock(to_i915(dev));
 
        if (respect_downstream_limits) {
+               struct intel_connector *connector = hdmi->attached_connector;
+               const struct drm_display_info *info = &connector->base.display_info;
+
                if (hdmi->dp_dual_mode.max_tmds_clock)
                        max_tmds_clock = min(max_tmds_clock,
                                             hdmi->dp_dual_mode.max_tmds_clock);
-               if (!hdmi->has_hdmi_sink)
+
+               if (info->max_tmds_clock)
+                       max_tmds_clock = min(max_tmds_clock,
+                                            info->max_tmds_clock);
+               else if (!hdmi->has_hdmi_sink)
                        max_tmds_clock = min(max_tmds_clock, 165000);
        }