1/*
2 * Copyright 2010 Michael Zucchi.
3 * Distributed under the terms of the MIT License.
4 *
5 */
6#ifndef _OMAP3_VIDEO_H
7#define _OMAP3_VIDEO_H
8
9/* ********************************************************************** */
10/* S 1.7.2 Display Subsystem & SDI Registers */
11
12#define DSS_BASE 0x48050000
13
14#define DSS_SYSCONFIG 0x010
15#define DSS_SYSSTATUS 0x014
16#define DSS_IRQSTATUS 0x018
17#define DSS_CONTROL 0x040
18#define DSS_SDI_CONTROL 0x044
19#define DSS_PLL_CONTROL 0x048
20#define DSS_SDI_STATUS 0x05C
21
22/* SYSCONFIG bits */
23#define DSS_AUTOIDLE 1
24#define DSS_SOFTRESET 2
25/* SYSSTATUS bits */
26#define DSS_RESETDONE 1
27/* CONTROL bits */
28#define DSS_VENC_OUT_SEL (1<<6)	/* set s-video */
29#define DSS_DAC_POWERDN_BGZ (1<<5)
30#define DSS_DAC_DEMEN (1<<4)
31#define DSS_VENC_CLOCK_4X_ENABLE (1<<3)
32#define DSS_VENC_CLOCK_MODE (1<<2) /* set square pixel */
33#define DSS_DSI_CLK_SWITCH (1<<1) /* select DSI2 PLL FCLK otherwise DSS1 ALWON FCLK */
34#define DSS_DSS1_CLK_SWITCH (1<<0) /* same */
35
36/* ********************************************************************** */
37/* S 1.7.3 Display controller */
38
39#define DISPC_BASE 0x48050400
40
41#define DISPC_SYSCONFIG 0x010
42#define DISPC_SYSSTATUS 0x014
43#define DISPC_IRQSTATUS 0x018
44#define DISPC_IRQENABLE 0x01C
45#define DISPC_CONTROL 0x040
46#define DISPC_CONFIG 0x044
47#define DISPC_DEFAULT_COLOR0 0x04c
48#define DISPC_DEFAULT_COLOR1 0x050
49#define DISPC_TRANS_COLOR0 0x54
50#define DISPC_TRANS_COLOR1 0x58
51#define DISPC_LINE_STATUS 0x05C
52#define DISPC_LINE_NUMBER 0x060
53#define DISPC_TIMING_H 0x064
54#define DISPC_TIMING_V 0x068
55#define DISPC_POL_FREQ 0x06C
56#define DISPC_DIVISOR 0x070
57#define DISPC_GLOBAL_ALPHA 0x074
58#define DISPC_SIZE_DIG 0x078
59#define DISPC_SIZE_LCD 0x07C
60
61#define DISPC_GFX_BA0 0x080
62#define DISPC_GFX_BA1 0x084
63#define DISPC_GFX_POSITION 0x088
64#define DISPC_GFX_SIZE 0x08C
65#define DISPC_GFX_ATTRIBUTES 0x0A0
66#define DISPC_GFX_FIFO_THRESHOLD 0x0A4
67#define DISPC_GFX_FIFO_SIZE_STATUS 0x0A8
68#define DISPC_GFX_ROW_INC 0x0AC
69#define DISPC_GFX_PIXEL_INC 0x0B0
70#define DISPC_GFX_WINDOW_SKIP 0x0B4
71#define DISPC_GFX_TABLE_BA 0x0B8
72
73#define DISPC_VID1_BA0 0x0BC
74#define DISPC_VID1_BA1 0x0C0
75#define DISPC_VID2_BA0 0x14C
76#define DISPC_VID2_BA1 0x150
77
78#define DISPC_VID1_POSITION 0x0C4
79#define DISPC_VID2_POSITION (0x0C4+0x90)
80#define DISPC_VID1_SIZE 0x0C8
81#define DISPC_VID2_SIZE (0x0C8+0x90)
82#define DISPC_VID1_ATTRIBUTES 0x0CC
83#define DISPC_VID2_ATTRIBUTES (0x0CC+0x90)
84
85#define DISPC_VID1_FIFO_THRESHOLD 0x0D0
86#define DISPC_VID2_FIFO_THRESHOLD (0x0D0+0x90)
87#define DISPC_VID1_FIFO_SIZE_STATUS 0x0D4
88#define DISPC_VID2_FIFO_SIZE_STATUS (0x0D4+0x90)
89#define DISPC_VID1_ROW_INC 0x0D8
90#define DISPC_VID2_ROW_INC (0x0D8+0x90)
91#define DISPC_VID1_PIXEL_INC 0x0DC
92#define DISPC_VID2_PIXEL_INC (0x0DC+0x90)
93/*
94#define DISPC_VIDn_FIR 0x0E0+((n-1)*
95*/
96#define DISPC_VID1_PICTURE_SIZE 0x0E4
97#define DISPC_VID2_PICTURE_SIZE (0x0E4+0x90)
98/*
99#define DISPC_VIDn_ACCUl 0x0E8
100#define DISPC_VIDn_FIR_COEF_Hi 0x0F0+
101#define DISPC_VIDn_FIR_COEF_HVi 0x0F4+
102*/
103#define DISPC_VID1_CONV_COEF0 0x130
104#define DISPC_VID2_CONV_COEF0 (0x130+0x90)
105#define DISPC_VID1_CONV_COEF1 0x134
106#define DISPC_VID2_CONV_COEF1 (0x134+0x90)
107#define DISPC_VID1_CONV_COEF2 0x138
108#define DISPC_VID2_CONV_COEF2 (0x138+0x90)
109#define DISPC_VID1_CONV_COEF3 0x13C
110#define DISPC_VID2_CONV_COEF3 (0x13C+0x90)
111#define DISPC_VID1_CONV_COEF4 0x140
112#define DISPC_VID2_CONV_COEF4 (0x140+0x90)
113/*
114#define DISPC_DATA_CYCLEk 0x1D4+((k-1)*
115#define DISPC_VIDn_FIR_COEF_Vi 0x1E0+
116*/
117#define DISPC_CPR_COEF_R 0x220
118#define DISPC_CPR_COEF_G 0x224
119#define DISPC_CPR_COEF_B 0x228
120#define DISPC_GFX_PRELOAD 0x22C
121#define DISPC_VID1_PRELOAD 0x230
122#define DISPC_VID2_PRELOAD 0x234
123
124/* DISPC_SYSCONFIG bits */
125#define DISPC_MIDLEMODE_FORCE (0<<12)
126#define DISPC_MIDLEMODE_NEVER (1<<12)
127#define DISPC_MIDLEMODE_SMART (2<<12)
128
129#define DISPC_SIDLEMODE_FORCE (0<<3)
130#define DISPC_SIDLEMODE_NEVER (1<<3)
131#define DISPC_SIDLEMODE_SMART (2<<3)
132
133#define DISPC_ENWAKEUP (1<<2)
134#define DISPC_SOFTRESET (1<<1)
135#define DISPC_AUTOIDLE (1<<0)
136
137/* DISPC_SYSSTATUS bits */
138#define DISPC_RESETDONE 1
139
140/* TODO: IRQ bits */
141
142/* DISPC_CONTROL bits (incomplete) */
143#define DISPC_DITHER_FRAMES_0 (0<<30)
144#define DISPC_DITHER_FRAMES_2 (1<<30)
145#define DISPC_DITHER_FRAMES_4 (2<<30)
146#define DISPC_LCDENABLEPOL (1<<29)
147#define DISPC_LCDENABLESIGNAL (1<<28)
148#define DISPC_PCKFREEENABLE (1<<27)
149#define DISPC_GPOUT1 (1<<16)
150#define DISPC_GPOUT0 (1<<15)
151#define DISPC_GPIN1 (1<<14)
152#define DISPC_GPIN0 (1<<13)
153#define DISPC_OVERLAYOPTIMISATION (1<<12)
154#define DISPC_STALLMODE (1<<11)
155#define DISPC_TFTDATALINES_12 (0<<8)
156#define DISPC_TFTDATALINES_16 (1<<8)
157#define DISPC_TFTDATALINES_18 (2<<8)
158#define DISPC_TFTDATALINES_24 (3<<8)
159#define DISPC_STDITHERENABLE (1<<7)
160#define DISPC_GODIGITAL (1<<6)
161#define DISPC_GOLCD (1<<5)
162#define DISPC_M8B (1<<4)
163#define DISPC_STNTFT (1<<3)
164#define DISPC_MONOCOLOR (1<<2)
165#define DISPC_DIGITALENABLE (1<<1)
166#define DISPC_LCDENABLE (1<<0)
167
168/* DISPC_CONFIG bits */
169#define DISPC_TVALPHABLENDERENABLE (1<<19)
170#define DISPC_LCDALPHABLENDERENABLE (1<<18)
171#define DISPC_FIFOFILLING (1<<17)
172#define DISPC_FIFOHANDCHECK (1<<16)
173#define DISPC_CPR (1<<15)
174#define DISPC_FIFOMERGE (1<<14)
175#define DISPC_TCKDIGSELECTION (1<<13)
176#define DISPC_TCKDIGENABLE (1<<12)
177#define DISPC_TCKLCDSELECTION (1<<11)
178#define DISPC_TCKLCDENABLE (1<<10)
179#define DISPC_FUNCGATED (1<<9)
180#define DISPC_ACBIASGATED (1<<8)
181#define DISPC_VSYNCGATED (1<<7)
182#define DISPC_HSYNCGATED (1<<6)
183#define DISPC_PIXELCLOCKGATED (1<<5)
184#define DISPC_PIXELDATAGATED (1<<4)
185#define DISPC_PALETTEGAMMATABLE (1<<3)
186#define DISPC_LOADMODE_EVERY (0<<1)
187#define DISPC_LOADMODE_MANUAL (1<<1)
188#define DISPC_LOADMODE_FRAME (2<<1)
189#define DISPC_LOADMODE_FIRST (3<<1)
190#define DISPC_PIXELGATED 1
191
192/* DISPC_TIMING_H bits and masks */
193#define DISPCB_HBP 20
194#define DISPCB_HFP 8
195#define DISPCB_HSW 0
196#define DISPCM_HBP 0xfff00000
197#define DISPCM_HFP 0x000fff00
198#define DISPCM_HSW 0x000000ff
199
200/* DISPC_TIMING_V bits and masks */
201#define DISPCB_VBP 20
202#define DISPCB_VFP 8
203#define DISPCB_VSW 0
204#define DISPCM_VBP 0x0ff00000
205#define DISPCM_VFP 0x0000ff00
206#define DISPCM_VSW 0x0000003f
207
208/* DISPC_POL_FREQ bits */
209#define DISPC_POL_ONOFF (1<<17)
210#define DISPC_POL_RF (1<<16)
211#define DISPC_POL_IEO (1<<15)
212#define DISPC_POL_IPC (1<<14)
213#define DISPC_POL_IHS (1<<13)
214#define DISPC_POL_IVS (1<<12)
215#define DISPCB_POL_ACBI 8
216#define DISPCM_POL_ACBI 0xf00
217#define DISPCB_POL_ACB 0
218#define DISPCM_POL_ACB 0xff
219
220/* DISPC_DIVISOR bits */
221#define DISPCB_DIVISOR_LCD 16
222#define DISPCB_DIVISOR_PCD 0
223
224/* DISPC_GFX_ATTRIBUTES bits */
225#define DISPC_GFXSELFREFRESH (1<<15)
226#define DISPC_GFXARBITRATION (1<<14)
227#define DISPC_GFXROTATION_0 (0<<12)
228#define DISPC_GFXROTATION_90 (1<<12)
229#define DISPC_GFXROTATION_180 (2<<12)
230#define DISPC_GFXROTATION_270 (3<<12)
231#define DISPC_GFXFIFOPRELOAD (1<<11)
232#define DISPC_GFXENDIANNESS (1<<10)
233#define DISPC_GFXNIBBLEMODE (1<<9)
234#define DISPC_GFXCHANNELOUT (1<<8)
235#define DISPC_GFXBURSTSIZE_4x32 (0<<6)
236#define DISPC_GFXBURSTSIZE_8x32 (1<<6)
237#define DISPC_GFXBURSTSIZE_16x32 (2<<6)
238#define DISPC_GFXREPLICATIONENABLE (1<<5)
239#define DISPC_GFXFORMAT_BITMAP1 (0<<1)
240#define DISPC_GFXFORMAT_BITMAP2 (1<<1)
241#define DISPC_GFXFORMAT_BITMAP4 (2<<1)
242#define DISPC_GFXFORMAT_BITMAP8 (3<<1)
243#define DISPC_GFXFORMAT_RGB12 (4<<1)
244#define DISPC_GFXFORMAT_ARGB16 (5<<1)
245#define DISPC_GFXFORMAT_RGB16 (6<<1)
246#define DISPC_GFXFORMAT_RGB32 (8<<1) /* 24 bit, 32-bit un - packed */
247#define DISPC_GFXFORMAT_RGB24 (9<<1)
248#define DISPC_GFXFORMAT_ARGB32 (12<<1)
249#define DISPC_GFXFORMAT_RGBA32 (13<<1)
250#define DISPC_GFXFORMAT_RGBx (14<<1)
251#define DISPC_GFXENABLE 1
252
253/* DISPC_VIDn_ATTRIBUTES bits */
254#define DISPC_VIDSELFREFRESH (1<<24)
255#define DISPC_VIDARBITRATION (1<<23)
256#define DISPC_VIDLINEBUFFERSPLOT (1<<22)
257#define DISPC_VIDVERTICALTAPS (1<<21)
258#define DISPC_VIDOPTIMISATION (1<<20)
259#define DISPC_VIDFIFOPRELOAD (1<<19)
260#define DISPC_VIDROWREPEATENABLE (1<<18)
261#define DISPC_VIDENDIANNESS (1<<17)
262#define DISPC_VIDCHANNELOUT (1<<16)
263#define DISPC_VIDBURSTSIZE_4x32 (0<<14)
264#define DISPC_VIDBURSTSIZE_8x32 (1<<14)
265#define DISPC_VIDBURSTSIZE_16x32 (2<<14)
266#define DISPC_VIDROTATION_0 (0<<12)
267#define DISPC_VIDROTATION_90 (1<<12)
268#define DISPC_VIDROTATION_180 (2<<12)
269#define DISPC_VIDROTATION_270 (3<<12)
270#define DISPC_VIDFULLRANGE (1<<11)
271#define DISPC_VIDREPLICATIONENABLE (1<<10)
272#define DISPC_VIDCOLORCONVENABLE (1<<9)
273#define DISPC_VIDVRESIZECONF (1<<8)
274#define DISPC_VIDHRESIZECONF (1<<7)
275#define DISPC_VIDRESIZEENABLE_H (1<<5)
276#define DISPC_VIDRESIZEENABLE_V (2<<5)
277#define DISPC_VIDRESIZEENABLE_HV (3<<5)
278// Only VID2 supports the alpha formats
279#define DISPC_VIDFORMAT_RGB12 (4<<1)
280#define DISPC_VIDFORMAT_ARGB16 (5<<1)
281#define DISPC_VIDFORMAT_RGB16 (6<<1)
282#define DISPC_VIDFORMAT_RGB32 (8<<1) /* 24 bit, 32-bit un - packed */
283#define DISPC_VIDFORMAT_RGB24 (9<<1)
284#define DISPC_VIDFORMAT_YUV2 (10<<1)
285#define DISPC_VIDFORMAT_UYVY (11<<1)
286#define DISPC_VIDFORMAT_ARGB32 (12<<1)
287#define DISPC_VIDFORMAT_RGBA32 (13<<1)
288#define DISPC_VIDFORMAT_RGBx (14<<1)
289#define DISPC_VIDENABLE 1
290
291/* TODO: video attributes, etc */
292
293/* ********************************************************************** */
294/* S 1.7.5 Video Encoder Registers */
295
296#define VENC_BASE 0x48050c00
297
298#define VENC_STATUS 0x04
299#define VENC_F_CONTROL 0x08
300#define VENC_VIDOUT_CTRL 0x10
301#define VENC_SYNC_CTRL 0x14
302#define VENC_LLEN 0x1C
303#define VENC_FLENS 0x20
304#define VENC_HFLTR_CTRL 0x24
305#define VENC_CC_CARR_WSS_CARR 0x28
306#define VENC_C_PHASE 0x2C
307#define VENC_GAIN_U 0x30
308#define VENC_GAIN_V 0x34
309#define VENC_GAIN_Y 0x38
310#define VENC_BLACK_LEVEL 0x3C
311#define VENC_BLANK_LEVEL 0x40
312#define VENC_X_COLOR 0x44
313#define VENC_M_CONTROL 0x48
314#define VENC_BSTAMP_WSS_DATA 0x4C
315#define VENC_S_CARR 0x50
316#define VENC_LINE21 0x54
317#define VENC_LN_SEL 0x58
318#define VENC_L21_WC_CTL 0x5C
319#define VENC_HTRIGGER_VTRIGGER 0x60
320#define VENC_SAVID_EAVID 0x64
321#define VENC_FLEN_FAL 0x68
322#define VENC_LAL_PHASE_RESET 0x6C
323#define VENC_HS_INT_START_STOP_X 0x70
324#define VENC_HS_EXT_START_STOP_X 0x74
325#define VENC_VS_INT_START_X 0x78
326#define VENC_VS_INT_STOP_X_VS_INT_START_Y 0x7C
327#define VENC_VS_INT_STOP_Y_VS_EXT_START_X 0x80
328#define VENC_VS_EXT_STOP_X_VS_EXT_START_Y 0x84
329#define VENC_VS_EXT_STOP_Y 0x88
330#define VENC_AVID_START_STOP_X 0x90
331#define VENC_AVID_START_STOP_Y 0x94
332#define VENC_FID_INT_START_X_FID_INT_START_Y 0xA0
333#define VENC_FID_INT_OFFSET_Y_FID_EXT_START_X 0xA4
334#define VENC_FID_EXT_START_Y_FID_EXT_OFFSET_Y 0xA8
335#define VENC_TVDETGP_INT_START_STOP_X 0xB0
336#define VENC_TVDETGP_INT_START_STOP_Y 0xB4
337#define VENC_GEN_CTRL 0xB8
338#define VENC_OUTPUT_CONTROL 0xC4
339#define VENC_OUTPUT_TEST 0xC8
340
341/* VENC_F_CONTROL bits */
342#define VENC_RESET (1<<8)
343#define VENC_SVDS_EXTERNAL (0<<6)
344#define VENC_SVDS_COLOURBAR (1<<6)
345#define VENC_SVDS_SOLID (2<<6)
346#define VENC_RGBF (1<<5)
347#define VENC_BCOLOR_BLACK (0<<2)
348#define VENC_BCOLOR_BLUE (1<<2)
349#define VENC_BCOLOR_RED (2<<2)
350#define VENC_BCOLOR_MAGENTA (3<<2)
351#define VENC_BCOLOR_GREEN (4<<2)
352#define VENC_BCOLOR_CYAN (5<<2)
353#define VENC_BCOLOR_YELLOW (6<<2)
354#define VENC_BCOLOR_WHITE (7<<2)
355#define VENC_FMT_24_RGB444 0
356#define VENC_FMT_24_444 1
357#define VENC_FMT_16_422 2
358#define VENC_FMT_8_422 2
359
360/* VENC_VIDOUT_CTRL bits */
361#define VENC_VIDOUT_54 (0)
362#define VENC_VIDOUT_27 (1)
363
364/* VENC_SYNC_CTRL bits */
365#define VENC_SYNC_FREE (1<<15)
366#define VENC_SYNC_ESAV (1<<14)
367#define VENC_SYNC_IGNP (1<<13)
368#define VENC_SYNC_NBLNKS (1<<12)
369#define VENC_SYNC_VBLKM_DFL (0<<10)
370#define VENC_SYNC_VBLKM_LAL (1<<10)
371#define VENC_SYNC_HBLKM_DFL (0<<10)
372#define VENC_SYNC_HBLKM_EAV (1<<10)
373#define VENC_SYNC_HBLKM_RANGE (2<<10)
374#define VENC_SYNC_FID_POL (1<<6)
375
376/* VENC_HFLTR_CTRL bits */
377#define VENC_CINTP_EN (0<<1)
378#define VENC_CINTP_BYPASS_1 (1<<1)
379#define VENC_CINTP_BYPASS_2 (2<<1)
380#define VENC_CINTP_BYPASS (3<<1)
381
382#define VENC_YINTP_EN (0<<0)
383#define VENC_YINTP_BYPASS (1<<0)
384
385/* VENC_CC_CARR_WSS_CARR bits */
386#define VENCB_FWSS 16
387#define VENCB_FCC 0
388
389/* VENC_X_COLOR bits */
390#define VENC_XCE (1<<6)
391#define VENC_XCBW_32_8 (0<<3)
392#define VENC_XCBW_26_5 (1<<3)
393#define VENC_XCBW_30_0 (2<<3)
394#define VENC_XCBW_29_2 (3<<3)
395#define VENC_LCD_0_0 0
396#define VENC_LCD_0_5 1
397#define VENC_LCD_1_0 2
398#define VENC_LCD_1_5 3
399#define VENC_LCD_m2_0 4
400#define VENC_LCD_m1_5 5
401#define VENC_LCD_m1_0 6
402#define VENC_LCD_m0_5 7
403
404/* VENC_M_CONTROL bits */
405#define VENC_M_PALI (1<<7)
406#define VENC_M_PALN (1<<6)
407#define VENC_M_PALPHS (1<<5)
408#define VENC_M_CBW_21_8 (0<<2)
409#define VENC_M_CBW_19_8 (1<<2)
410#define VENC_M_CBW_18_0 (2<<2)
411#define VENC_M_CBW_23_7 (5<<2)
412#define VENC_M_CBW_26_8 (6<<2)
413#define VENC_M_CBW_BYPASS (7<<2)
414#define VENC_M_PAL (1<<1)
415#define VENC_M_NTSC (1<<0)
416
417/* VENC_BSTAMP_WSS_DATA bits */
418#define VENCB_WSS_DATA (8)
419#define VENC_SQP (1<<7)
420
421/* VENC_S_CARR values - presets assuming Fclkenc = 27Mhz */
422#define VENC_FSC_R601_NTSC_M 0x21F07C1F
423#define VENC_FSC_R601_PAL_M 0x21E6EFE3
424#define VENC_FSC_R601_PAL_G 0x2A098ACB
425#define VENC_FSC_R601_PAL_Nc 0x21E6EFE3
426
427#endif
428