From e57152836dde170a9da301a2e3d8b70bd6666c0b Mon Sep 17 00:00:00 2001 From: Neil Armstrong Date: Mon, 20 May 2019 15:37:53 +0200 Subject: [PATCH 5/5] drm/meson: Output in YUV444 if sink supports it With the YUV420 handling, we can dynamically setup the HDMI output pixel format depending on the mode and connector info. So now, we can output in YUV444, which is the native video pipeline format, directly to the HDMI Sink if it's supported without necessarily involving the HDMI Controller CSC. Signed-off-by: Neil Armstrong Reviewed-by: Kevin Hilman --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 2ccee05de04a..72416f8a6170 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -711,12 +711,23 @@ static int meson_venc_hdmi_encoder_atomic_check(struct drm_encoder *encoder, struct drm_display_mode *mode = &crtc_state->mode; bool is_hdmi2_sink = conn_state->connector->display_info.hdmi.scdc.supported; + bool specify_out_format = false; + u32 out_format; if (drm_mode_is_420_only(info, mode) || (!is_hdmi2_sink && drm_mode_is_420_also(info, mode))) dw_hdmi->input_bus_format = MEDIA_BUS_FMT_UYYVYY8_0_5X24; - else + else { dw_hdmi->input_bus_format = MEDIA_BUS_FMT_YUV8_1X24; + if (info->color_formats & DRM_COLOR_FORMAT_YCRCB444) { + out_format = MEDIA_BUS_FMT_YUV8_1X24; + specify_out_format = true; + } + } + + /* Set a connector bus format if required */ + drm_display_info_set_bus_formats(info, &out_format, + (specify_out_format ? 1 : 0)); /* Specify the encoder output format to the bridge */ if (!drm_bridge_format_set(encoder->bridge, -- 2.20.1