drm/bridge: mhdp8546: Add minimal format negotiation
authorNikhil Devshatwar <nikhil.nd@ti.com>
Tue, 6 Jun 2023 08:21:37 +0000 (13:51 +0530)
committerJavier Martinez Canillas <javierm@redhat.com>
Mon, 10 Jul 2023 12:21:07 +0000 (14:21 +0200)
With new connector model, mhdp bridge will not create the connector and
SoC driver will rely on format negotiation to setup the encoder format.

Support minimal format negotiations hooks in the drm_bridge_funcs.
Complete format negotiation can be added based on EDID data.
This patch adds the minimal required support to avoid failure
after moving to new connector model.

Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
[a-bhatia1: Drop the output_fmt check condition]
Signed-off-by: Aradhya Bhatia <a-bhatia1@ti.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230606082142.23760-4-a-bhatia1@ti.com
drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c

index f6822dfa380545c3118bb0ad01f0edcfe7d05d0f..afd4e353f37a932fbd4a0a02a5e14fd27e266eea 100644 (file)
@@ -2146,6 +2146,27 @@ cdns_mhdp_bridge_atomic_reset(struct drm_bridge *bridge)
        return &cdns_mhdp_state->base;
 }
 
+static u32 *cdns_mhdp_get_input_bus_fmts(struct drm_bridge *bridge,
+                                        struct drm_bridge_state *bridge_state,
+                                        struct drm_crtc_state *crtc_state,
+                                        struct drm_connector_state *conn_state,
+                                        u32 output_fmt,
+                                        unsigned int *num_input_fmts)
+{
+       u32 *input_fmts;
+
+       *num_input_fmts = 0;
+
+       input_fmts = kzalloc(sizeof(*input_fmts), GFP_KERNEL);
+       if (!input_fmts)
+               return NULL;
+
+       *num_input_fmts = 1;
+       input_fmts[0] = MEDIA_BUS_FMT_RGB121212_1X36;
+
+       return input_fmts;
+}
+
 static int cdns_mhdp_atomic_check(struct drm_bridge *bridge,
                                  struct drm_bridge_state *bridge_state,
                                  struct drm_crtc_state *crtc_state,
@@ -2210,6 +2231,7 @@ static const struct drm_bridge_funcs cdns_mhdp_bridge_funcs = {
        .atomic_duplicate_state = cdns_mhdp_bridge_atomic_duplicate_state,
        .atomic_destroy_state = cdns_mhdp_bridge_atomic_destroy_state,
        .atomic_reset = cdns_mhdp_bridge_atomic_reset,
+       .atomic_get_input_bus_fmts = cdns_mhdp_get_input_bus_fmts,
        .detect = cdns_mhdp_bridge_detect,
        .get_edid = cdns_mhdp_bridge_get_edid,
        .hpd_enable = cdns_mhdp_bridge_hpd_enable,