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
39 #define DISPC_GLOBAL_BUFFER 0x0800
40 #define DISPC_CONTROL3 0x0848
41 #define DISPC_CONFIG3 0x084C
43 /* DISPC overlay registers */
44 #define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \
46 #define DISPC_OVL_BA1(n) (DISPC_OVL_BASE(n) + \
48 #define DISPC_OVL_BA0_UV(n) (DISPC_OVL_BASE(n) + \
49 DISPC_BA0_UV_OFFSET(n))
50 #define DISPC_OVL_BA1_UV(n) (DISPC_OVL_BASE(n) + \
51 DISPC_BA1_UV_OFFSET(n))
52 #define DISPC_OVL_POSITION(n) (DISPC_OVL_BASE(n) + \
54 #define DISPC_OVL_SIZE(n) (DISPC_OVL_BASE(n) + \
56 #define DISPC_OVL_ATTRIBUTES(n) (DISPC_OVL_BASE(n) + \
58 #define DISPC_OVL_ATTRIBUTES2(n) (DISPC_OVL_BASE(n) + \
59 DISPC_ATTR2_OFFSET(n))
60 #define DISPC_OVL_FIFO_THRESHOLD(n) (DISPC_OVL_BASE(n) + \
61 DISPC_FIFO_THRESH_OFFSET(n))
62 #define DISPC_OVL_FIFO_SIZE_STATUS(n) (DISPC_OVL_BASE(n) + \
63 DISPC_FIFO_SIZE_STATUS_OFFSET(n))
64 #define DISPC_OVL_ROW_INC(n) (DISPC_OVL_BASE(n) + \
65 DISPC_ROW_INC_OFFSET(n))
66 #define DISPC_OVL_PIXEL_INC(n) (DISPC_OVL_BASE(n) + \
67 DISPC_PIX_INC_OFFSET(n))
68 #define DISPC_OVL_WINDOW_SKIP(n) (DISPC_OVL_BASE(n) + \
69 DISPC_WINDOW_SKIP_OFFSET(n))
70 #define DISPC_OVL_TABLE_BA(n) (DISPC_OVL_BASE(n) + \
71 DISPC_TABLE_BA_OFFSET(n))
72 #define DISPC_OVL_FIR(n) (DISPC_OVL_BASE(n) + \
74 #define DISPC_OVL_FIR2(n) (DISPC_OVL_BASE(n) + \
76 #define DISPC_OVL_PICTURE_SIZE(n) (DISPC_OVL_BASE(n) + \
77 DISPC_PIC_SIZE_OFFSET(n))
78 #define DISPC_OVL_ACCU0(n) (DISPC_OVL_BASE(n) + \
79 DISPC_ACCU0_OFFSET(n))
80 #define DISPC_OVL_ACCU1(n) (DISPC_OVL_BASE(n) + \
81 DISPC_ACCU1_OFFSET(n))
82 #define DISPC_OVL_ACCU2_0(n) (DISPC_OVL_BASE(n) + \
83 DISPC_ACCU2_0_OFFSET(n))
84 #define DISPC_OVL_ACCU2_1(n) (DISPC_OVL_BASE(n) + \
85 DISPC_ACCU2_1_OFFSET(n))
86 #define DISPC_OVL_FIR_COEF_H(n, i) (DISPC_OVL_BASE(n) + \
87 DISPC_FIR_COEF_H_OFFSET(n, i))
88 #define DISPC_OVL_FIR_COEF_HV(n, i) (DISPC_OVL_BASE(n) + \
89 DISPC_FIR_COEF_HV_OFFSET(n, i))
90 #define DISPC_OVL_FIR_COEF_H2(n, i) (DISPC_OVL_BASE(n) + \
91 DISPC_FIR_COEF_H2_OFFSET(n, i))
92 #define DISPC_OVL_FIR_COEF_HV2(n, i) (DISPC_OVL_BASE(n) + \
93 DISPC_FIR_COEF_HV2_OFFSET(n, i))
94 #define DISPC_OVL_CONV_COEF(n, i) (DISPC_OVL_BASE(n) + \
95 DISPC_CONV_COEF_OFFSET(n, i))
96 #define DISPC_OVL_FIR_COEF_V(n, i) (DISPC_OVL_BASE(n) + \
97 DISPC_FIR_COEF_V_OFFSET(n, i))
98 #define DISPC_OVL_FIR_COEF_V2(n, i) (DISPC_OVL_BASE(n) + \
99 DISPC_FIR_COEF_V2_OFFSET(n, i))
100 #define DISPC_OVL_PRELOAD(n) (DISPC_OVL_BASE(n) + \
101 DISPC_PRELOAD_OFFSET(n))
103 /* DISPC up/downsampling FIR filter coefficient structure */
112 const struct dispc_coef *dispc_ovl_get_scale_coef(int inc, int five_taps);
114 /* DISPC manager/channel specific registers */
115 static inline u16 DISPC_DEFAULT_COLOR(enum omap_channel channel)
118 case OMAP_DSS_CHANNEL_LCD:
120 case OMAP_DSS_CHANNEL_DIGIT:
122 case OMAP_DSS_CHANNEL_LCD2:
124 case OMAP_DSS_CHANNEL_LCD3:
132 static inline u16 DISPC_TRANS_COLOR(enum omap_channel channel)
135 case OMAP_DSS_CHANNEL_LCD:
137 case OMAP_DSS_CHANNEL_DIGIT:
139 case OMAP_DSS_CHANNEL_LCD2:
141 case OMAP_DSS_CHANNEL_LCD3:
149 static inline u16 DISPC_TIMING_H(enum omap_channel channel)
152 case OMAP_DSS_CHANNEL_LCD:
154 case OMAP_DSS_CHANNEL_DIGIT:
157 case OMAP_DSS_CHANNEL_LCD2:
159 case OMAP_DSS_CHANNEL_LCD3:
167 static inline u16 DISPC_TIMING_V(enum omap_channel channel)
170 case OMAP_DSS_CHANNEL_LCD:
172 case OMAP_DSS_CHANNEL_DIGIT:
175 case OMAP_DSS_CHANNEL_LCD2:
177 case OMAP_DSS_CHANNEL_LCD3:
185 static inline u16 DISPC_POL_FREQ(enum omap_channel channel)
188 case OMAP_DSS_CHANNEL_LCD:
190 case OMAP_DSS_CHANNEL_DIGIT:
193 case OMAP_DSS_CHANNEL_LCD2:
195 case OMAP_DSS_CHANNEL_LCD3:
203 static inline u16 DISPC_DIVISORo(enum omap_channel channel)
206 case OMAP_DSS_CHANNEL_LCD:
208 case OMAP_DSS_CHANNEL_DIGIT:
211 case OMAP_DSS_CHANNEL_LCD2:
213 case OMAP_DSS_CHANNEL_LCD3:
221 /* Named as DISPC_SIZE_LCD, DISPC_SIZE_DIGIT and DISPC_SIZE_LCD2 in TRM */
222 static inline u16 DISPC_SIZE_MGR(enum omap_channel channel)
225 case OMAP_DSS_CHANNEL_LCD:
227 case OMAP_DSS_CHANNEL_DIGIT:
229 case OMAP_DSS_CHANNEL_LCD2:
231 case OMAP_DSS_CHANNEL_LCD3:
239 static inline u16 DISPC_DATA_CYCLE1(enum omap_channel channel)
242 case OMAP_DSS_CHANNEL_LCD:
244 case OMAP_DSS_CHANNEL_DIGIT:
247 case OMAP_DSS_CHANNEL_LCD2:
249 case OMAP_DSS_CHANNEL_LCD3:
257 static inline u16 DISPC_DATA_CYCLE2(enum omap_channel channel)
260 case OMAP_DSS_CHANNEL_LCD:
262 case OMAP_DSS_CHANNEL_DIGIT:
265 case OMAP_DSS_CHANNEL_LCD2:
267 case OMAP_DSS_CHANNEL_LCD3:
275 static inline u16 DISPC_DATA_CYCLE3(enum omap_channel channel)
278 case OMAP_DSS_CHANNEL_LCD:
280 case OMAP_DSS_CHANNEL_DIGIT:
283 case OMAP_DSS_CHANNEL_LCD2:
285 case OMAP_DSS_CHANNEL_LCD3:
293 static inline u16 DISPC_CPR_COEF_R(enum omap_channel channel)
296 case OMAP_DSS_CHANNEL_LCD:
298 case OMAP_DSS_CHANNEL_DIGIT:
301 case OMAP_DSS_CHANNEL_LCD2:
303 case OMAP_DSS_CHANNEL_LCD3:
311 static inline u16 DISPC_CPR_COEF_G(enum omap_channel channel)
314 case OMAP_DSS_CHANNEL_LCD:
316 case OMAP_DSS_CHANNEL_DIGIT:
319 case OMAP_DSS_CHANNEL_LCD2:
321 case OMAP_DSS_CHANNEL_LCD3:
329 static inline u16 DISPC_CPR_COEF_B(enum omap_channel channel)
332 case OMAP_DSS_CHANNEL_LCD:
334 case OMAP_DSS_CHANNEL_DIGIT:
337 case OMAP_DSS_CHANNEL_LCD2:
339 case OMAP_DSS_CHANNEL_LCD3:
347 /* DISPC overlay register base addresses */
348 static inline u16 DISPC_OVL_BASE(enum omap_plane plane)
353 case OMAP_DSS_VIDEO1:
355 case OMAP_DSS_VIDEO2:
357 case OMAP_DSS_VIDEO3:
367 /* DISPC overlay register offsets */
368 static inline u16 DISPC_BA0_OFFSET(enum omap_plane plane)
372 case OMAP_DSS_VIDEO1:
373 case OMAP_DSS_VIDEO2:
375 case OMAP_DSS_VIDEO3:
384 static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
388 case OMAP_DSS_VIDEO1:
389 case OMAP_DSS_VIDEO2:
391 case OMAP_DSS_VIDEO3:
400 static inline u16 DISPC_BA0_UV_OFFSET(enum omap_plane plane)
406 case OMAP_DSS_VIDEO1:
408 case OMAP_DSS_VIDEO2:
410 case OMAP_DSS_VIDEO3:
420 static inline u16 DISPC_BA1_UV_OFFSET(enum omap_plane plane)
426 case OMAP_DSS_VIDEO1:
428 case OMAP_DSS_VIDEO2:
430 case OMAP_DSS_VIDEO3:
440 static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
444 case OMAP_DSS_VIDEO1:
445 case OMAP_DSS_VIDEO2:
447 case OMAP_DSS_VIDEO3:
455 static inline u16 DISPC_SIZE_OFFSET(enum omap_plane plane)
459 case OMAP_DSS_VIDEO1:
460 case OMAP_DSS_VIDEO2:
462 case OMAP_DSS_VIDEO3:
471 static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
476 case OMAP_DSS_VIDEO1:
477 case OMAP_DSS_VIDEO2:
479 case OMAP_DSS_VIDEO3:
488 static inline u16 DISPC_ATTR2_OFFSET(enum omap_plane plane)
494 case OMAP_DSS_VIDEO1:
496 case OMAP_DSS_VIDEO2:
498 case OMAP_DSS_VIDEO3:
508 static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
513 case OMAP_DSS_VIDEO1:
514 case OMAP_DSS_VIDEO2:
516 case OMAP_DSS_VIDEO3:
525 static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane)
530 case OMAP_DSS_VIDEO1:
531 case OMAP_DSS_VIDEO2:
533 case OMAP_DSS_VIDEO3:
542 static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane plane)
547 case OMAP_DSS_VIDEO1:
548 case OMAP_DSS_VIDEO2:
550 case OMAP_DSS_VIDEO3:
559 static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane plane)
564 case OMAP_DSS_VIDEO1:
565 case OMAP_DSS_VIDEO2:
567 case OMAP_DSS_VIDEO3:
576 static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane)
581 case OMAP_DSS_VIDEO1:
582 case OMAP_DSS_VIDEO2:
583 case OMAP_DSS_VIDEO3:
592 static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane plane)
597 case OMAP_DSS_VIDEO1:
598 case OMAP_DSS_VIDEO2:
599 case OMAP_DSS_VIDEO3:
608 static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
614 case OMAP_DSS_VIDEO1:
615 case OMAP_DSS_VIDEO2:
617 case OMAP_DSS_VIDEO3:
626 static inline u16 DISPC_FIR2_OFFSET(enum omap_plane plane)
632 case OMAP_DSS_VIDEO1:
634 case OMAP_DSS_VIDEO2:
636 case OMAP_DSS_VIDEO3:
646 static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
652 case OMAP_DSS_VIDEO1:
653 case OMAP_DSS_VIDEO2:
655 case OMAP_DSS_VIDEO3:
665 static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
671 case OMAP_DSS_VIDEO1:
672 case OMAP_DSS_VIDEO2:
674 case OMAP_DSS_VIDEO3:
683 static inline u16 DISPC_ACCU2_0_OFFSET(enum omap_plane plane)
689 case OMAP_DSS_VIDEO1:
691 case OMAP_DSS_VIDEO2:
693 case OMAP_DSS_VIDEO3:
703 static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
709 case OMAP_DSS_VIDEO1:
710 case OMAP_DSS_VIDEO2:
712 case OMAP_DSS_VIDEO3:
721 static inline u16 DISPC_ACCU2_1_OFFSET(enum omap_plane plane)
727 case OMAP_DSS_VIDEO1:
729 case OMAP_DSS_VIDEO2:
731 case OMAP_DSS_VIDEO3:
741 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
742 static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
748 case OMAP_DSS_VIDEO1:
749 case OMAP_DSS_VIDEO2:
750 return 0x0034 + i * 0x8;
751 case OMAP_DSS_VIDEO3:
753 return 0x0010 + i * 0x8;
760 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
761 static inline u16 DISPC_FIR_COEF_H2_OFFSET(enum omap_plane plane, u16 i)
767 case OMAP_DSS_VIDEO1:
768 return 0x058C + i * 0x8;
769 case OMAP_DSS_VIDEO2:
770 return 0x0568 + i * 0x8;
771 case OMAP_DSS_VIDEO3:
772 return 0x0430 + i * 0x8;
774 return 0x02A0 + i * 0x8;
781 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
782 static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
788 case OMAP_DSS_VIDEO1:
789 case OMAP_DSS_VIDEO2:
790 return 0x0038 + i * 0x8;
791 case OMAP_DSS_VIDEO3:
793 return 0x0014 + i * 0x8;
800 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
801 static inline u16 DISPC_FIR_COEF_HV2_OFFSET(enum omap_plane plane, u16 i)
807 case OMAP_DSS_VIDEO1:
808 return 0x0590 + i * 8;
809 case OMAP_DSS_VIDEO2:
810 return 0x056C + i * 0x8;
811 case OMAP_DSS_VIDEO3:
812 return 0x0434 + i * 0x8;
814 return 0x02A4 + i * 0x8;
821 /* coef index i = {0, 1, 2, 3, 4,} */
822 static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
828 case OMAP_DSS_VIDEO1:
829 case OMAP_DSS_VIDEO2:
830 case OMAP_DSS_VIDEO3:
832 return 0x0074 + i * 0x4;
839 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
840 static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
846 case OMAP_DSS_VIDEO1:
847 return 0x0124 + i * 0x4;
848 case OMAP_DSS_VIDEO2:
849 return 0x00B4 + i * 0x4;
850 case OMAP_DSS_VIDEO3:
852 return 0x0050 + i * 0x4;
859 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
860 static inline u16 DISPC_FIR_COEF_V2_OFFSET(enum omap_plane plane, u16 i)
866 case OMAP_DSS_VIDEO1:
867 return 0x05CC + i * 0x4;
868 case OMAP_DSS_VIDEO2:
869 return 0x05A8 + i * 0x4;
870 case OMAP_DSS_VIDEO3:
871 return 0x0470 + i * 0x4;
873 return 0x02E0 + i * 0x4;
880 static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
885 case OMAP_DSS_VIDEO1:
887 case OMAP_DSS_VIDEO2:
889 case OMAP_DSS_VIDEO3: