Hi, On Wed, 2019-01-23 at 16:54 +0100, Maxime Ripard wrote: > The current calculation for the video start delay in the current DSI driver > is that it is the total vertical size, minus the backporch and sync length, > plus 1. > > However, the Allwinner code has it as the active vertical size, plus the > back porch and the sync length. This doesn't make any difference on the > only panel it has been tested with so far, since in that particular case > the front porch is equal to the sum of the back porch and sync length. > > This is not the case for all panels, obviously, so we need to fix it. Since > the Allwinner code has a bunch of extra code to deal with out of bounds > values, so let's add them as well. > > Signed-off-by: Maxime Ripard <maxime.ripard@xxxxxxxxxxx> > --- > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c > index 380fc527a707..e3e4ba90c059 100644 > --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c > +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c > @@ -357,7 +357,12 @@ static void sun6i_dsi_inst_init(struct sun6i_dsi *dsi, > static u16 sun6i_dsi_get_video_start_delay(struct sun6i_dsi *dsi, > struct drm_display_mode *mode) > { > - return mode->vtotal - (mode->vsync_end - mode->vdisplay) + 1; > + u16 delay = (mode->vsync_end + 1) % mode->vtotal; > + > + if (!delay) > + delay = 1; For increased clarity, you might want to change this last block to: delay = max(delay, 1); Cheers, Paul > + return delay; > } > > static void sun6i_dsi_setup_burst(struct sun6i_dsi *dsi, -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel