lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 720/917] drm/bridge: nwl-dsi: Add atomic_get_input_bus_fmts
    Date
    From: Guido Günther <agx@sigxcpu.org>

    [ Upstream commit 2f1495fac8d38bfade18bd7e31fa787cd7815626 ]

    Components further up in the chain might ask us for supported formats.

    Without this MEDIA_BUS_FMT_FIXED is assumed which then breaks display
    output with mxsfb since it can't determine a proper bus format.

    We handle the bus formats that correspond to the DSI formats the bridge
    can potentially output (see chapter 13.6 of the i.MX 8MQ reference
    manual) - which matches what xsfb can input.

    Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")

    Signed-off-by: Guido Günther <agx@sigxcpu.org>
    Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
    Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/1712f2b952694fd4484dfd8576fbc5b4d7adf042.1633959458.git.agx@sigxcpu.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/bridge/nwl-dsi.c | 35 ++++++++++++++++++++++++++++++++
    1 file changed, 35 insertions(+)

    diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c b/drivers/gpu/drm/bridge/nwl-dsi.c
    index ed8ac5059cd26..a7389a0facfb4 100644
    --- a/drivers/gpu/drm/bridge/nwl-dsi.c
    +++ b/drivers/gpu/drm/bridge/nwl-dsi.c
    @@ -939,6 +939,40 @@ static void nwl_dsi_bridge_detach(struct drm_bridge *bridge)
    drm_of_panel_bridge_remove(dsi->dev->of_node, 1, 0);
    }

    +static u32 *nwl_bridge_atomic_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, input_fmt;
    +
    + *num_input_fmts = 0;
    +
    + switch (output_fmt) {
    + /* If MEDIA_BUS_FMT_FIXED is tested, return default bus format */
    + case MEDIA_BUS_FMT_FIXED:
    + input_fmt = MEDIA_BUS_FMT_RGB888_1X24;
    + break;
    + case MEDIA_BUS_FMT_RGB888_1X24:
    + case MEDIA_BUS_FMT_RGB666_1X18:
    + case MEDIA_BUS_FMT_RGB565_1X16:
    + input_fmt = output_fmt;
    + break;
    + default:
    + return NULL;
    + }
    +
    + input_fmts = kcalloc(1, sizeof(*input_fmts), GFP_KERNEL);
    + if (!input_fmts)
    + return NULL;
    + input_fmts[0] = input_fmt;
    + *num_input_fmts = 1;
    +
    + return input_fmts;
    +}
    +
    static const struct drm_bridge_funcs nwl_dsi_bridge_funcs = {
    .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
    .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
    @@ -946,6 +980,7 @@ static const struct drm_bridge_funcs nwl_dsi_bridge_funcs = {
    .atomic_check = nwl_dsi_bridge_atomic_check,
    .atomic_enable = nwl_dsi_bridge_atomic_enable,
    .atomic_disable = nwl_dsi_bridge_atomic_disable,
    + .atomic_get_input_bus_fmts = nwl_bridge_atomic_get_input_bus_fmts,
    .mode_set = nwl_dsi_bridge_mode_set,
    .mode_valid = nwl_dsi_bridge_mode_valid,
    .attach = nwl_dsi_bridge_attach,
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 02:11    [W:4.782 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site