[Intel-gfx] [PATCH 05/20] drm/i915/hdmi: Extract intel_hdmi_output_format()

Jani Nikula jani.nikula at linux.intel.com
Tue Oct 19 19:28:23 UTC 2021


On Fri, 15 Oct 2021, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> 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ä <ville.syrjala at linux.intel.com>

Patches 1-5,

Reviewed-by: Jani Nikula <jani.nikula at intel.com>


> ---
>  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


More information about the Intel-gfx mailing list