On Tue, 2021-05-11 at 19:05 +0300, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Currently HDMI .mode_valid() only checks whether the source can do > deep color. Let's check whether the sink can do it as well. > Reviewed-by: José Roberto de Souza <jose.souza@xxxxxxxxx> > Cc: Werner Sembach <wse@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_hdmi.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index 56ac53eab90c..874fb897005a 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -1901,10 +1901,10 @@ static bool intel_hdmi_bpc_possible(struct drm_connector *connector, > } > > static enum drm_mode_status > -intel_hdmi_mode_clock_valid(struct intel_hdmi *hdmi, int clock, bool has_hdmi_sink) > +intel_hdmi_mode_clock_valid(struct drm_connector *connector, int clock, > + bool has_hdmi_sink, bool ycbcr420_output) > { > - struct drm_device *dev = intel_hdmi_to_dev(hdmi); > - struct drm_i915_private *dev_priv = to_i915(dev); > + struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector)); > enum drm_mode_status status; > > /* check if we can do 8bpc */ > @@ -1913,12 +1913,14 @@ intel_hdmi_mode_clock_valid(struct intel_hdmi *hdmi, int clock, bool has_hdmi_si > > if (has_hdmi_sink) { > /* if we can't do 8bpc we may still be able to do 12bpc */ > - if (status != MODE_OK && !HAS_GMCH(dev_priv)) > + if (status != MODE_OK && > + intel_hdmi_bpc_possible(connector, 12, has_hdmi_sink, ycbcr420_output)) > status = hdmi_port_clock_valid(hdmi, intel_hdmi_port_clock(clock, 12), > true, has_hdmi_sink); > > /* if we can't do 8,12bpc we may still be able to do 10bpc */ > - if (status != MODE_OK && DISPLAY_VER(dev_priv) >= 11) > + if (status != MODE_OK && > + intel_hdmi_bpc_possible(connector, 10, has_hdmi_sink, ycbcr420_output)) > status = hdmi_port_clock_valid(hdmi, intel_hdmi_port_clock(clock, 10), > true, has_hdmi_sink); > } > @@ -1958,7 +1960,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector, > if (ycbcr_420_only) > clock /= 2; > > - status = intel_hdmi_mode_clock_valid(hdmi, clock, has_hdmi_sink); > + status = intel_hdmi_mode_clock_valid(connector, clock, has_hdmi_sink, ycbcr_420_only); > if (status != MODE_OK) { > if (ycbcr_420_only || > !connector->ycbcr_420_allowed || > @@ -1966,7 +1968,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector, > return status; > > clock /= 2; > - status = intel_hdmi_mode_clock_valid(hdmi, clock, has_hdmi_sink); > + status = intel_hdmi_mode_clock_valid(connector, clock, has_hdmi_sink, true); > if (status != MODE_OK) > return status; > } _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx