aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/tegra/dc/dsi.h
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-22 10:38:37 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-22 10:38:37 -0500
commitfcc9d2e5a6c89d22b8b773a64fb4ad21ac318446 (patch)
treea57612d1888735a2ec7972891b68c1ac5ec8faea /drivers/video/tegra/dc/dsi.h
parent8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff)
Added missing tegra files.HEADmaster
Diffstat (limited to 'drivers/video/tegra/dc/dsi.h')
-rw-r--r--drivers/video/tegra/dc/dsi.h375
1 files changed, 375 insertions, 0 deletions
diff --git a/drivers/video/tegra/dc/dsi.h b/drivers/video/tegra/dc/dsi.h
new file mode 100644
index 00000000000..18ea9c959e8
--- /dev/null
+++ b/drivers/video/tegra/dc/dsi.h
@@ -0,0 +1,375 @@
1/*
2 * drivers/video/tegra/dc/dsi.h
3 *
4 * Copyright (c) 2011, NVIDIA Corporation.
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#ifndef __DRIVERS_VIDEO_TEGRA_DC_DSI_H__
18#define __DRIVERS_VIDEO_TEGRA_DC_DSI_H__
19
20/* source of video data */
21enum {
22 TEGRA_DSI_VIDEO_DRIVEN_BY_DC,
23 TEGRA_DSI_VIDEO_DRIVEN_BY_HOST,
24};
25
26/* Max number of data lanes supported */
27#define MAX_DSI_DATA_LANES 2
28/* Default Peripheral reset timeout */
29#define DSI_PR_TO_VALUE 0x2000
30
31/* DCS commands for command mode */
32#define DSI_ENTER_PARTIAL_MODE 0x12
33#define DSI_SET_PIXEL_FORMAT 0x3A
34#define DSI_AREA_COLOR_MODE 0x4C
35#define DSI_SET_PARTIAL_AREA 0x30
36#define DSI_SET_PAGE_ADDRESS 0x2B
37#define DSI_SET_ADDRESS_MODE 0x36
38#define DSI_SET_COLUMN_ADDRESS 0x2A
39#define DSI_WRITE_MEMORY_START 0x2C
40#define DSI_WRITE_MEMORY_CONTINUE 0x3C
41#define DSI_MAX_COMMAND_DELAY_USEC 250000
42#define DSI_COMMAND_DELAY_STEPS_USEC 10
43
44/* Trigger message */
45#define DSI_ESCAPE_CMD 0x87
46#define DSI_ACK_NO_ERR 0x84
47
48/* DSI return packet types */
49#define GEN_LONG_RD_RES 0x1A
50#define DCS_LONG_RD_RES 0x1C
51#define GEN_1_BYTE_SHORT_RD_RES 0x11
52#define DCS_1_BYTE_SHORT_RD_RES 0x21
53#define GEN_2_BYTE_SHORT_RD_RES 0x12
54#define DCS_2_BYTE_SHORT_RD_RES 0x22
55#define ACK_ERR_RES 0x02
56
57/* End of Transmit command for HS mode */
58#define DSI_CMD_HS_EOT_PACKAGE 0x000F0F08
59
60/* Delay required after issuing the trigger*/
61#define DSI_COMMAND_COMPLETION_DELAY_USEC 5
62
63#define DSI_DELAY_FOR_READ_FIFO 5
64
65/* Dsi virtual channel bit position, refer to the DSI specs */
66#define DSI_VIR_CHANNEL_BIT_POSITION 6
67
68/* DSI packet commands from Host to peripherals */
69enum {
70 dsi_command_v_sync_start = 0x01,
71 dsi_command_v_sync_end = 0x11,
72 dsi_command_h_sync_start = 0x21,
73 dsi_command_h_sync_end = 0x31,
74 dsi_command_end_of_transaction = 0x08,
75 dsi_command_blanking = 0x19,
76 dsi_command_null_packet = 0x09,
77 dsi_command_h_active_length_16bpp = 0x0E,
78 dsi_command_h_active_length_18bpp = 0x1E,
79 dsi_command_h_active_length_18bpp_np = 0x2E,
80 dsi_command_h_active_length_24bpp = 0x3E,
81 dsi_command_h_sync_active = dsi_command_blanking,
82 dsi_command_h_back_porch = dsi_command_blanking,
83 dsi_command_h_front_porch = dsi_command_blanking,
84 dsi_command_writ_no_param = 0x05,
85 dsi_command_long_write = 0x39,
86 dsi_command_max_return_pkt_size = 0x37,
87 dsi_command_generic_read_request_with_2_param = 0x24,
88 dsi_command_dcs_read_with_no_params = 0x06,
89};
90
91/* Maximum polling time for reading the dsi status register */
92#define DSI_STATUS_POLLING_DURATION_USEC 100000
93#define DSI_STATUS_POLLING_DELAY_USEC 100
94
95/*
96 * Horizontal Sync Blank Packet Over head
97 * DSI_overhead = size_of(HS packet header)
98 * + size_of(BLANK packet header) + size_of(checksum)
99 * DSI_overhead = 4 + 4 + 2 = 10
100 */
101#define DSI_HSYNC_BLNK_PKT_OVERHEAD 10
102
103/*
104 * Horizontal Front Porch Packet Overhead
105 * DSI_overhead = size_of(checksum)
106 * + size_of(BLANK packet header) + size_of(checksum)
107 * DSI_overhead = 2 + 4 + 2 = 8
108 */
109#define DSI_HFRONT_PORCH_PKT_OVERHEAD 8
110
111/*
112 * Horizontal Back Porch Packet
113 * DSI_overhead = size_of(HE packet header)
114 * + size_of(BLANK packet header) + size_of(checksum)
115 * + size_of(RGB packet header)
116 * DSI_overhead = 4 + 4 + 2 + 4 = 14
117 */
118#define DSI_HBACK_PORCH_PKT_OVERHEAD 14
119
120/* Additional Hs TX timeout margin */
121#define DSI_HTX_TO_MARGIN 720
122
123#define DSI_CYCLE_COUNTER_VALUE 512
124
125#define DSI_LRXH_TO_VALUE 0x2000
126
127/* Turn around timeout terminal count */
128#define DSI_TA_TO_VALUE 0x2000
129
130/* Turn around timeout tally */
131#define DSI_TA_TALLY_VALUE 0x0
132/* LP Rx timeout tally */
133#define DSI_LRXH_TALLY_VALUE 0x0
134/* HS Tx Timeout tally */
135#define DSI_HTX_TALLY_VALUE 0x0
136
137/* DSI Power control settle time 10 micro seconds */
138#define DSI_POWER_CONTROL_SETTLE_TIME_US 10
139
140#define DSI_HOST_FIFO_DEPTH 64
141#define DSI_VIDEO_FIFO_DEPTH 480
142#define DSI_READ_FIFO_DEPTH (32 << 2)
143
144#define NUMOF_BIT_PER_BYTE 8
145#define DEFAULT_LP_CMD_MODE_CLK_KHZ 10000
146#define DEFAULT_MAX_DSI_PHY_CLK_KHZ (500*1000)
147#define DEFAULT_PANEL_RESET_TIMEOUT 2
148#define DEFAULT_PANEL_BUFFER_BYTE 512
149
150/*
151 * TODO: are DSI_HOST_DSI_CONTROL_CRC_RESET(RESET_CRC) and
152 * DSI_HOST_DSI_CONTROL_HOST_TX_TRIG_SRC(IMMEDIATE) required for everyone?
153 */
154#define HOST_DSI_CTRL_COMMON \
155 (DSI_HOST_DSI_CONTROL_PHY_CLK_DIV(DSI_PHY_CLK_DIV1) | \
156 DSI_HOST_DSI_CONTROL_ULTRA_LOW_POWER(NORMAL) | \
157 DSI_HOST_DSI_CONTROL_PERIPH_RESET(TEGRA_DSI_DISABLE) | \
158 DSI_HOST_DSI_CONTROL_RAW_DATA(TEGRA_DSI_DISABLE) | \
159 DSI_HOST_DSI_CONTROL_IMM_BTA(TEGRA_DSI_DISABLE) | \
160 DSI_HOST_DSI_CONTROL_PKT_BTA(TEGRA_DSI_DISABLE) | \
161 DSI_HOST_DSI_CONTROL_CS_ENABLE(TEGRA_DSI_ENABLE) | \
162 DSI_HOST_DSI_CONTROL_ECC_ENABLE(TEGRA_DSI_ENABLE) | \
163 DSI_HOST_DSI_CONTROL_PKT_WR_FIFO_SEL(HOST_ONLY))
164
165#define HOST_DSI_CTRL_HOST_DRIVEN \
166 (DSI_HOST_DSI_CONTROL_CRC_RESET(RESET_CRC) | \
167 DSI_HOST_DSI_CONTROL_HOST_TX_TRIG_SRC(IMMEDIATE))
168
169#define HOST_DSI_CTRL_DC_DRIVEN 0
170
171#define DSI_CTRL_HOST_DRIVEN (DSI_CONTROL_VID_ENABLE(TEGRA_DSI_DISABLE) | \
172 DSI_CONTROL_HOST_ENABLE(TEGRA_DSI_ENABLE))
173
174#define DSI_CTRL_DC_DRIVEN (DSI_CONTROL_VID_TX_TRIG_SRC(SOL) | \
175 DSI_CONTROL_VID_ENABLE(TEGRA_DSI_ENABLE) | \
176 DSI_CONTROL_HOST_ENABLE(TEGRA_DSI_DISABLE))
177
178#define DSI_CTRL_CMD_MODE (DSI_CONTROL_VID_DCS_ENABLE(TEGRA_DSI_ENABLE))
179
180#define DSI_CTRL_VIDEO_MODE (DSI_CONTROL_VID_DCS_ENABLE(TEGRA_DSI_DISABLE))
181
182
183enum {
184 CMD_VS = 0x01,
185 CMD_VE = 0x11,
186
187 CMD_HS = 0x21,
188 CMD_HE = 0x31,
189
190 CMD_EOT = 0x08,
191 CMD_NULL = 0x09,
192 CMD_SHORTW = 0x15,
193 CMD_BLNK = 0x19,
194 CMD_LONGW = 0x39,
195
196 CMD_RGB = 0x00,
197 CMD_RGB_16BPP = 0x0E,
198 CMD_RGB_18BPP = 0x1E,
199 CMD_RGB_18BPPNP = 0x2E,
200 CMD_RGB_24BPP = 0x3E,
201};
202
203#define PKT_ID0(id) (DSI_PKT_SEQ_0_LO_PKT_00_ID(id) | \
204 DSI_PKT_SEQ_1_LO_PKT_10_EN(TEGRA_DSI_ENABLE))
205#define PKT_LEN0(len) (DSI_PKT_SEQ_0_LO_PKT_00_SIZE(len))
206
207#define PKT_ID1(id) (DSI_PKT_SEQ_0_LO_PKT_01_ID(id) | \
208 DSI_PKT_SEQ_1_LO_PKT_11_EN(TEGRA_DSI_ENABLE))
209#define PKT_LEN1(len) (DSI_PKT_SEQ_0_LO_PKT_01_SIZE(len))
210
211#define PKT_ID2(id) (DSI_PKT_SEQ_0_LO_PKT_02_ID(id) | \
212 DSI_PKT_SEQ_1_LO_PKT_12_EN(TEGRA_DSI_ENABLE))
213#define PKT_LEN2(len) (DSI_PKT_SEQ_0_LO_PKT_02_SIZE(len))
214
215#define PKT_ID3(id) (DSI_PKT_SEQ_0_HI_PKT_03_ID(id) | \
216 DSI_PKT_SEQ_1_HI_PKT_13_EN(TEGRA_DSI_ENABLE))
217#define PKT_LEN3(len) (DSI_PKT_SEQ_0_HI_PKT_03_SIZE(len))
218
219#define PKT_ID4(id) (DSI_PKT_SEQ_0_HI_PKT_04_ID(id) | \
220 DSI_PKT_SEQ_1_HI_PKT_14_EN(TEGRA_DSI_ENABLE))
221#define PKT_LEN4(len) (DSI_PKT_SEQ_0_HI_PKT_04_SIZE(len))
222
223#define PKT_ID5(id) (DSI_PKT_SEQ_0_HI_PKT_05_ID(id) | \
224 DSI_PKT_SEQ_1_HI_PKT_15_EN(TEGRA_DSI_ENABLE))
225#define PKT_LEN5(len) (DSI_PKT_SEQ_0_HI_PKT_05_SIZE(len))
226
227#define PKT_LP (DSI_PKT_SEQ_0_LO_SEQ_0_FORCE_LP(TEGRA_DSI_ENABLE))
228
229#define NUMOF_PKT_SEQ 12
230
231/* Mipi v1.00.00 phy timing range */
232#define NOT_DEFINED -1
233#define MIPI_T_HSEXIT_NS_MIN 100
234#define MIPI_T_HSEXIT_NS_MAX NOT_DEFINED
235#define MIPI_T_HSTRAIL_NS_MIN(clk_ns) max((8 * (clk_ns)), (60 + 4 * (clk_ns)))
236#define MIPI_T_HSTRAIL_NS_MAX NOT_DEFINED
237#define MIPI_T_HSZERO_NS_MIN NOT_DEFINED
238#define MIPI_T_HSZERO_NS_MAX NOT_DEFINED
239#define MIPI_T_HSPREPARE_NS_MIN(clk_ns) (40 + 4 * (clk_ns))
240#define MIPI_T_HSPREPARE_NS_MAX(clk_ns) (85 + 6 * (clk_ns))
241#define MIPI_T_CLKTRAIL_NS_MIN 60
242#define MIPI_T_CLKTRAIL_NS_MAX NOT_DEFINED
243#define MIPI_T_CLKPOST_NS_MIN(clk_ns) (60 + 52 * (clk_ns))
244#define MIPI_T_CLKPOST_NS_MAX NOT_DEFINED
245#define MIPI_T_CLKZERO_NS_MIN NOT_DEFINED
246#define MIPI_T_CLKZERO_NS_MAX NOT_DEFINED
247#define MIPI_T_TLPX_NS_MIN 50
248#define MIPI_T_TLPX_NS_MAX NOT_DEFINED
249#define MIPI_T_CLKPREPARE_NS_MIN 38
250#define MIPI_T_CLKPREPARE_NS_MAX 95
251#define MIPI_T_CLKPRE_NS_MIN 8
252#define MIPI_T_CLKPRE_NS_MAX NOT_DEFINED
253#define MIPI_T_WAKEUP_NS_MIN 1
254#define MIPI_T_WAKEUP_NS_MAX NOT_DEFINED
255#define MIPI_T_TASURE_NS_MIN(tlpx_ns) (tlpx_ns)
256#define MIPI_T_TASURE_NS_MAX(tlpx_ns) (2 * (tlpx_ns))
257#define MIPI_T_HSPREPARE_ADD_HSZERO_NS_MIN(clk_ns) (145 + 10 * (clk_ns))
258#define MIPI_T_HSPREPARE_ADD_HSZERO_NS_MAX NOT_DEFINED
259#define MIPI_T_CLKPREPARE_ADD_CLKZERO_NS_MIN 300
260#define MIPI_T_CLKPREPARE_ADD_CLKZERO_NS_MAX NOT_DEFINED
261
262#define DSI_TBYTE(clk_ns) ((clk_ns) * (BITS_PER_BYTE))
263#define DSI_CONVERT_T_PHY_NS_TO_T_PHY(t_phy_ns, clk_ns, hw_inc) \
264 ((int)((DIV_ROUND_CLOSEST((t_phy_ns), \
265 (DSI_TBYTE(clk_ns)))) - (hw_inc)))
266
267#define DSI_CONVERT_T_PHY_TO_T_PHY_NS(t_phy, clk_ns, hw_inc) \
268 (((t_phy) + (hw_inc)) * (DSI_TBYTE(clk_ns)))
269
270/* Default phy timing in ns */
271#define T_HSEXIT_NS_DEFAULT 120
272#define T_HSTRAIL_NS_DEFAULT(clk_ns) \
273 max((8 * (clk_ns)), (60 + 4 * (clk_ns)))
274
275#define T_DATZERO_NS_DEFAULT(clk_ns) (145 + 5 * (clk_ns))
276#define T_HSPREPARE_NS_DEFAULT(clk_ns) (65 + 5 * (clk_ns))
277#define T_CLKTRAIL_NS_DEFAULT 80
278#define T_CLKPOST_NS_DEFAULT(clk_ns) (70 + 52 * (clk_ns))
279#define T_CLKZERO_NS_DEFAULT 260
280#define T_TLPX_NS_DEFAULT 60
281#define T_CLKPREPARE_NS_DEFAULT 65
282#define T_TAGO_NS_DEFAULT (4 * (T_TLPX_NS_DEFAULT))
283#define T_TASURE_NS_DEFAULT (2 * (T_TLPX_NS_DEFAULT))
284#define T_TAGET_NS_DEFAULT (5 * (T_TLPX_NS_DEFAULT))
285
286/* HW increment to phy register values */
287#define T_HSEXIT_HW_INC 1
288#define T_HSTRAIL_HW_INC 0
289#define T_DATZERO_HW_INC 3
290#define T_HSPREPARE_HW_INC 1
291#define T_CLKTRAIL_HW_INC 1
292#define T_CLKPOST_HW_INC 1
293#define T_CLKZERO_HW_INC 1
294#define T_TLPX_HW_INC 1
295#define T_CLKPREPARE_HW_INC 1
296#define T_TAGO_HW_INC 1
297#define T_TASURE_HW_INC 1
298#define T_TAGET_HW_INC 1
299#define T_CLKPRE_HW_INC 1
300#define T_WAKEUP_HW_INC 1
301
302/* Default phy timing reg values */
303#define T_HSEXIT_DEFAULT(clk_ns) \
304(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
305T_HSEXIT_NS_DEFAULT, clk_ns, T_HSEXIT_HW_INC))
306
307#define T_HSTRAIL_DEFAULT(clk_ns) \
308(3 + (DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
309T_HSTRAIL_NS_DEFAULT(clk_ns), clk_ns, T_HSTRAIL_HW_INC)))
310
311#define T_DATZERO_DEFAULT(clk_ns) \
312(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
313T_DATZERO_NS_DEFAULT(clk_ns), clk_ns, T_DATZERO_HW_INC))
314
315#define T_HSPREPARE_DEFAULT(clk_ns) \
316(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
317T_HSPREPARE_NS_DEFAULT(clk_ns), clk_ns, T_HSPREPARE_HW_INC))
318
319#define T_CLKTRAIL_DEFAULT(clk_ns) \
320(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
321T_CLKTRAIL_NS_DEFAULT, clk_ns, T_CLKTRAIL_HW_INC))
322
323#define T_CLKPOST_DEFAULT(clk_ns) \
324(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
325T_CLKPOST_NS_DEFAULT(clk_ns), clk_ns, T_CLKPOST_HW_INC))
326
327#define T_CLKZERO_DEFAULT(clk_ns) \
328(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
329T_CLKZERO_NS_DEFAULT, clk_ns, T_CLKZERO_HW_INC))
330
331#define T_TLPX_DEFAULT(clk_ns) \
332(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
333T_TLPX_NS_DEFAULT, clk_ns, T_TLPX_HW_INC))
334
335#define T_CLKPREPARE_DEFAULT(clk_ns) \
336(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
337T_CLKPREPARE_NS_DEFAULT, clk_ns, T_CLKPREPARE_HW_INC))
338
339#define T_CLKPRE_DEFAULT 0x1
340#define T_WAKEUP_DEFAULT 0x7f
341
342#define T_TAGO_DEFAULT(clk_ns) \
343(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
344T_TAGO_NS_DEFAULT, clk_ns, T_TAGO_HW_INC))
345
346#define T_TASURE_DEFAULT(clk_ns) \
347(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
348T_TASURE_NS_DEFAULT, clk_ns, T_TASURE_HW_INC))
349
350#define T_TAGET_DEFAULT(clk_ns) \
351(DSI_CONVERT_T_PHY_NS_TO_T_PHY( \
352T_TAGET_NS_DEFAULT, clk_ns, T_TAGET_HW_INC))
353
354/* Defines the DSI phy timing parameters */
355struct dsi_phy_timing_inclk {
356 unsigned t_hsdexit;
357 unsigned t_hstrail;
358 unsigned t_hsprepare;
359 unsigned t_datzero;
360
361 unsigned t_clktrail;
362 unsigned t_clkpost;
363 unsigned t_clkzero;
364 unsigned t_tlpx;
365
366 unsigned t_clkpre;
367 unsigned t_clkprepare;
368 unsigned t_wakeup;
369
370 unsigned t_taget;
371 unsigned t_tasure;
372 unsigned t_tago;
373};
374
375#endif