2 * linux/drivers/video/omap2/dss/dispc.h
4 * Copyright (C) 2011 Texas Instruments
5 * Author: Archit Taneja <archit@ti.com>
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.
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
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/>.
21 #ifndef __OMAP2_DISPC_REG_H
22 #define __OMAP2_DISPC_REG_H
24 /* DISPC common registers */
25 #define DISPC_REVISION 0x0000
26 #define DISPC_SYSCONFIG 0x0010
27 #define DISPC_SYSSTATUS 0x0014
28 #define DISPC_IRQSTATUS 0x0018
29 #define DISPC_IRQENABLE 0x001C
30 #define DISPC_CONTROL 0x0040
31 #define DISPC_CONFIG 0x0044
32 #define DISPC_CAPABLE 0x0048
33 #define DISPC_LINE_STATUS 0x005C
34 #define DISPC_LINE_NUMBER 0x0060
35 #define DISPC_GLOBAL_ALPHA 0x0074
36 #define DISPC_CONTROL2 0x0238
37 #define DISPC_CONFIG2 0x0620
38 #define DISPC_DIVISOR 0x0804
40 /* DISPC overlay registers */
41 #define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \
43 #define DISPC_OVL_BA1(n) (DISPC_OVL_BASE(n) + \
45 #define DISPC_OVL_BA0_UV(n) (DISPC_OVL_BASE(n) + \
46 DISPC_BA0_UV_OFFSET(n))
47 #define DISPC_OVL_BA1_UV(n) (DISPC_OVL_BASE(n) + \
48 DISPC_BA1_UV_OFFSET(n))
49 #define DISPC_OVL_POSITION(n) (DISPC_OVL_BASE(n) + \
51 #define DISPC_OVL_SIZE(n) (DISPC_OVL_BASE(n) + \
53 #define DISPC_OVL_ATTRIBUTES(n) (DISPC_OVL_BASE(n) + \
55 #define DISPC_OVL_ATTRIBUTES2(n) (DISPC_OVL_BASE(n) + \
56 DISPC_ATTR2_OFFSET(n))
57 #define DISPC_OVL_FIFO_THRESHOLD(n) (DISPC_OVL_BASE(n) + \
58 DISPC_FIFO_THRESH_OFFSET(n))
59 #define DISPC_OVL_FIFO_SIZE_STATUS(n) (DISPC_OVL_BASE(n) + \
60 DISPC_FIFO_SIZE_STATUS_OFFSET(n))
61 #define DISPC_OVL_ROW_INC(n) (DISPC_OVL_BASE(n) + \
62 DISPC_ROW_INC_OFFSET(n))
63 #define DISPC_OVL_PIXEL_INC(n) (DISPC_OVL_BASE(n) + \
64 DISPC_PIX_INC_OFFSET(n))
65 #define DISPC_OVL_WINDOW_SKIP(n) (DISPC_OVL_BASE(n) + \
66 DISPC_WINDOW_SKIP_OFFSET(n))
67 #define DISPC_OVL_TABLE_BA(n) (DISPC_OVL_BASE(n) + \
68 DISPC_TABLE_BA_OFFSET(n))
69 #define DISPC_OVL_FIR(n) (DISPC_OVL_BASE(n) + \
71 #define DISPC_OVL_FIR2(n) (DISPC_OVL_BASE(n) + \
73 #define DISPC_OVL_PICTURE_SIZE(n) (DISPC_OVL_BASE(n) + \
74 DISPC_PIC_SIZE_OFFSET(n))
75 #define DISPC_OVL_ACCU0(n) (DISPC_OVL_BASE(n) + \
76 DISPC_ACCU0_OFFSET(n))
77 #define DISPC_OVL_ACCU1(n) (DISPC_OVL_BASE(n) + \
78 DISPC_ACCU1_OFFSET(n))
79 #define DISPC_OVL_ACCU2_0(n) (DISPC_OVL_BASE(n) + \
80 DISPC_ACCU2_0_OFFSET(n))
81 #define DISPC_OVL_ACCU2_1(n) (DISPC_OVL_BASE(n) + \
82 DISPC_ACCU2_1_OFFSET(n))
83 #define DISPC_OVL_FIR_COEF_H(n, i) (DISPC_OVL_BASE(n) + \
84 DISPC_FIR_COEF_H_OFFSET(n, i))
85 #define DISPC_OVL_FIR_COEF_HV(n, i) (DISPC_OVL_BASE(n) + \
86 DISPC_FIR_COEF_HV_OFFSET(n, i))
87 #define DISPC_OVL_FIR_COEF_H2(n, i) (DISPC_OVL_BASE(n) + \
88 DISPC_FIR_COEF_H2_OFFSET(n, i))
89 #define DISPC_OVL_FIR_COEF_HV2(n, i) (DISPC_OVL_BASE(n) + \
90 DISPC_FIR_COEF_HV2_OFFSET(n, i))
91 #define DISPC_OVL_CONV_COEF(n, i) (DISPC_OVL_BASE(n) + \
92 DISPC_CONV_COEF_OFFSET(n, i))
93 #define DISPC_OVL_FIR_COEF_V(n, i) (DISPC_OVL_BASE(n) + \
94 DISPC_FIR_COEF_V_OFFSET(n, i))
95 #define DISPC_OVL_FIR_COEF_V2(n, i) (DISPC_OVL_BASE(n) + \
96 DISPC_FIR_COEF_V2_OFFSET(n, i))
97 #define DISPC_OVL_PRELOAD(n) (DISPC_OVL_BASE(n) + \
98 DISPC_PRELOAD_OFFSET(n))
100 /* DISPC manager/channel specific registers */
101 static inline u16
DISPC_DEFAULT_COLOR(enum omap_channel channel
)
104 case OMAP_DSS_CHANNEL_LCD
:
106 case OMAP_DSS_CHANNEL_DIGIT
:
108 case OMAP_DSS_CHANNEL_LCD2
:
115 static inline u16
DISPC_TRANS_COLOR(enum omap_channel channel
)
118 case OMAP_DSS_CHANNEL_LCD
:
120 case OMAP_DSS_CHANNEL_DIGIT
:
122 case OMAP_DSS_CHANNEL_LCD2
:
129 static inline u16
DISPC_TIMING_H(enum omap_channel channel
)
132 case OMAP_DSS_CHANNEL_LCD
:
134 case OMAP_DSS_CHANNEL_DIGIT
:
136 case OMAP_DSS_CHANNEL_LCD2
:
143 static inline u16
DISPC_TIMING_V(enum omap_channel channel
)
146 case OMAP_DSS_CHANNEL_LCD
:
148 case OMAP_DSS_CHANNEL_DIGIT
:
150 case OMAP_DSS_CHANNEL_LCD2
:
157 static inline u16
DISPC_POL_FREQ(enum omap_channel channel
)
160 case OMAP_DSS_CHANNEL_LCD
:
162 case OMAP_DSS_CHANNEL_DIGIT
:
164 case OMAP_DSS_CHANNEL_LCD2
:
171 static inline u16
DISPC_DIVISORo(enum omap_channel channel
)
174 case OMAP_DSS_CHANNEL_LCD
:
176 case OMAP_DSS_CHANNEL_DIGIT
:
178 case OMAP_DSS_CHANNEL_LCD2
:
185 /* Named as DISPC_SIZE_LCD, DISPC_SIZE_DIGIT and DISPC_SIZE_LCD2 in TRM */
186 static inline u16
DISPC_SIZE_MGR(enum omap_channel channel
)
189 case OMAP_DSS_CHANNEL_LCD
:
191 case OMAP_DSS_CHANNEL_DIGIT
:
193 case OMAP_DSS_CHANNEL_LCD2
:
200 static inline u16
DISPC_DATA_CYCLE1(enum omap_channel channel
)
203 case OMAP_DSS_CHANNEL_LCD
:
205 case OMAP_DSS_CHANNEL_DIGIT
:
207 case OMAP_DSS_CHANNEL_LCD2
:
214 static inline u16
DISPC_DATA_CYCLE2(enum omap_channel channel
)
217 case OMAP_DSS_CHANNEL_LCD
:
219 case OMAP_DSS_CHANNEL_DIGIT
:
221 case OMAP_DSS_CHANNEL_LCD2
:
228 static inline u16
DISPC_DATA_CYCLE3(enum omap_channel channel
)
231 case OMAP_DSS_CHANNEL_LCD
:
233 case OMAP_DSS_CHANNEL_DIGIT
:
235 case OMAP_DSS_CHANNEL_LCD2
:
242 static inline u16
DISPC_CPR_COEF_R(enum omap_channel channel
)
245 case OMAP_DSS_CHANNEL_LCD
:
247 case OMAP_DSS_CHANNEL_DIGIT
:
249 case OMAP_DSS_CHANNEL_LCD2
:
256 static inline u16
DISPC_CPR_COEF_G(enum omap_channel channel
)
259 case OMAP_DSS_CHANNEL_LCD
:
261 case OMAP_DSS_CHANNEL_DIGIT
:
263 case OMAP_DSS_CHANNEL_LCD2
:
270 static inline u16
DISPC_CPR_COEF_B(enum omap_channel channel
)
273 case OMAP_DSS_CHANNEL_LCD
:
275 case OMAP_DSS_CHANNEL_DIGIT
:
277 case OMAP_DSS_CHANNEL_LCD2
:
284 /* DISPC overlay register base addresses */
285 static inline u16
DISPC_OVL_BASE(enum omap_plane plane
)
290 case OMAP_DSS_VIDEO1
:
292 case OMAP_DSS_VIDEO2
:
294 case OMAP_DSS_VIDEO3
:
301 /* DISPC overlay register offsets */
302 static inline u16
DISPC_BA0_OFFSET(enum omap_plane plane
)
306 case OMAP_DSS_VIDEO1
:
307 case OMAP_DSS_VIDEO2
:
309 case OMAP_DSS_VIDEO3
:
316 static inline u16
DISPC_BA1_OFFSET(enum omap_plane plane
)
320 case OMAP_DSS_VIDEO1
:
321 case OMAP_DSS_VIDEO2
:
323 case OMAP_DSS_VIDEO3
:
330 static inline u16
DISPC_BA0_UV_OFFSET(enum omap_plane plane
)
335 case OMAP_DSS_VIDEO1
:
337 case OMAP_DSS_VIDEO2
:
339 case OMAP_DSS_VIDEO3
:
346 static inline u16
DISPC_BA1_UV_OFFSET(enum omap_plane plane
)
351 case OMAP_DSS_VIDEO1
:
353 case OMAP_DSS_VIDEO2
:
355 case OMAP_DSS_VIDEO3
:
362 static inline u16
DISPC_POS_OFFSET(enum omap_plane plane
)
366 case OMAP_DSS_VIDEO1
:
367 case OMAP_DSS_VIDEO2
:
369 case OMAP_DSS_VIDEO3
:
376 static inline u16
DISPC_SIZE_OFFSET(enum omap_plane plane
)
380 case OMAP_DSS_VIDEO1
:
381 case OMAP_DSS_VIDEO2
:
383 case OMAP_DSS_VIDEO3
:
390 static inline u16
DISPC_ATTR_OFFSET(enum omap_plane plane
)
395 case OMAP_DSS_VIDEO1
:
396 case OMAP_DSS_VIDEO2
:
398 case OMAP_DSS_VIDEO3
:
405 static inline u16
DISPC_ATTR2_OFFSET(enum omap_plane plane
)
410 case OMAP_DSS_VIDEO1
:
412 case OMAP_DSS_VIDEO2
:
414 case OMAP_DSS_VIDEO3
:
421 static inline u16
DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane
)
426 case OMAP_DSS_VIDEO1
:
427 case OMAP_DSS_VIDEO2
:
429 case OMAP_DSS_VIDEO3
:
436 static inline u16
DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane
)
441 case OMAP_DSS_VIDEO1
:
442 case OMAP_DSS_VIDEO2
:
444 case OMAP_DSS_VIDEO3
:
451 static inline u16
DISPC_ROW_INC_OFFSET(enum omap_plane plane
)
456 case OMAP_DSS_VIDEO1
:
457 case OMAP_DSS_VIDEO2
:
459 case OMAP_DSS_VIDEO3
:
466 static inline u16
DISPC_PIX_INC_OFFSET(enum omap_plane plane
)
471 case OMAP_DSS_VIDEO1
:
472 case OMAP_DSS_VIDEO2
:
474 case OMAP_DSS_VIDEO3
:
481 static inline u16
DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane
)
486 case OMAP_DSS_VIDEO1
:
487 case OMAP_DSS_VIDEO2
:
488 case OMAP_DSS_VIDEO3
:
495 static inline u16
DISPC_TABLE_BA_OFFSET(enum omap_plane plane
)
500 case OMAP_DSS_VIDEO1
:
501 case OMAP_DSS_VIDEO2
:
502 case OMAP_DSS_VIDEO3
:
509 static inline u16
DISPC_FIR_OFFSET(enum omap_plane plane
)
514 case OMAP_DSS_VIDEO1
:
515 case OMAP_DSS_VIDEO2
:
517 case OMAP_DSS_VIDEO3
:
524 static inline u16
DISPC_FIR2_OFFSET(enum omap_plane plane
)
529 case OMAP_DSS_VIDEO1
:
531 case OMAP_DSS_VIDEO2
:
533 case OMAP_DSS_VIDEO3
:
540 static inline u16
DISPC_PIC_SIZE_OFFSET(enum omap_plane plane
)
545 case OMAP_DSS_VIDEO1
:
546 case OMAP_DSS_VIDEO2
:
548 case OMAP_DSS_VIDEO3
:
556 static inline u16
DISPC_ACCU0_OFFSET(enum omap_plane plane
)
561 case OMAP_DSS_VIDEO1
:
562 case OMAP_DSS_VIDEO2
:
564 case OMAP_DSS_VIDEO3
:
571 static inline u16
DISPC_ACCU2_0_OFFSET(enum omap_plane plane
)
576 case OMAP_DSS_VIDEO1
:
578 case OMAP_DSS_VIDEO2
:
580 case OMAP_DSS_VIDEO3
:
587 static inline u16
DISPC_ACCU1_OFFSET(enum omap_plane plane
)
592 case OMAP_DSS_VIDEO1
:
593 case OMAP_DSS_VIDEO2
:
595 case OMAP_DSS_VIDEO3
:
602 static inline u16
DISPC_ACCU2_1_OFFSET(enum omap_plane plane
)
607 case OMAP_DSS_VIDEO1
:
609 case OMAP_DSS_VIDEO2
:
611 case OMAP_DSS_VIDEO3
:
618 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
619 static inline u16
DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane
, u16 i
)
624 case OMAP_DSS_VIDEO1
:
625 case OMAP_DSS_VIDEO2
:
626 return 0x0034 + i
* 0x8;
627 case OMAP_DSS_VIDEO3
:
628 return 0x0010 + i
* 0x8;
634 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
635 static inline u16
DISPC_FIR_COEF_H2_OFFSET(enum omap_plane plane
, u16 i
)
640 case OMAP_DSS_VIDEO1
:
641 return 0x058C + i
* 0x8;
642 case OMAP_DSS_VIDEO2
:
643 return 0x0568 + i
* 0x8;
644 case OMAP_DSS_VIDEO3
:
645 return 0x0430 + i
* 0x8;
651 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
652 static inline u16
DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane
, u16 i
)
657 case OMAP_DSS_VIDEO1
:
658 case OMAP_DSS_VIDEO2
:
659 return 0x0038 + i
* 0x8;
660 case OMAP_DSS_VIDEO3
:
661 return 0x0014 + i
* 0x8;
667 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
668 static inline u16
DISPC_FIR_COEF_HV2_OFFSET(enum omap_plane plane
, u16 i
)
673 case OMAP_DSS_VIDEO1
:
674 return 0x0590 + i
* 8;
675 case OMAP_DSS_VIDEO2
:
676 return 0x056C + i
* 0x8;
677 case OMAP_DSS_VIDEO3
:
678 return 0x0434 + i
* 0x8;
684 /* coef index i = {0, 1, 2, 3, 4,} */
685 static inline u16
DISPC_CONV_COEF_OFFSET(enum omap_plane plane
, u16 i
)
690 case OMAP_DSS_VIDEO1
:
691 case OMAP_DSS_VIDEO2
:
692 case OMAP_DSS_VIDEO3
:
693 return 0x0074 + i
* 0x4;
699 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
700 static inline u16
DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane
, u16 i
)
705 case OMAP_DSS_VIDEO1
:
706 return 0x0124 + i
* 0x4;
707 case OMAP_DSS_VIDEO2
:
708 return 0x00B4 + i
* 0x4;
709 case OMAP_DSS_VIDEO3
:
710 return 0x0050 + i
* 0x4;
716 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
717 static inline u16
DISPC_FIR_COEF_V2_OFFSET(enum omap_plane plane
, u16 i
)
722 case OMAP_DSS_VIDEO1
:
723 return 0x05CC + i
* 0x4;
724 case OMAP_DSS_VIDEO2
:
725 return 0x05A8 + i
* 0x4;
726 case OMAP_DSS_VIDEO3
:
727 return 0x0470 + i
* 0x4;
733 static inline u16
DISPC_PRELOAD_OFFSET(enum omap_plane plane
)
738 case OMAP_DSS_VIDEO1
:
740 case OMAP_DSS_VIDEO2
:
742 case OMAP_DSS_VIDEO3
: