1 From 0201b40018d9e264f8c4ea7871223c94e0de61b1 Mon Sep 17 00:00:00 2001
2 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
3 Date: Thu, 7 May 2009 14:32:55 +0300
4 Subject: [PATCH 66/69] DSS2: DSI: tune the timings to be more relaxed
6 Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
8 drivers/video/omap2/dss/dsi.c | 37 +++++++++++++++++++++----------------
9 1 files changed, 21 insertions(+), 16 deletions(-)
11 diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
12 index 5225ed6..67ecfcf 100644
13 --- a/drivers/video/omap2/dss/dsi.c
14 +++ b/drivers/video/omap2/dss/dsi.c
15 @@ -1396,28 +1396,28 @@ static void dsi_complexio_timings(void)
16 /* 1 * DDR_CLK = 2 * UI */
18 /* min 40ns + 4*UI max 85ns + 6*UI */
19 - ths_prepare = ns2ddr(59) + 2;
20 + ths_prepare = ns2ddr(70) + 2;
22 /* min 145ns + 10*UI */
23 - ths_prepare_ths_zero = ns2ddr(145) + 5;
24 + ths_prepare_ths_zero = ns2ddr(175) + 2;
26 /* min max(8*UI, 60ns+4*UI) */
27 - ths_trail = max((unsigned)4, ns2ddr(60) + 2);
28 + ths_trail = ns2ddr(60) + 5;
31 - ths_exit = ns2ddr(100);
32 + ths_exit = ns2ddr(145);
35 tlpx_half = ns2ddr(25);
38 - tclk_trail = ns2ddr(60);
39 + tclk_trail = ns2ddr(60) + 2;
41 /* min 38ns, max 95ns */
42 - tclk_prepare = ns2ddr(38);
43 + tclk_prepare = ns2ddr(65);
45 /* min tclk-prepare + tclk-zero = 300ns */
46 - tclk_zero = ns2ddr(300 - 38);
47 + tclk_zero = ns2ddr(260);
49 DSSDBG("ths_prepare %u (%uns), ths_prepare_ths_zero %u (%uns)\n",
50 ths_prepare, ddr2ns(ths_prepare),
51 @@ -2340,9 +2340,19 @@ static void dsi_proto_timings(struct omap_display *display)
52 /* min 60ns + 52*UI */
53 tclk_post = ns2ddr(60) + 26;
55 + /* ths_eot is 2 for 2 datalanes and 4 for 1 datalane */
56 + if (display->hw_config.u.dsi.data1_lane != 0 &&
57 + display->hw_config.u.dsi.data2_lane != 0)
62 ddr_clk_pre = DIV_ROUND_UP(tclk_pre + tlpx + tclk_zero + tclk_prepare,
64 - ddr_clk_post = DIV_ROUND_UP(tclk_post + tclk_trail, 4);
65 + ddr_clk_post = DIV_ROUND_UP(tclk_post + tclk_trail, 4) + ths_eot;
67 + BUG_ON(ddr_clk_pre == 0 || ddr_clk_pre > 255);
68 + BUG_ON(ddr_clk_post == 0 || ddr_clk_post > 255);
70 r = dsi_read_reg(DSI_CLK_TIMING);
71 r = FLD_MOD(r, ddr_clk_pre, 15, 8);
72 @@ -2353,14 +2363,9 @@ static void dsi_proto_timings(struct omap_display *display)
76 - /* ths_eot is 2 for 2 datalanes and 4 for 1 datalane */
77 - if (display->hw_config.u.dsi.data1_lane != 0 &&
78 - display->hw_config.u.dsi.data2_lane != 0)
83 - enter_hs_mode_lat = DIV_ROUND_UP(tlpx + ths_prepare + ths_zero, 4) + 4;
84 + enter_hs_mode_lat = 1 + DIV_ROUND_UP(tlpx, 4) +
85 + DIV_ROUND_UP(ths_prepare, 4) +
86 + DIV_ROUND_UP(ths_zero + 3, 4);
87 exit_hs_mode_lat = DIV_ROUND_UP(ths_trail + ths_exit, 4) + 1 + ths_eot;
89 r = FLD_VAL(enter_hs_mode_lat, 31, 16) |