For bridge connectors which contain an HDMI bridge at some stage, the
HDMI state helpers' format selection logic should be involved.

Add an implementation for the drm_bridge_funcs color_format function,
which translates from the HDMI state's output format to a connector
format for bridge connectors involving an HDMI bridge, but return the
connector state's color_format member unchanged otherwise.

Reviewed-by: Dmitry Baryshkov <[email protected]>
Reviewed-by: Daniel Stone <[email protected]>
Signed-off-by: Nicolas Frattaroli <[email protected]>
---
 drivers/gpu/drm/display/drm_bridge_connector.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c 
b/drivers/gpu/drm/display/drm_bridge_connector.c
index 649969fca141..19da5f668942 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -276,6 +276,29 @@ static void drm_bridge_connector_reset(struct 
drm_connector *connector)
                                                         connector->state);
 }
 
+static enum drm_connector_color_format
+drm_bridge_connector_color_format(const struct drm_connector_state *conn_state)
+{
+       struct drm_bridge_connector *bridge_connector =
+               to_drm_bridge_connector(conn_state->connector);
+
+       if (bridge_connector->bridge_hdmi) {
+               switch (conn_state->hdmi.output_format) {
+               default:
+               case DRM_OUTPUT_COLOR_FORMAT_RGB444:
+                       return DRM_CONNECTOR_COLOR_FORMAT_RGB444;
+               case DRM_OUTPUT_COLOR_FORMAT_YCBCR444:
+                       return DRM_CONNECTOR_COLOR_FORMAT_YCBCR444;
+               case DRM_OUTPUT_COLOR_FORMAT_YCBCR422:
+                       return DRM_CONNECTOR_COLOR_FORMAT_YCBCR422;
+               case DRM_OUTPUT_COLOR_FORMAT_YCBCR420:
+                       return DRM_CONNECTOR_COLOR_FORMAT_YCBCR420;
+               }
+       }
+
+       return conn_state->color_format;
+}
+
 static const struct drm_connector_funcs drm_bridge_connector_funcs = {
        .reset = drm_bridge_connector_reset,
        .detect = drm_bridge_connector_detect,
@@ -285,6 +308,7 @@ static const struct drm_connector_funcs 
drm_bridge_connector_funcs = {
        .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
        .debugfs_init = drm_bridge_connector_debugfs_init,
        .oob_hotplug_event = drm_bridge_connector_oob_hotplug_event,
+       .color_format = drm_bridge_connector_color_format,
 };
 
 /* 
-----------------------------------------------------------------------------

-- 
2.54.0

Reply via email to