On Tue, 2021-05-11 at 19:05 +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> 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.so...@intel.com>

> Cc: Werner Sembach <w...@tuxedocomputers.com>
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to