On Fri, 15 Oct 2021, Ville Syrjala <[email protected]> wrote:
> From: Ville Syrjälä <[email protected]>
>
> Reorganize the HDMI 4:2:0 handling a bit by introducing
> intel_hdmi_output_format(). We already have the DP counterpart
> and I want to unify the 4:2:0 handling across both a bit.
>
> Signed-off-by: Ville Syrjälä <[email protected]>

Patches 1-5,

Reviewed-by: Jani Nikula <[email protected]>


> ---
>  drivers/gpu/drm/i915/display/intel_hdmi.c | 35 ++++++++++++++---------
>  1 file changed, 22 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c 
> b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 18e7ef125827..7e6af959bf83 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2157,34 +2157,43 @@ static bool intel_hdmi_has_audio(struct intel_encoder 
> *encoder,
>               return intel_conn_state->force_audio == HDMI_AUDIO_ON;
>  }
>  
> +static enum intel_output_format
> +intel_hdmi_output_format(struct intel_connector *connector,
> +                      bool ycbcr_420_output)
> +{
> +     if (connector->base.ycbcr_420_allowed && ycbcr_420_output)
> +             return INTEL_OUTPUT_FORMAT_YCBCR420;
> +     else
> +             return INTEL_OUTPUT_FORMAT_RGB;
> +}
> +
>  static int intel_hdmi_compute_output_format(struct intel_encoder *encoder,
>                                           struct intel_crtc_state *crtc_state,
>                                           const struct drm_connector_state 
> *conn_state)
>  {
> -     struct drm_connector *connector = conn_state->connector;
> -     struct drm_i915_private *i915 = to_i915(connector->dev);
> +     struct intel_connector *connector = 
> to_intel_connector(conn_state->connector);
>       const struct drm_display_mode *adjusted_mode = 
> &crtc_state->hw.adjusted_mode;
> +     const struct drm_display_info *info = &connector->base.display_info;
> +     struct drm_i915_private *i915 = to_i915(connector->base.dev);
> +     bool ycbcr_420_only = drm_mode_is_420_only(info, adjusted_mode);
>       int ret;
> -     bool ycbcr_420_only;
>  
> -     ycbcr_420_only = drm_mode_is_420_only(&connector->display_info, 
> adjusted_mode);
> -     if (connector->ycbcr_420_allowed && ycbcr_420_only) {
> -             crtc_state->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
> -     } else {
> -             if (!connector->ycbcr_420_allowed && ycbcr_420_only)
> -                     drm_dbg_kms(&i915->drm,
> -                                 "YCbCr 4:2:0 mode but YCbCr 4:2:0 output 
> not possible. Falling back to RGB.\n");
> +     crtc_state->output_format = intel_hdmi_output_format(connector, 
> ycbcr_420_only);
> +
> +     if (ycbcr_420_only && !intel_hdmi_is_ycbcr420(crtc_state)) {
> +             drm_dbg_kms(&i915->drm,
> +                         "YCbCr 4:2:0 mode but YCbCr 4:2:0 output not 
> possible. Falling back to RGB.\n");
>               crtc_state->output_format = INTEL_OUTPUT_FORMAT_RGB;
>       }
>  
>       ret = intel_hdmi_compute_clock(encoder, crtc_state);
>       if (ret) {
>               if (intel_hdmi_is_ycbcr420(crtc_state) ||
> -                 !connector->ycbcr_420_allowed ||
> -                 !drm_mode_is_420_also(&connector->display_info, 
> adjusted_mode))
> +                 !connector->base.ycbcr_420_allowed ||
> +                 !drm_mode_is_420_also(info, adjusted_mode))
>                       return ret;
>  
> -             crtc_state->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
> +             crtc_state->output_format = intel_hdmi_output_format(connector, 
> true);
>               ret = intel_hdmi_compute_clock(encoder, crtc_state);
>       }

-- 
Jani Nikula, Intel Open Source Graphics Center

Reply via email to