lkml.org 
[lkml]   [2024]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2 2/2] drm/bridge: samsung-dsim: Fix porch calcalcuation rounding
    Date
    When using video sync pulses, the HFP, HBP, and HSA are divided between
    the available lanes if there is more than one lane. For certain
    timings and lane configurations, the HFP may not be evenly divisible.
    If the HFP is rounded down, it ends up being too small which can cause
    some monitors to not sync properly. In these instances, adjust htotal
    and hsync to round the HFP up, and recalculate the htotal.

    Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de> # Kontron BL i.MX8MM with HDMI monitor
    Signed-off-by: Adam Ford <aford173@gmail.com>
    ---
    V2: No changes

    diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
    index 8476650c477c..52939211fe93 100644
    --- a/drivers/gpu/drm/bridge/samsung-dsim.c
    +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
    @@ -1606,6 +1606,27 @@ static int samsung_dsim_atomic_check(struct drm_bridge *bridge,
    adjusted_mode->flags |= (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
    }

    + /*
    + * When using video sync pulses, the HFP, HBP, and HSA are divided between
    + * the available lanes if there is more than one lane. For certain
    + * timings and lane configurations, the HFP may not be evenly divisible.
    + * If the HFP is rounded down, it ends up being too small which can cause
    + * some monitors to not sync properly. In these instances, adjust htotal
    + * and hsync to round the HFP up, and recalculate the htotal. Through trial
    + * and error, it appears that the HBP and HSA do not appearto need the same
    + * correction that HFP does.
    + */
    + if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE && dsi->lanes > 1) {
    + int hfp = adjusted_mode->hsync_start - adjusted_mode->hdisplay;
    + int remainder = hfp % dsi->lanes;
    +
    + if (remainder) {
    + adjusted_mode->hsync_start += remainder;
    + adjusted_mode->hsync_end += remainder;
    + adjusted_mode->htotal += remainder;
    + }
    + }
    +
    return 0;
    }

    --
    2.43.0

    \
     
     \ /
      Last update: 2024-02-12 00:10    [W:4.967 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site