[PATCH 3/3] Use YCbCr420 as fallback when RGB fails

From: Werner Sembach
Date: Mon May 03 2021 - 10:23:17 EST


---
drivers/gpu/drm/i915/display/intel_hdmi.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 2c3b545d5f24..3770ea00930f 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1913,7 +1913,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
clock *= 2;
}

- if (drm_mode_is_420_only(&connector->display_info, mode))
+ if (connector->ycbcr_420_allowed && drm_mode_is_420(&connector->display_info, mode))
clock /= 2;

status = intel_hdmi_mode_clock_valid(hdmi, clock, has_hdmi_sink);
@@ -2125,6 +2125,14 @@ static int intel_hdmi_compute_output_format(struct intel_encoder *encoder,
}

ret = intel_hdmi_compute_clock(encoder, crtc_state);
+ if (ret) {
+ if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_YCBCR420 &&
+ connector->ycbcr_420_allowed &&
+ drm_mode_is_420_also(&connector->display_info, adjusted_mode)) {
+ crtc_state->output_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ ret = intel_hdmi_compute_clock(encoder, crtc_state);
+ }
+ }

return ret;
}
--
2.25.1