a3af90d959b0fc6b50c6d08a57ab165a783c1320
[openembedded.git] /
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
5
6 Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
7 ---
8  drivers/video/omap2/dss/dsi.c |   37 +++++++++++++++++++++----------------
9  1 files changed, 21 insertions(+), 16 deletions(-)
10
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 */
17  
18         /* min 40ns + 4*UI      max 85ns + 6*UI */
19 -       ths_prepare = ns2ddr(59) + 2;
20 +       ths_prepare = ns2ddr(70) + 2;
21  
22         /* min 145ns + 10*UI */
23 -       ths_prepare_ths_zero = ns2ddr(145) + 5;
24 +       ths_prepare_ths_zero = ns2ddr(175) + 2;
25  
26         /* min max(8*UI, 60ns+4*UI) */
27 -       ths_trail = max((unsigned)4, ns2ddr(60) + 2);
28 +       ths_trail = ns2ddr(60) + 5;
29  
30         /* min 100ns */
31 -       ths_exit = ns2ddr(100);
32 +       ths_exit = ns2ddr(145);
33  
34         /* tlpx min 50n */
35         tlpx_half = ns2ddr(25);
36  
37         /* min 60ns */
38 -       tclk_trail = ns2ddr(60);
39 +       tclk_trail = ns2ddr(60) + 2;
40  
41         /* min 38ns, max 95ns */
42 -       tclk_prepare = ns2ddr(38);
43 +       tclk_prepare = ns2ddr(65);
44  
45         /* min tclk-prepare + tclk-zero = 300ns */
46 -       tclk_zero = ns2ddr(300 - 38);
47 +       tclk_zero = ns2ddr(260);
48  
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;
54  
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)
58 +               ths_eot = 2;
59 +       else
60 +               ths_eot = 4;
61 +
62         ddr_clk_pre = DIV_ROUND_UP(tclk_pre + tlpx + tclk_zero + tclk_prepare,
63                         4);
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;
66 +
67 +       BUG_ON(ddr_clk_pre == 0 || ddr_clk_pre > 255);
68 +       BUG_ON(ddr_clk_post == 0 || ddr_clk_post > 255);
69  
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)
73                         ddr_clk_pre,
74                         ddr_clk_post);
75  
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)
79 -               ths_eot = 2;
80 -       else
81 -               ths_eot = 4;
82 -
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;
88  
89         r = FLD_VAL(enter_hs_mode_lat, 31, 16) |
90 -- 
91 1.6.2.4
92