blob: 05e56621d1f44bc236580506add4eea5b0c1abd4 [file] [log] [blame]
Archit Taneja9b372c22011-05-06 11:45:49 +05301/*
2 * linux/drivers/video/omap2/dss/dispc.h
3 *
4 * Copyright (C) 2011 Texas Instruments
5 * Author: Archit Taneja <archit@ti.com>
6 *
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published by
10 * the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __OMAP2_DISPC_REG_H
22#define __OMAP2_DISPC_REG_H
23
24struct dispc_reg { u16 idx; };
25
26#define DISPC_REG(idx) ((const struct dispc_reg) { idx })
27
Archit Taneja702d1442011-05-06 11:45:50 +053028/* DISPC common registers */
Archit Taneja9b372c22011-05-06 11:45:49 +053029#define DISPC_REVISION DISPC_REG(0x0000)
30#define DISPC_SYSCONFIG DISPC_REG(0x0010)
31#define DISPC_SYSSTATUS DISPC_REG(0x0014)
32#define DISPC_IRQSTATUS DISPC_REG(0x0018)
33#define DISPC_IRQENABLE DISPC_REG(0x001C)
34#define DISPC_CONTROL DISPC_REG(0x0040)
Archit Taneja9b372c22011-05-06 11:45:49 +053035#define DISPC_CONFIG DISPC_REG(0x0044)
Archit Taneja9b372c22011-05-06 11:45:49 +053036#define DISPC_CAPABLE DISPC_REG(0x0048)
Archit Taneja9b372c22011-05-06 11:45:49 +053037#define DISPC_LINE_STATUS DISPC_REG(0x005C)
38#define DISPC_LINE_NUMBER DISPC_REG(0x0060)
Archit Taneja9b372c22011-05-06 11:45:49 +053039#define DISPC_GLOBAL_ALPHA DISPC_REG(0x0074)
Archit Taneja702d1442011-05-06 11:45:50 +053040#define DISPC_CONTROL2 DISPC_REG(0x0238)
41#define DISPC_CONFIG2 DISPC_REG(0x0620)
Archit Taneja9b372c22011-05-06 11:45:49 +053042#define DISPC_DIVISOR DISPC_REG(0x0804)
43
44/* DISPC overlay registers */
45#define DISPC_OVL_BA0(n) DISPC_REG(DISPC_OVL_BASE(n) + \
46 DISPC_BA0_OFFSET(n))
47#define DISPC_OVL_BA1(n) DISPC_REG(DISPC_OVL_BASE(n) + \
48 DISPC_BA1_OFFSET(n))
49#define DISPC_OVL_POSITION(n) DISPC_REG(DISPC_OVL_BASE(n) + \
50 DISPC_POS_OFFSET(n))
51#define DISPC_OVL_SIZE(n) DISPC_REG(DISPC_OVL_BASE(n) + \
52 DISPC_SIZE_OFFSET(n))
53#define DISPC_OVL_ATTRIBUTES(n) DISPC_REG(DISPC_OVL_BASE(n) + \
54 DISPC_ATTR_OFFSET(n))
55#define DISPC_OVL_FIFO_THRESHOLD(n) DISPC_REG(DISPC_OVL_BASE(n) + \
56 DISPC_FIFO_THRESH_OFFSET(n))
57#define DISPC_OVL_FIFO_SIZE_STATUS(n) DISPC_REG(DISPC_OVL_BASE(n) + \
58 DISPC_FIFO_SIZE_STATUS_OFFSET(n))
59#define DISPC_OVL_ROW_INC(n) DISPC_REG(DISPC_OVL_BASE(n) + \
60 DISPC_ROW_INC_OFFSET(n))
61#define DISPC_OVL_PIXEL_INC(n) DISPC_REG(DISPC_OVL_BASE(n) + \
62 DISPC_PIX_INC_OFFSET(n))
63#define DISPC_OVL_WINDOW_SKIP(n) DISPC_REG(DISPC_OVL_BASE(n) + \
64 DISPC_WINDOW_SKIP_OFFSET(n))
65#define DISPC_OVL_TABLE_BA(n) DISPC_REG(DISPC_OVL_BASE(n) + \
66 DISPC_TABLE_BA_OFFSET(n))
67#define DISPC_OVL_FIR(n) DISPC_REG(DISPC_OVL_BASE(n) + \
68 DISPC_FIR_OFFSET(n))
69#define DISPC_OVL_PICTURE_SIZE(n) DISPC_REG(DISPC_OVL_BASE(n) + \
70 DISPC_PIC_SIZE_OFFSET(n))
71#define DISPC_OVL_ACCU0(n) DISPC_REG(DISPC_OVL_BASE(n) + \
72 DISPC_ACCU0_OFFSET(n))
73#define DISPC_OVL_ACCU1(n) DISPC_REG(DISPC_OVL_BASE(n) + \
74 DISPC_ACCU1_OFFSET(n))
75#define DISPC_OVL_FIR_COEF_H(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
76 DISPC_FIR_COEF_H_OFFSET(n, i))
77#define DISPC_OVL_FIR_COEF_HV(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
78 DISPC_FIR_COEF_HV_OFFSET(n, i))
79#define DISPC_OVL_CONV_COEF(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
80 DISPC_CONV_COEF_OFFSET(n, i))
81#define DISPC_OVL_FIR_COEF_V(n, i) DISPC_REG(DISPC_OVL_BASE(n) + \
82 DISPC_FIR_COEF_V_OFFSET(n, i))
83#define DISPC_OVL_PRELOAD(n) DISPC_REG(DISPC_OVL_BASE(n) + \
84 DISPC_PRELOAD_OFFSET(n))
85
Archit Taneja702d1442011-05-06 11:45:50 +053086/* DISPC manager/channel specific registers */
87static inline struct dispc_reg DISPC_DEFAULT_COLOR(enum omap_channel channel)
88{
89 switch (channel) {
90 case OMAP_DSS_CHANNEL_LCD:
91 return DISPC_REG(0x004C);
92 case OMAP_DSS_CHANNEL_DIGIT:
93 return DISPC_REG(0x0050);
94 case OMAP_DSS_CHANNEL_LCD2:
95 return DISPC_REG(0x03AC);
96 default:
97 BUG();
98 }
99}
100
101static inline struct dispc_reg DISPC_TRANS_COLOR(enum omap_channel channel)
102{
103 switch (channel) {
104 case OMAP_DSS_CHANNEL_LCD:
105 return DISPC_REG(0x0054);
106 case OMAP_DSS_CHANNEL_DIGIT:
107 return DISPC_REG(0x0058);
108 case OMAP_DSS_CHANNEL_LCD2:
109 return DISPC_REG(0x03B0);
110 default:
111 BUG();
112 }
113}
114
115static inline struct dispc_reg DISPC_TIMING_H(enum omap_channel channel)
116{
117 switch (channel) {
118 case OMAP_DSS_CHANNEL_LCD:
119 return DISPC_REG(0x0064);
120 case OMAP_DSS_CHANNEL_DIGIT:
121 BUG();
122 case OMAP_DSS_CHANNEL_LCD2:
123 return DISPC_REG(0x0400);
124 default:
125 BUG();
126 }
127}
128
129static inline struct dispc_reg DISPC_TIMING_V(enum omap_channel channel)
130{
131 switch (channel) {
132 case OMAP_DSS_CHANNEL_LCD:
133 return DISPC_REG(0x0068);
134 case OMAP_DSS_CHANNEL_DIGIT:
135 BUG();
136 case OMAP_DSS_CHANNEL_LCD2:
137 return DISPC_REG(0x0404);
138 default:
139 BUG();
140 }
141}
142
143static inline struct dispc_reg DISPC_POL_FREQ(enum omap_channel channel)
144{
145 switch (channel) {
146 case OMAP_DSS_CHANNEL_LCD:
147 return DISPC_REG(0x006C);
148 case OMAP_DSS_CHANNEL_DIGIT:
149 BUG();
150 case OMAP_DSS_CHANNEL_LCD2:
151 return DISPC_REG(0x0408);
152 default:
153 BUG();
154 }
155}
156
157static inline struct dispc_reg DISPC_DIVISORo(enum omap_channel channel)
158{
159 switch (channel) {
160 case OMAP_DSS_CHANNEL_LCD:
161 return DISPC_REG(0x0070);
162 case OMAP_DSS_CHANNEL_DIGIT:
163 BUG();
164 case OMAP_DSS_CHANNEL_LCD2:
165 return DISPC_REG(0x040C);
166 default:
167 BUG();
168 }
169}
170
171/* Named as DISPC_SIZE_LCD, DISPC_SIZE_DIGIT and DISPC_SIZE_LCD2 in TRM */
172static inline struct dispc_reg DISPC_SIZE_MGR(enum omap_channel channel)
173{
174 switch (channel) {
175 case OMAP_DSS_CHANNEL_LCD:
176 return DISPC_REG(0x007C);
177 case OMAP_DSS_CHANNEL_DIGIT:
178 return DISPC_REG(0x0078);
179 case OMAP_DSS_CHANNEL_LCD2:
180 return DISPC_REG(0x03CC);
181 default:
182 BUG();
183 }
184}
185
186static inline struct dispc_reg DISPC_DATA_CYCLE1(enum omap_channel channel)
187{
188 switch (channel) {
189 case OMAP_DSS_CHANNEL_LCD:
190 return DISPC_REG(0x01D4);
191 case OMAP_DSS_CHANNEL_DIGIT:
192 BUG();
193 case OMAP_DSS_CHANNEL_LCD2:
194 return DISPC_REG(0x03C0);
195 default:
196 BUG();
197 }
198}
199
200static inline struct dispc_reg DISPC_DATA_CYCLE2(enum omap_channel channel)
201{
202 switch (channel) {
203 case OMAP_DSS_CHANNEL_LCD:
204 return DISPC_REG(0x01D8);
205 case OMAP_DSS_CHANNEL_DIGIT:
206 BUG();
207 case OMAP_DSS_CHANNEL_LCD2:
208 return DISPC_REG(0x03C4);
209 default:
210 BUG();
211 }
212}
213
214static inline struct dispc_reg DISPC_DATA_CYCLE3(enum omap_channel channel)
215{
216 switch (channel) {
217 case OMAP_DSS_CHANNEL_LCD:
218 return DISPC_REG(0x01DC);
219 case OMAP_DSS_CHANNEL_DIGIT:
220 BUG();
221 case OMAP_DSS_CHANNEL_LCD2:
222 return DISPC_REG(0x03C8);
223 default:
224 BUG();
225 }
226}
227
228static inline struct dispc_reg DISPC_CPR_COEF_R(enum omap_channel channel)
229{
230 switch (channel) {
231 case OMAP_DSS_CHANNEL_LCD:
232 return DISPC_REG(0x0220);
233 case OMAP_DSS_CHANNEL_DIGIT:
234 BUG();
235 case OMAP_DSS_CHANNEL_LCD2:
236 return DISPC_REG(0x03BC);
237 default:
238 BUG();
239 }
240}
241
242static inline struct dispc_reg DISPC_CPR_COEF_G(enum omap_channel channel)
243{
244 switch (channel) {
245 case OMAP_DSS_CHANNEL_LCD:
246 return DISPC_REG(0x0224);
247 case OMAP_DSS_CHANNEL_DIGIT:
248 BUG();
249 case OMAP_DSS_CHANNEL_LCD2:
250 return DISPC_REG(0x03B8);
251 default:
252 BUG();
253 }
254}
255
256static inline struct dispc_reg DISPC_CPR_COEF_B(enum omap_channel channel)
257{
258 switch (channel) {
259 case OMAP_DSS_CHANNEL_LCD:
260 return DISPC_REG(0x0228);
261 case OMAP_DSS_CHANNEL_DIGIT:
262 BUG();
263 case OMAP_DSS_CHANNEL_LCD2:
264 return DISPC_REG(0x03B4);
265 default:
266 BUG();
267 }
268}
269
Archit Taneja9b372c22011-05-06 11:45:49 +0530270/* DISPC overlay register base addresses */
271static inline u16 DISPC_OVL_BASE(enum omap_plane plane)
272{
273 switch (plane) {
274 case OMAP_DSS_GFX:
275 return 0x0080;
276 case OMAP_DSS_VIDEO1:
277 return 0x00BC;
278 case OMAP_DSS_VIDEO2:
279 return 0x014C;
280 default:
281 BUG();
282 }
283}
284
285/* DISPC overlay register offsets */
286static inline u16 DISPC_BA0_OFFSET(enum omap_plane plane)
287{
288 switch (plane) {
289 case OMAP_DSS_GFX:
290 case OMAP_DSS_VIDEO1:
291 case OMAP_DSS_VIDEO2:
292 return 0x0000;
293 default:
294 BUG();
295 }
296}
297
298static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
299{
300 switch (plane) {
301 case OMAP_DSS_GFX:
302 case OMAP_DSS_VIDEO1:
303 case OMAP_DSS_VIDEO2:
304 return 0x0004;
305 default:
306 BUG();
307 }
308}
309
310static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
311{
312 switch (plane) {
313 case OMAP_DSS_GFX:
314 case OMAP_DSS_VIDEO1:
315 case OMAP_DSS_VIDEO2:
316 return 0x0008;
317 default:
318 BUG();
319 }
320}
321
322static inline u16 DISPC_SIZE_OFFSET(enum omap_plane plane)
323{
324 switch (plane) {
325 case OMAP_DSS_GFX:
326 case OMAP_DSS_VIDEO1:
327 case OMAP_DSS_VIDEO2:
328 return 0x000C;
329 default:
330 BUG();
331 }
332}
333
334static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
335{
336 switch (plane) {
337 case OMAP_DSS_GFX:
338 return 0x0020;
339 case OMAP_DSS_VIDEO1:
340 case OMAP_DSS_VIDEO2:
341 return 0x0010;
342 default:
343 BUG();
344 }
345}
346
347static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
348{
349 switch (plane) {
350 case OMAP_DSS_GFX:
351 return 0x0024;
352 case OMAP_DSS_VIDEO1:
353 case OMAP_DSS_VIDEO2:
354 return 0x0014;
355 default:
356 BUG();
357 }
358}
359
360static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane)
361{
362 switch (plane) {
363 case OMAP_DSS_GFX:
364 return 0x0028;
365 case OMAP_DSS_VIDEO1:
366 case OMAP_DSS_VIDEO2:
367 return 0x0018;
368 default:
369 BUG();
370 }
371}
372
373static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane plane)
374{
375 switch (plane) {
376 case OMAP_DSS_GFX:
377 return 0x002C;
378 case OMAP_DSS_VIDEO1:
379 case OMAP_DSS_VIDEO2:
380 return 0x001C;
381 default:
382 BUG();
383 }
384}
385
386static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane plane)
387{
388 switch (plane) {
389 case OMAP_DSS_GFX:
390 return 0x0030;
391 case OMAP_DSS_VIDEO1:
392 case OMAP_DSS_VIDEO2:
393 return 0x0020;
394 default:
395 BUG();
396 }
397}
398
399static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane)
400{
401 switch (plane) {
402 case OMAP_DSS_GFX:
403 return 0x0034;
404 case OMAP_DSS_VIDEO1:
405 case OMAP_DSS_VIDEO2:
406 BUG();
407 default:
408 BUG();
409 }
410}
411
412static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane plane)
413{
414 switch (plane) {
415 case OMAP_DSS_GFX:
416 return 0x0038;
417 case OMAP_DSS_VIDEO1:
418 case OMAP_DSS_VIDEO2:
419 BUG();
420 default:
421 BUG();
422 }
423}
424
425static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
426{
427 switch (plane) {
428 case OMAP_DSS_GFX:
429 BUG();
430 case OMAP_DSS_VIDEO1:
431 case OMAP_DSS_VIDEO2:
432 return 0x0024;
433 default:
434 BUG();
435 }
436}
437
438static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
439{
440 switch (plane) {
441 case OMAP_DSS_GFX:
442 BUG();
443 case OMAP_DSS_VIDEO1:
444 case OMAP_DSS_VIDEO2:
445 return 0x0028;
446 default:
447 BUG();
448 }
449}
450
451
452static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
453{
454 switch (plane) {
455 case OMAP_DSS_GFX:
456 BUG();
457 case OMAP_DSS_VIDEO1:
458 case OMAP_DSS_VIDEO2:
459 return 0x002C;
460 default:
461 BUG();
462 }
463}
464
465static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
466{
467 switch (plane) {
468 case OMAP_DSS_GFX:
469 BUG();
470 case OMAP_DSS_VIDEO1:
471 case OMAP_DSS_VIDEO2:
472 return 0x0030;
473 default:
474 BUG();
475 }
476}
477
478/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
479static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
480{
481 switch (plane) {
482 case OMAP_DSS_GFX:
483 BUG();
484 case OMAP_DSS_VIDEO1:
485 case OMAP_DSS_VIDEO2:
486 return 0x0034 + i * 0x8;
487 default:
488 BUG();
489 }
490}
491
492/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
493static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
494{
495 switch (plane) {
496 case OMAP_DSS_GFX:
497 BUG();
498 case OMAP_DSS_VIDEO1:
499 case OMAP_DSS_VIDEO2:
500 return 0x0038 + i * 0x8;
501 default:
502 BUG();
503 }
504}
505
506/* coef index i = {0, 1, 2, 3, 4,} */
507static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
508{
509 switch (plane) {
510 case OMAP_DSS_GFX:
511 BUG();
512 case OMAP_DSS_VIDEO1:
513 case OMAP_DSS_VIDEO2:
514 return 0x0074 + i * 0x4;
515 default:
516 BUG();
517 }
518}
519
520/* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
521static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
522{
523 switch (plane) {
524 case OMAP_DSS_GFX:
525 BUG();
526 case OMAP_DSS_VIDEO1:
527 return 0x0124 + i * 0x4;
528 case OMAP_DSS_VIDEO2:
529 return 0x00B4 + i * 0x4;
530 default:
531 BUG();
532 }
533}
534
535static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
536{
537 switch (plane) {
538 case OMAP_DSS_GFX:
539 return 0x01AC;
540 case OMAP_DSS_VIDEO1:
541 return 0x0174;
542 case OMAP_DSS_VIDEO2:
543 return 0x00E8;
544 default:
545 BUG();
546 }
547}
548#endif