lkml.org 
[lkml]   [2023]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V7 1/6] drm: bridge: samsung-dsim: fix blanking packet size calculation
    Date
    From: Lucas Stach <l.stach@pengutronix.de>

    Scale the blanking packet sizes to match the ratio between HS clock
    and DPI interface clock. The controller seems to do internal scaling
    to the number of active lanes, so we don't take those into account.

    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Signed-off-by: Adam Ford <aford173@gmail.com>
    Tested-by: Chen-Yu Tsai <wenst@chromium.org>
    Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>
    Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
    Tested-by: Jagan Teki <jagan@amarulasolutions.com> # imx8mm-icore
    ---
    drivers/gpu/drm/bridge/samsung-dsim.c | 18 +++++++++++++++---
    1 file changed, 15 insertions(+), 3 deletions(-)

    diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
    index e0a402a85787..2be3b58624c3 100644
    --- a/drivers/gpu/drm/bridge/samsung-dsim.c
    +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
    @@ -874,17 +874,29 @@ static void samsung_dsim_set_display_mode(struct samsung_dsim *dsi)
    u32 reg;

    if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) {
    + int byte_clk_khz = dsi->burst_clk_rate / 1000 / 8;
    + int hfp = (m->hsync_start - m->hdisplay) * byte_clk_khz / m->clock;
    + int hbp = (m->htotal - m->hsync_end) * byte_clk_khz / m->clock;
    + int hsa = (m->hsync_end - m->hsync_start) * byte_clk_khz / m->clock;
    +
    + /* remove packet overhead when possible */
    + hfp = max(hfp - 6, 0);
    + hbp = max(hbp - 6, 0);
    + hsa = max(hsa - 6, 0);
    +
    + dev_dbg(dsi->dev, "calculated hfp: %u, hbp: %u, hsa: %u",
    + hfp, hbp, hsa);
    +
    reg = DSIM_CMD_ALLOW(0xf)
    | DSIM_STABLE_VFP(m->vsync_start - m->vdisplay)
    | DSIM_MAIN_VBP(m->vtotal - m->vsync_end);
    samsung_dsim_write(dsi, DSIM_MVPORCH_REG, reg);

    - reg = DSIM_MAIN_HFP(m->hsync_start - m->hdisplay)
    - | DSIM_MAIN_HBP(m->htotal - m->hsync_end);
    + reg = DSIM_MAIN_HFP(hfp) | DSIM_MAIN_HBP(hbp);
    samsung_dsim_write(dsi, DSIM_MHPORCH_REG, reg);

    reg = DSIM_MAIN_VSA(m->vsync_end - m->vsync_start)
    - | DSIM_MAIN_HSA(m->hsync_end - m->hsync_start);
    + | DSIM_MAIN_HSA(hsa);
    samsung_dsim_write(dsi, DSIM_MSYNC_REG, reg);
    }
    reg = DSIM_MAIN_HRESOL(m->hdisplay, num_bits_resol) |
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-05-19 01:07    [W:3.987 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site