2 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program. If not, see <http://www.gnu.org/licenses/>.
18 #ifndef __OMAP2_DISPC_REG_H
19 #define __OMAP2_DISPC_REG_H
21 /* DISPC common registers */
22 #define DISPC_REVISION 0x0000
23 #define DISPC_SYSCONFIG 0x0010
24 #define DISPC_SYSSTATUS 0x0014
25 #define DISPC_IRQSTATUS 0x0018
26 #define DISPC_IRQENABLE 0x001C
27 #define DISPC_CONTROL 0x0040
28 #define DISPC_CONFIG 0x0044
29 #define DISPC_CAPABLE 0x0048
30 #define DISPC_LINE_STATUS 0x005C
31 #define DISPC_LINE_NUMBER 0x0060
32 #define DISPC_GLOBAL_ALPHA 0x0074
33 #define DISPC_CONTROL2 0x0238
34 #define DISPC_CONFIG2 0x0620
35 #define DISPC_DIVISOR 0x0804
36 #define DISPC_GLOBAL_BUFFER 0x0800
37 #define DISPC_CONTROL3 0x0848
38 #define DISPC_CONFIG3 0x084C
39 #define DISPC_MSTANDBY_CTRL 0x0858
40 #define DISPC_GLOBAL_MFLAG_ATTRIBUTE 0x085C
42 #define DISPC_GAMMA_TABLE0 0x0630
43 #define DISPC_GAMMA_TABLE1 0x0634
44 #define DISPC_GAMMA_TABLE2 0x0638
45 #define DISPC_GAMMA_TABLE3 0x0850
47 /* DISPC overlay registers */
48 #define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \
50 #define DISPC_OVL_BA1(n) (DISPC_OVL_BASE(n) + \
52 #define DISPC_OVL_BA0_UV(n) (DISPC_OVL_BASE(n) + \
53 DISPC_BA0_UV_OFFSET(n))
54 #define DISPC_OVL_BA1_UV(n) (DISPC_OVL_BASE(n) + \
55 DISPC_BA1_UV_OFFSET(n))
56 #define DISPC_OVL_POSITION(n) (DISPC_OVL_BASE(n) + \
58 #define DISPC_OVL_SIZE(n) (DISPC_OVL_BASE(n) + \
60 #define DISPC_OVL_ATTRIBUTES(n) (DISPC_OVL_BASE(n) + \
62 #define DISPC_OVL_ATTRIBUTES2(n) (DISPC_OVL_BASE(n) + \
63 DISPC_ATTR2_OFFSET(n))
64 #define DISPC_OVL_FIFO_THRESHOLD(n) (DISPC_OVL_BASE(n) + \
65 DISPC_FIFO_THRESH_OFFSET(n))
66 #define DISPC_OVL_FIFO_SIZE_STATUS(n) (DISPC_OVL_BASE(n) + \
67 DISPC_FIFO_SIZE_STATUS_OFFSET(n))
68 #define DISPC_OVL_ROW_INC(n) (DISPC_OVL_BASE(n) + \
69 DISPC_ROW_INC_OFFSET(n))
70 #define DISPC_OVL_PIXEL_INC(n) (DISPC_OVL_BASE(n) + \
71 DISPC_PIX_INC_OFFSET(n))
72 #define DISPC_OVL_WINDOW_SKIP(n) (DISPC_OVL_BASE(n) + \
73 DISPC_WINDOW_SKIP_OFFSET(n))
74 #define DISPC_OVL_TABLE_BA(n) (DISPC_OVL_BASE(n) + \
75 DISPC_TABLE_BA_OFFSET(n))
76 #define DISPC_OVL_FIR(n) (DISPC_OVL_BASE(n) + \
78 #define DISPC_OVL_FIR2(n) (DISPC_OVL_BASE(n) + \
80 #define DISPC_OVL_PICTURE_SIZE(n) (DISPC_OVL_BASE(n) + \
81 DISPC_PIC_SIZE_OFFSET(n))
82 #define DISPC_OVL_ACCU0(n) (DISPC_OVL_BASE(n) + \
83 DISPC_ACCU0_OFFSET(n))
84 #define DISPC_OVL_ACCU1(n) (DISPC_OVL_BASE(n) + \
85 DISPC_ACCU1_OFFSET(n))
86 #define DISPC_OVL_ACCU2_0(n) (DISPC_OVL_BASE(n) + \
87 DISPC_ACCU2_0_OFFSET(n))
88 #define DISPC_OVL_ACCU2_1(n) (DISPC_OVL_BASE(n) + \
89 DISPC_ACCU2_1_OFFSET(n))
90 #define DISPC_OVL_FIR_COEF_H(n, i) (DISPC_OVL_BASE(n) + \
91 DISPC_FIR_COEF_H_OFFSET(n, i))
92 #define DISPC_OVL_FIR_COEF_HV(n, i) (DISPC_OVL_BASE(n) + \
93 DISPC_FIR_COEF_HV_OFFSET(n, i))
94 #define DISPC_OVL_FIR_COEF_H2(n, i) (DISPC_OVL_BASE(n) + \
95 DISPC_FIR_COEF_H2_OFFSET(n, i))
96 #define DISPC_OVL_FIR_COEF_HV2(n, i) (DISPC_OVL_BASE(n) + \
97 DISPC_FIR_COEF_HV2_OFFSET(n, i))
98 #define DISPC_OVL_CONV_COEF(n, i) (DISPC_OVL_BASE(n) + \
99 DISPC_CONV_COEF_OFFSET(n, i))
100 #define DISPC_OVL_FIR_COEF_V(n, i) (DISPC_OVL_BASE(n) + \
101 DISPC_FIR_COEF_V_OFFSET(n, i))
102 #define DISPC_OVL_FIR_COEF_V2(n, i) (DISPC_OVL_BASE(n) + \
103 DISPC_FIR_COEF_V2_OFFSET(n, i))
104 #define DISPC_OVL_PRELOAD(n) (DISPC_OVL_BASE(n) + \
105 DISPC_PRELOAD_OFFSET(n))
106 #define DISPC_OVL_MFLAG_THRESHOLD(n) DISPC_MFLAG_THRESHOLD_OFFSET(n)
108 /* DISPC up/downsampling FIR filter coefficient structure */
117 const struct dispc_coef *dispc_ovl_get_scale_coef(int inc, int five_taps);
119 /* DISPC manager/channel specific registers */
120 static inline u16 DISPC_DEFAULT_COLOR(enum omap_channel channel)
123 case OMAP_DSS_CHANNEL_LCD:
125 case OMAP_DSS_CHANNEL_DIGIT:
127 case OMAP_DSS_CHANNEL_LCD2:
129 case OMAP_DSS_CHANNEL_LCD3:
137 static inline u16 DISPC_TRANS_COLOR(enum omap_channel channel)
140 case OMAP_DSS_CHANNEL_LCD:
142 case OMAP_DSS_CHANNEL_DIGIT:
144 case OMAP_DSS_CHANNEL_LCD2:
146 case OMAP_DSS_CHANNEL_LCD3:
154 static inline u16 DISPC_TIMING_H(enum omap_channel channel)
157 case OMAP_DSS_CHANNEL_LCD:
159 case OMAP_DSS_CHANNEL_DIGIT:
162 case OMAP_DSS_CHANNEL_LCD2:
164 case OMAP_DSS_CHANNEL_LCD3:
172 static inline u16 DISPC_TIMING_V(enum omap_channel channel)
175 case OMAP_DSS_CHANNEL_LCD:
177 case OMAP_DSS_CHANNEL_DIGIT:
180 case OMAP_DSS_CHANNEL_LCD2:
182 case OMAP_DSS_CHANNEL_LCD3:
190 static inline u16 DISPC_POL_FREQ(enum omap_channel channel)
193 case OMAP_DSS_CHANNEL_LCD:
195 case OMAP_DSS_CHANNEL_DIGIT:
198 case OMAP_DSS_CHANNEL_LCD2:
200 case OMAP_DSS_CHANNEL_LCD3:
208 static inline u16 DISPC_DIVISORo(enum omap_channel channel)
211 case OMAP_DSS_CHANNEL_LCD:
213 case OMAP_DSS_CHANNEL_DIGIT:
216 case OMAP_DSS_CHANNEL_LCD2:
218 case OMAP_DSS_CHANNEL_LCD3:
226 /* Named as DISPC_SIZE_LCD, DISPC_SIZE_DIGIT and DISPC_SIZE_LCD2 in TRM */
227 static inline u16 DISPC_SIZE_MGR(enum omap_channel channel)
230 case OMAP_DSS_CHANNEL_LCD:
232 case OMAP_DSS_CHANNEL_DIGIT:
234 case OMAP_DSS_CHANNEL_LCD2:
236 case OMAP_DSS_CHANNEL_LCD3:
244 static inline u16 DISPC_DATA_CYCLE1(enum omap_channel channel)
247 case OMAP_DSS_CHANNEL_LCD:
249 case OMAP_DSS_CHANNEL_DIGIT:
252 case OMAP_DSS_CHANNEL_LCD2:
254 case OMAP_DSS_CHANNEL_LCD3:
262 static inline u16 DISPC_DATA_CYCLE2(enum omap_channel channel)
265 case OMAP_DSS_CHANNEL_LCD:
267 case OMAP_DSS_CHANNEL_DIGIT:
270 case OMAP_DSS_CHANNEL_LCD2:
272 case OMAP_DSS_CHANNEL_LCD3:
280 static inline u16 DISPC_DATA_CYCLE3(enum omap_channel channel)
283 case OMAP_DSS_CHANNEL_LCD:
285 case OMAP_DSS_CHANNEL_DIGIT:
288 case OMAP_DSS_CHANNEL_LCD2:
290 case OMAP_DSS_CHANNEL_LCD3:
298 static inline u16 DISPC_CPR_COEF_R(enum omap_channel channel)
301 case OMAP_DSS_CHANNEL_LCD:
303 case OMAP_DSS_CHANNEL_DIGIT:
306 case OMAP_DSS_CHANNEL_LCD2:
308 case OMAP_DSS_CHANNEL_LCD3:
316 static inline u16 DISPC_CPR_COEF_G(enum omap_channel channel)
319 case OMAP_DSS_CHANNEL_LCD:
321 case OMAP_DSS_CHANNEL_DIGIT:
324 case OMAP_DSS_CHANNEL_LCD2:
326 case OMAP_DSS_CHANNEL_LCD3:
334 static inline u16 DISPC_CPR_COEF_B(enum omap_channel channel)
337 case OMAP_DSS_CHANNEL_LCD:
339 case OMAP_DSS_CHANNEL_DIGIT:
342 case OMAP_DSS_CHANNEL_LCD2:
344 case OMAP_DSS_CHANNEL_LCD3:
352 /* DISPC overlay register base addresses */
353 static inline u16 DISPC_OVL_BASE(enum omap_plane_id plane)
358 case OMAP_DSS_VIDEO1:
360 case OMAP_DSS_VIDEO2:
362 case OMAP_DSS_VIDEO3:
372 /* DISPC overlay register offsets */
373 static inline u16 DISPC_BA0_OFFSET(enum omap_plane_id plane)
377 case OMAP_DSS_VIDEO1:
378 case OMAP_DSS_VIDEO2:
380 case OMAP_DSS_VIDEO3:
389 static inline u16 DISPC_BA1_OFFSET(enum omap_plane_id plane)
393 case OMAP_DSS_VIDEO1:
394 case OMAP_DSS_VIDEO2:
396 case OMAP_DSS_VIDEO3:
405 static inline u16 DISPC_BA0_UV_OFFSET(enum omap_plane_id plane)
411 case OMAP_DSS_VIDEO1:
413 case OMAP_DSS_VIDEO2:
415 case OMAP_DSS_VIDEO3:
425 static inline u16 DISPC_BA1_UV_OFFSET(enum omap_plane_id plane)
431 case OMAP_DSS_VIDEO1:
433 case OMAP_DSS_VIDEO2:
435 case OMAP_DSS_VIDEO3:
445 static inline u16 DISPC_POS_OFFSET(enum omap_plane_id plane)
449 case OMAP_DSS_VIDEO1:
450 case OMAP_DSS_VIDEO2:
452 case OMAP_DSS_VIDEO3:
460 static inline u16 DISPC_SIZE_OFFSET(enum omap_plane_id plane)
464 case OMAP_DSS_VIDEO1:
465 case OMAP_DSS_VIDEO2:
467 case OMAP_DSS_VIDEO3:
476 static inline u16 DISPC_ATTR_OFFSET(enum omap_plane_id plane)
481 case OMAP_DSS_VIDEO1:
482 case OMAP_DSS_VIDEO2:
484 case OMAP_DSS_VIDEO3:
493 static inline u16 DISPC_ATTR2_OFFSET(enum omap_plane_id plane)
499 case OMAP_DSS_VIDEO1:
501 case OMAP_DSS_VIDEO2:
503 case OMAP_DSS_VIDEO3:
513 static inline u16 DISPC_FIFO_THRESH_OFFSET(enum omap_plane_id plane)
518 case OMAP_DSS_VIDEO1:
519 case OMAP_DSS_VIDEO2:
521 case OMAP_DSS_VIDEO3:
530 static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum omap_plane_id plane)
535 case OMAP_DSS_VIDEO1:
536 case OMAP_DSS_VIDEO2:
538 case OMAP_DSS_VIDEO3:
547 static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane_id plane)
552 case OMAP_DSS_VIDEO1:
553 case OMAP_DSS_VIDEO2:
555 case OMAP_DSS_VIDEO3:
564 static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane_id plane)
569 case OMAP_DSS_VIDEO1:
570 case OMAP_DSS_VIDEO2:
572 case OMAP_DSS_VIDEO3:
581 static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum omap_plane_id plane)
586 case OMAP_DSS_VIDEO1:
587 case OMAP_DSS_VIDEO2:
588 case OMAP_DSS_VIDEO3:
597 static inline u16 DISPC_TABLE_BA_OFFSET(enum omap_plane_id plane)
602 case OMAP_DSS_VIDEO1:
603 case OMAP_DSS_VIDEO2:
604 case OMAP_DSS_VIDEO3:
613 static inline u16 DISPC_FIR_OFFSET(enum omap_plane_id plane)
619 case OMAP_DSS_VIDEO1:
620 case OMAP_DSS_VIDEO2:
622 case OMAP_DSS_VIDEO3:
631 static inline u16 DISPC_FIR2_OFFSET(enum omap_plane_id plane)
637 case OMAP_DSS_VIDEO1:
639 case OMAP_DSS_VIDEO2:
641 case OMAP_DSS_VIDEO3:
651 static inline u16 DISPC_PIC_SIZE_OFFSET(enum omap_plane_id plane)
657 case OMAP_DSS_VIDEO1:
658 case OMAP_DSS_VIDEO2:
660 case OMAP_DSS_VIDEO3:
670 static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane_id plane)
676 case OMAP_DSS_VIDEO1:
677 case OMAP_DSS_VIDEO2:
679 case OMAP_DSS_VIDEO3:
688 static inline u16 DISPC_ACCU2_0_OFFSET(enum omap_plane_id plane)
694 case OMAP_DSS_VIDEO1:
696 case OMAP_DSS_VIDEO2:
698 case OMAP_DSS_VIDEO3:
708 static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane_id plane)
714 case OMAP_DSS_VIDEO1:
715 case OMAP_DSS_VIDEO2:
717 case OMAP_DSS_VIDEO3:
726 static inline u16 DISPC_ACCU2_1_OFFSET(enum omap_plane_id plane)
732 case OMAP_DSS_VIDEO1:
734 case OMAP_DSS_VIDEO2:
736 case OMAP_DSS_VIDEO3:
746 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
747 static inline u16 DISPC_FIR_COEF_H_OFFSET(enum omap_plane_id plane, u16 i)
753 case OMAP_DSS_VIDEO1:
754 case OMAP_DSS_VIDEO2:
755 return 0x0034 + i * 0x8;
756 case OMAP_DSS_VIDEO3:
758 return 0x0010 + i * 0x8;
765 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
766 static inline u16 DISPC_FIR_COEF_H2_OFFSET(enum omap_plane_id plane, u16 i)
772 case OMAP_DSS_VIDEO1:
773 return 0x058C + i * 0x8;
774 case OMAP_DSS_VIDEO2:
775 return 0x0568 + i * 0x8;
776 case OMAP_DSS_VIDEO3:
777 return 0x0430 + i * 0x8;
779 return 0x02A0 + i * 0x8;
786 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
787 static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum omap_plane_id plane, u16 i)
793 case OMAP_DSS_VIDEO1:
794 case OMAP_DSS_VIDEO2:
795 return 0x0038 + i * 0x8;
796 case OMAP_DSS_VIDEO3:
798 return 0x0014 + i * 0x8;
805 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
806 static inline u16 DISPC_FIR_COEF_HV2_OFFSET(enum omap_plane_id plane, u16 i)
812 case OMAP_DSS_VIDEO1:
813 return 0x0590 + i * 8;
814 case OMAP_DSS_VIDEO2:
815 return 0x056C + i * 0x8;
816 case OMAP_DSS_VIDEO3:
817 return 0x0434 + i * 0x8;
819 return 0x02A4 + i * 0x8;
826 /* coef index i = {0, 1, 2, 3, 4,} */
827 static inline u16 DISPC_CONV_COEF_OFFSET(enum omap_plane_id plane, u16 i)
833 case OMAP_DSS_VIDEO1:
834 case OMAP_DSS_VIDEO2:
835 case OMAP_DSS_VIDEO3:
837 return 0x0074 + i * 0x4;
844 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
845 static inline u16 DISPC_FIR_COEF_V_OFFSET(enum omap_plane_id plane, u16 i)
851 case OMAP_DSS_VIDEO1:
852 return 0x0124 + i * 0x4;
853 case OMAP_DSS_VIDEO2:
854 return 0x00B4 + i * 0x4;
855 case OMAP_DSS_VIDEO3:
857 return 0x0050 + i * 0x4;
864 /* coef index i = {0, 1, 2, 3, 4, 5, 6, 7} */
865 static inline u16 DISPC_FIR_COEF_V2_OFFSET(enum omap_plane_id plane, u16 i)
871 case OMAP_DSS_VIDEO1:
872 return 0x05CC + i * 0x4;
873 case OMAP_DSS_VIDEO2:
874 return 0x05A8 + i * 0x4;
875 case OMAP_DSS_VIDEO3:
876 return 0x0470 + i * 0x4;
878 return 0x02E0 + i * 0x4;
885 static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane_id plane)
890 case OMAP_DSS_VIDEO1:
892 case OMAP_DSS_VIDEO2:
894 case OMAP_DSS_VIDEO3:
902 static inline u16 DISPC_MFLAG_THRESHOLD_OFFSET(enum omap_plane_id plane)
907 case OMAP_DSS_VIDEO1:
909 case OMAP_DSS_VIDEO2:
911 case OMAP_DSS_VIDEO3: