在 2019-10-06日的 22:44 +0800,Icenowy Zheng写道:
在 2019-10-03四的 09:53 +0530,Jagan Teki写道:
Hi Wens,
On Tue, Oct 1, 2019 at 1:34 PM Icenowy Zheng icenowy@aosc.io wrote:
This reverts commit 62e7511a4f4dcf07f753893d3424decd9466c98b.
This commit, although claimed as a refactor, in fact changed the formula.
By expanding the original formula, we can find that the const 10 is not substracted, instead it's added to the value (because 10 is negative when calculating hsa, and hsa itself is negative when calculating hblk). This breaks the similar pattern to other formulas, so restoring the original formula is more proper.
Signed-off-by: Icenowy Zheng icenowy@aosc.io
drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c index 2d3e822a7739..cb5fd19c0d0d 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c @@ -577,14 +577,9 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, (mode->hsync_start - mode->hdisplay) * Bpp - HFP_PACKET_OVERHEAD);
/*
* The blanking is set using a sync event (4
bytes)
* and a blanking packet (4 bytes + payload + 2
* bytes). Its minimal size is therefore 10
bytes.
* hblk seems to be the line + porches length. */
-#define HBLK_PACKET_OVERHEAD 10
hblk = max((unsigned int)HBLK_PACKET_OVERHEAD,
(mode->htotal - (mode->hsync_end -
mode-
hsync_start)) * Bpp -
HBLK_PACKET_OVERHEAD);
hblk = mode->htotal * Bpp - hsa;
The original formula is correct according to BSP [1] and work with my panels which I have tested before. May be the horizontal timings on panels you have leads to negative value.
Do you tested the same timing with BSP kernel?
It's quite difficult to get a negative value here, because the value is quite big (includes mode->hdisplay * Bpp).
By re-checking with the BSP source code, I found that the constant in the HFP formula is indeed wrong -- it should be 16, not 6.
Strangely, only change the formula here back makes the timing translated from FEX file works (tested on PineTab and PinePhone production ver). The translation rule is from [1].
So I still insist on the patch because it's needed by experiment.
[1] http://linux-sunxi.org/LCD
[1] https://github.com/ayufan-pine64/linux-pine64/blob/my-hacks-1.2-with-drm/dri...