In anticipation of userspace being able to explicitly select supported sink formats, add handling of the YCBCR444 sink format. The AUTO path does not choose this format, but with explicit format selection added to the driver, it becomes a possibility.
Check for both source and sink support of YCBCR444 in intel_dp_sink_format_valid. Acked-by: Daniel Stone <[email protected]> Signed-off-by: Nicolas Frattaroli <[email protected]> --- drivers/gpu/drm/i915/display/intel_dp.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 1920d2f02666..380933579178 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -1344,6 +1344,16 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector, 8, sink_format, true); } +static bool +intel_dp_can_ycbcr444(struct intel_dp *intel_dp) +{ + if (source_can_output(intel_dp, INTEL_OUTPUT_FORMAT_YCBCR444) && + !drm_dp_is_branch(intel_dp->dpcd)) + return true; + + return false; +} + static enum drm_mode_status intel_dp_sink_format_valid(struct intel_connector *connector, const struct drm_display_mode *mode, @@ -1362,6 +1372,16 @@ intel_dp_sink_format_valid(struct intel_connector *connector, !drm_mode_is_420(info, mode)) return MODE_NO_420; + return MODE_OK; + case INTEL_OUTPUT_FORMAT_YCBCR444: + if (intel_dp->dfp.min_tmds_clock && + !intel_dp_has_hdmi_sink(intel_dp)) + return MODE_BAD; + if (!intel_dp_can_ycbcr444(intel_dp)) + return MODE_BAD; + if (!(info->color_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR444))) + return MODE_BAD; + return MODE_OK; case INTEL_OUTPUT_FORMAT_RGB: return MODE_OK; -- 2.54.0
