Commit 4b12f91a authored by Aradhya Bhatia's avatar Aradhya Bhatia Committed by Dmitry Baryshkov

drm/bridge: tc358767: Add format negotiation hooks for DPI/DSI to (e)DP

With new connector model, tc358767 will not create the connector, when
DRM_BRIDGE_ATTACH_NO_CONNECTOR is set and display-controller driver will
rely on format negotiation to setup the encoder format.

Add the missing bus format negotiation hooks in the
drm_bridge_funcs to complete DRM_BRIDGE_ATTACH_NO_CONNECTOR support.

Output format, for DPI/DSI to DP, is selected to
MEDIA_BUS_FMT_RGB888_1X24 as default, keeping in mind what the older
model used to support.
Reported-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Closes: https://lore.kernel.org/all/24282420-b4dd-45b3-bb1c-fc37fe4a8205@siemens.com/Signed-off-by: default avatarAradhya Bhatia <a-bhatia1@ti.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231108-tc358767-v2-1-25c5f70a2159@ideasonboard.comSigned-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent fafc8cd0
...@@ -1820,6 +1820,7 @@ static void tc_edp_bridge_detach(struct drm_bridge *bridge) ...@@ -1820,6 +1820,7 @@ static void tc_edp_bridge_detach(struct drm_bridge *bridge)
} }
#define MAX_INPUT_SEL_FORMATS 1 #define MAX_INPUT_SEL_FORMATS 1
#define MAX_OUTPUT_SEL_FORMATS 1
static u32 * static u32 *
tc_dpi_atomic_get_input_bus_fmts(struct drm_bridge *bridge, tc_dpi_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
...@@ -1845,6 +1846,28 @@ tc_dpi_atomic_get_input_bus_fmts(struct drm_bridge *bridge, ...@@ -1845,6 +1846,28 @@ tc_dpi_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
return input_fmts; return input_fmts;
} }
static u32 *
tc_edp_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
struct drm_bridge_state *bridge_state,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state,
unsigned int *num_output_fmts)
{
u32 *output_fmts;
*num_output_fmts = 0;
output_fmts = kcalloc(MAX_OUTPUT_SEL_FORMATS, sizeof(*output_fmts),
GFP_KERNEL);
if (!output_fmts)
return NULL;
output_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24;
*num_output_fmts = 1;
return output_fmts;
}
static const struct drm_bridge_funcs tc_dpi_bridge_funcs = { static const struct drm_bridge_funcs tc_dpi_bridge_funcs = {
.attach = tc_dpi_bridge_attach, .attach = tc_dpi_bridge_attach,
.mode_valid = tc_dpi_mode_valid, .mode_valid = tc_dpi_mode_valid,
...@@ -1871,6 +1894,8 @@ static const struct drm_bridge_funcs tc_edp_bridge_funcs = { ...@@ -1871,6 +1894,8 @@ static const struct drm_bridge_funcs tc_edp_bridge_funcs = {
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_reset = drm_atomic_helper_bridge_reset, .atomic_reset = drm_atomic_helper_bridge_reset,
.atomic_get_input_bus_fmts = drm_atomic_helper_bridge_propagate_bus_fmt,
.atomic_get_output_bus_fmts = tc_edp_atomic_get_output_bus_fmts,
}; };
static bool tc_readable_reg(struct device *dev, unsigned int reg) static bool tc_readable_reg(struct device *dev, unsigned int reg)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment