[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