2 * linux/drivers/video/omap2/dss/dispc.h
4 * Copyright (C) 2011 Texas Instruments
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
42 #define DISPC_MSTANDBY_CTRL 0x0858
43 #define DISPC_GLOBAL_MFLAG_ATTRIBUTE 0x085C
45 #define DISPC_GAMMA_TABLE0 0x0630
46 #define DISPC_GAMMA_TABLE1 0x0634
47 #define DISPC_GAMMA_TABLE2 0x0638
48 #define DISPC_GAMMA_TABLE3 0x0850
50 /* DISPC overlay registers */
51 #define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \
53 #define DISPC_OVL_BA1(n) (DISPC_OVL_BASE(n) + \
55 #define DISPC_OVL_BA0_UV(n) (DISPC_OVL_BASE(n) + \
56 DISPC_BA0_UV_OFFSET(n))
57 #define DISPC_OVL_BA1_UV(n) (DISPC_OVL_BASE(n) + \
58 DISPC_BA1_UV_OFFSET(n))
59 #define DISPC_OVL_POSITION(n) (DISPC_OVL_BASE(n) + \
61 #define DISPC_OVL_SIZE(n) (DISPC_OVL_BASE(n) + \
63 #define DISPC_OVL_ATTRIBUTES(n) (DISPC_OVL_BASE(n) + \
65 #define DISPC_OVL_ATTRIBUTES2(n) (DISPC_OVL_BASE(n) + \
66 DISPC_ATTR2_OFFSET(n))
67 #define DISPC_OVL_FIFO_THRESHOLD(n) (DISPC_OVL_BASE(n) + \
68 DISPC_FIFO_THRESH_OFFSET(n))
69 #define DISPC_OVL_FIFO_SIZE_STATUS(n) (DISPC_OVL_BASE(n) + \
70 DISPC_FIFO_SIZE_STATUS_OFFSET(n))
71 #define DISPC_OVL_ROW_INC(n) (DISPC_OVL_BASE(n) + \
72 DISPC_ROW_INC_OFFSET(n))
73 #define DISPC_OVL_PIXEL_INC(n) (DISPC_OVL_BASE(n) + \
74 DISPC_PIX_INC_OFFSET(n))
75 #define DISPC_OVL_WINDOW_SKIP(n) (DISPC_OVL_BASE(n) + \
76 DISPC_WINDOW_SKIP_OFFSET(n))
77 #define DISPC_OVL_TABLE_BA(n) (DISPC_OVL_BASE(n) + \
78 DISPC_TABLE_BA_OFFSET(n))
79 #define DISPC_OVL_FIR(n) (DISPC_OVL_BASE(n) + \
81 #define DISPC_OVL_FIR2(n) (DISPC_OVL_BASE(n) + \
83 #define DISPC_OVL_PICTURE_SIZE(n) (DISPC_OVL_BASE(n) + \
84 DISPC_PIC_SIZE_OFFSET(n))
85 #define DISPC_OVL_ACCU0(n) (DISPC_OVL_BASE(n) + \
86 DISPC_ACCU0_OFFSET(n))
87 #define DISPC_OVL_ACCU1(n) (DISPC_OVL_BASE(n) + \
88 DISPC_ACCU1_OFFSET(n))
89 #define DISPC_OVL_ACCU2_0(n) (DISPC_OVL_BASE(n) + \
90 DISPC_ACCU2_0_OFFSET(n))
91 #define DISPC_OVL_ACCU2_1(n) (DISPC_OVL_BASE(n) + \
92 DISPC_ACCU2_1_OFFSET(n))
93 #define DISPC_OVL_FIR_COEF_H(n, i) (DISPC_OVL_BASE(n) + \
94 DISPC_FIR_COEF_H_OFFSET(n, i))
95 #define DISPC_OVL_FIR_COEF_HV(n, i) (DISPC_OVL_BASE(n) + \
96 DISPC_FIR_COEF_HV_OFFSET(n, i))
97 #define DISPC_OVL_FIR_COEF_H2(n, i) (DISPC_OVL_BASE(n) + \
98 DISPC_FIR_COEF_H2_OFFSET(n, i))
99 #define DISPC_OVL_FIR_COEF_HV2(n, i) (DISPC_OVL_BASE(n) + \
100 DISPC_FIR_COEF_HV2_OFFSET(n, i))
101 #define DISPC_OVL_CONV_COEF(n, i) (DISPC_OVL_BASE(n) + \
102 DISPC_CONV_COEF_OFFSET(n, i))
103 #define DISPC_OVL_FIR_COEF_V(n, i) (DISPC_OVL_BASE(n) + \
104 DISPC_FIR_COEF_V_OFFSET(n, i))
105 #define DISPC_OVL_FIR_COEF_V2(n, i) (DISPC_OVL_BASE(n) + \
106 DISPC_FIR_COEF_V2_OFFSET(n, i))
107 #define DISPC_OVL_PRELOAD(n) (DISPC_OVL_BASE(n) + \
108 DISPC_PRELOAD_OFFSET(n))
109 #define DISPC_OVL_MFLAG_THRESHOLD(n) DISPC_MFLAG_THRESHOLD_OFFSET(n)
111 /* DISPC up/downsampling FIR filter coefficient structure */
120 const struct dispc_coef *dispc_ovl_get_scale_coef(int inc, int five_taps);
122 /* DISPC manager/channel specific registers */
123 static inline u16 DISPC_DEFAULT_COLOR(enum omap_channel channel)
126 case OMAP_DSS_CHANNEL_LCD:
128 case OMAP_DSS_CHANNEL_DIGIT:
130 case OMAP_DSS_CHANNEL_LCD2:
132 case OMAP_DSS_CHANNEL_LCD3:
140 static inline u16 DISPC_TRANS_COLOR(enum omap_channel channel)
143 case OMAP_DSS_CHANNEL_LCD:
145 case OMAP_DSS_CHANNEL_DIGIT:
147 case OMAP_DSS_CHANNEL_LCD2:
149 case OMAP_DSS_CHANNEL_LCD3:
157 static inline u16 DISPC_TIMING_H(enum omap_channel channel)
160 case OMAP_DSS_CHANNEL_LCD:
162 case OMAP_DSS_CHANNEL_DIGIT:
165 case OMAP_DSS_CHANNEL_LCD2:
167 case OMAP_DSS_CHANNEL_LCD3:
175 static inline u16 DISPC_TIMING_V(enum omap_channel channel)
178 case OMAP_DSS_CHANNEL_LCD:
180 case OMAP_DSS_CHANNEL_DIGIT:
183 case OMAP_DSS_CHANNEL_LCD2:
185 case OMAP_DSS_CHANNEL_LCD3:
193 static inline u16 DISPC_POL_FREQ(enum omap_channel channel)
196 case OMAP_DSS_CHANNEL_LCD:
198 case OMAP_DSS_CHANNEL_DIGIT:
201 case OMAP_DSS_CHANNEL_LCD2:
203 case OMAP_DSS_CHANNEL_LCD3:
211 static inline u16 DISPC_DIVISORo(enum omap_channel channel)
214 case OMAP_DSS_CHANNEL_LCD:
216 case OMAP_DSS_CHANNEL_DIGIT:
219 case OMAP_DSS_CHANNEL_LCD2:
221 case OMAP_DSS_CHANNEL_LCD3:
229 /* Named as DISPC_SIZE_LCD, DISPC_SIZE_DIGIT and DISPC_SIZE_LCD2 in TRM */
230 static inline u16 DISPC_SIZE_MGR(enum omap_channel channel)
233 case OMAP_DSS_CHANNEL_LCD:
235 case OMAP_DSS_CHANNEL_DIGIT:
237 case OMAP_DSS_CHANNEL_LCD2:
239 case OMAP_DSS_CHANNEL_LCD3:
247 static inline u16 DISPC_DATA_CYCLE1(enum omap_channel channel)
250 case OMAP_DSS_CHANNEL_LCD:
252 case OMAP_DSS_CHANNEL_DIGIT:
255 case OMAP_DSS_CHANNEL_LCD2:
257 case OMAP_DSS_CHANNEL_LCD3:
265 static inline u16 DISPC_DATA_CYCLE2(enum omap_channel channel)
268 case OMAP_DSS_CHANNEL_LCD:
270 case OMAP_DSS_CHANNEL_DIGIT:
273 case OMAP_DSS_CHANNEL_LCD2:
275 case OMAP_DSS_CHANNEL_LCD3:
283 static inline u16 DISPC_DATA_CYCLE3(enum omap_channel channel)
286 case OMAP_DSS_CHANNEL_LCD:
288 case OMAP_DSS_CHANNEL_DIGIT:
291 case OMAP_DSS_CHANNEL_LCD2:
293 case OMAP_DSS_CHANNEL_LCD3:
301 static inline u16 DISPC_CPR_COEF_R(enum omap_channel channel)
304 case OMAP_DSS_CHANNEL_LCD:
306 case OMAP_DSS_CHANNEL_DIGIT:
309 case OMAP_DSS_CHANNEL_LCD2:
311 case OMAP_DSS_CHANNEL_LCD3:
319 static inline u16 DISPC_CPR_COEF_G(enum omap_channel channel)
322 case OMAP_DSS_CHANNEL_LCD:
324 case OMAP_DSS_CHANNEL_DIGIT:
327 case OMAP_DSS_CHANNEL_LCD2:
329 case OMAP_DSS_CHANNEL_LCD3:
337 static inline u16 DISPC_CPR_COEF_B(enum omap_channel channel)
340 case OMAP_DSS_CHANNEL_LCD:
342 case OMAP_DSS_CHANNEL_DIGIT:
345 case OMAP_DSS_CHANNEL_LCD2:
347 case OMAP_DSS_CHANNEL_LCD3:
355 /* DISPC overlay register base addresses */
356 static inline u16 DISPC_OVL_BASE(enum omap_plane plane)
361 case OMAP_DSS_VIDEO1:
363 case OMAP_DSS_VIDEO2:
365 case OMAP_DSS_VIDEO3:
375 /* DISPC overlay register offsets */
376 static inline u16 DISPC_BA0_OFFSET(enum omap_plane plane)
380 case OMAP_DSS_VIDEO1:
381 case OMAP_DSS_VIDEO2:
383 case OMAP_DSS_VIDEO3:
392 static inline u16 DISPC_BA1_OFFSET(enum omap_plane plane)
396 case OMAP_DSS_VIDEO1:
397 case OMAP_DSS_VIDEO2:
399 case OMAP_DSS_VIDEO3:
408 static inline u16 DISPC_BA0_UV_OFFSET(enum omap_plane plane)
414 case OMAP_DSS_VIDEO1:
416 case OMAP_DSS_VIDEO2:
418 case OMAP_DSS_VIDEO3:
428 static inline u16 DISPC_BA1_UV_OFFSET(enum omap_plane plane)
434 case OMAP_DSS_VIDEO1:
436 case OMAP_DSS_VIDEO2:
438 case OMAP_DSS_VIDEO3:
448 static inline u16 DISPC_POS_OFFSET(enum omap_plane plane)
452 case OMAP_DSS_VIDEO1:
453 case OMAP_DSS_VIDEO2:
455 case OMAP_DSS_VIDEO3:
463 static inline u16 DISPC_SIZE_OFFSET(enum omap_plane plane)
467 case OMAP_DSS_VIDEO1:
468 case OMAP_DSS_VIDEO2:
470 case OMAP_DSS_VIDEO3:
479 static inline u16 DISPC_ATTR_OFFSET(enum omap_plane plane)
484 case OMAP_DSS_VIDEO1:
485 case OMAP_DSS_VIDEO2:
487 case OMAP_DSS_VIDEO3:
496 static inline u16 DISPC_ATTR2_OFFSET(enum omap_plane plane)
502 case OMAP_DSS_VIDEO1:
504 case OMAP_DSS_VIDEO2:
506 case OMAP_DSS_VIDEO3:
516 static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane plane)
521 case OMAP_DSS_VIDEO1:
522 case OMAP_DSS_VIDEO2:
524 case OMAP_DSS_VIDEO3:
533 static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane plane)
538 case OMAP_DSS_VIDEO1:
539 case OMAP_DSS_VIDEO2:
541 case OMAP_DSS_VIDEO3:
550 static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane plane)
555 case OMAP_DSS_VIDEO1:
556 case OMAP_DSS_VIDEO2:
558 case OMAP_DSS_VIDEO3:
567 static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane plane)
572 case OMAP_DSS_VIDEO1:
573 case OMAP_DSS_VIDEO2:
575 case OMAP_DSS_VIDEO3:
584 static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane plane)
589 case OMAP_DSS_VIDEO1:
590 case OMAP_DSS_VIDEO2:
591 case OMAP_DSS_VIDEO3:
600 static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane plane)
605 case OMAP_DSS_VIDEO1:
606 case OMAP_DSS_VIDEO2:
607 case OMAP_DSS_VIDEO3:
616 static inline u16 DISPC_FIR_OFFSET(enum omap_plane plane)
622 case OMAP_DSS_VIDEO1:
623 case OMAP_DSS_VIDEO2:
625 case OMAP_DSS_VIDEO3:
634 static inline u16 DISPC_FIR2_OFFSET(enum omap_plane plane)
640 case OMAP_DSS_VIDEO1:
642 case OMAP_DSS_VIDEO2:
644 case OMAP_DSS_VIDEO3:
654 static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane plane)
660 case OMAP_DSS_VIDEO1:
661 case OMAP_DSS_VIDEO2:
663 case OMAP_DSS_VIDEO3:
673 static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane plane)
679 case OMAP_DSS_VIDEO1:
680 case OMAP_DSS_VIDEO2:
682 case OMAP_DSS_VIDEO3:
691 static inline u16 DISPC_ACCU2_0_OFFSET(enum omap_plane plane)
697 case OMAP_DSS_VIDEO1:
699 case OMAP_DSS_VIDEO2:
701 case OMAP_DSS_VIDEO3:
711 static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane plane)
717 case OMAP_DSS_VIDEO1:
718 case OMAP_DSS_VIDEO2:
720 case OMAP_DSS_VIDEO3:
729 static inline u16 DISPC_ACCU2_1_OFFSET(enum omap_plane plane)
735 case OMAP_DSS_VIDEO1:
737 case OMAP_DSS_VIDEO2:
739 case OMAP_DSS_VIDEO3:
749 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
750 static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane plane, u16 i)
756 case OMAP_DSS_VIDEO1:
757 case OMAP_DSS_VIDEO2:
758 return 0x0034 + i * 0x8;
759 case OMAP_DSS_VIDEO3:
761 return 0x0010 + i * 0x8;
768 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
769 static inline u16 DISPC_FIR_COEF_H2_OFFSET(enum omap_plane plane, u16 i)
775 case OMAP_DSS_VIDEO1:
776 return 0x058C + i * 0x8;
777 case OMAP_DSS_VIDEO2:
778 return 0x0568 + i * 0x8;
779 case OMAP_DSS_VIDEO3:
780 return 0x0430 + i * 0x8;
782 return 0x02A0 + i * 0x8;
789 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
790 static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane plane, u16 i)
796 case OMAP_DSS_VIDEO1:
797 case OMAP_DSS_VIDEO2:
798 return 0x0038 + i * 0x8;
799 case OMAP_DSS_VIDEO3:
801 return 0x0014 + i * 0x8;
808 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
809 static inline u16 DISPC_FIR_COEF_HV2_OFFSET(enum omap_plane plane, u16 i)
815 case OMAP_DSS_VIDEO1:
816 return 0x0590 + i * 8;
817 case OMAP_DSS_VIDEO2:
818 return 0x056C + i * 0x8;
819 case OMAP_DSS_VIDEO3:
820 return 0x0434 + i * 0x8;
822 return 0x02A4 + i * 0x8;
829 /* coef index i = {0, 1, 2, 3, 4,} */
830 static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane plane, u16 i)
836 case OMAP_DSS_VIDEO1:
837 case OMAP_DSS_VIDEO2:
838 case OMAP_DSS_VIDEO3:
840 return 0x0074 + i * 0x4;
847 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
848 static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane plane, u16 i)
854 case OMAP_DSS_VIDEO1:
855 return 0x0124 + i * 0x4;
856 case OMAP_DSS_VIDEO2:
857 return 0x00B4 + i * 0x4;
858 case OMAP_DSS_VIDEO3:
860 return 0x0050 + i * 0x4;
867 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
868 static inline u16 DISPC_FIR_COEF_V2_OFFSET(enum omap_plane plane, u16 i)
874 case OMAP_DSS_VIDEO1:
875 return 0x05CC + i * 0x4;
876 case OMAP_DSS_VIDEO2:
877 return 0x05A8 + i * 0x4;
878 case OMAP_DSS_VIDEO3:
879 return 0x0470 + i * 0x4;
881 return 0x02E0 + i * 0x4;
888 static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane plane)
893 case OMAP_DSS_VIDEO1:
895 case OMAP_DSS_VIDEO2:
897 case OMAP_DSS_VIDEO3:
905 static inline u16 DISPC_MFLAG_THRESHOLD_OFFSET(enum omap_plane plane)
910 case OMAP_DSS_VIDEO1:
912 case OMAP_DSS_VIDEO2:
914 case OMAP_DSS_VIDEO3: