1 /*
2  * Allwinner SoCs display driver.
3  *
4  * Copyright (C) 2016 Allwinner.
5  *
6  * This file is licensed under the terms of the GNU General Public
7  * License version 2.  This program is licensed "as is" without any
8  * warranty of any kind, whether express or implied.
9  */
10 
11 /*******************************************************************************
12  *  All Winner Tech, All Right Reserved. 2014-2015 Copyright (c)
13  *
14  *  File name   :       de_vep_table.c
15  *
16  *  Description :       display engine 2.0 video enhancement processor
17  *                      common fir table coefficients
18  *
19  *  History     :       2014/03/28  iptang  v0.1  Initial version
20  *
21  ******************************************************************************/
22 #include "de_vep_table.h"
23 
24 int y2r[192] = {
25     /* bt601 */
26     0x000012A0, 0x0, 0x00000000, 0x0, 0x00001989, 0x0, 0xFFF21168,
27         0xFFFFFFFF, 0x000012A0, 0x0, 0xFFFFF9BE, 0xFFFFFFFF, 0xFFFFF2FE,
28         0xFFFFFFFF, 0x000877CF, 0x0,
29     0x000012A0, 0x0, 0x0000204A, 0x0, 0x00000000, 0x0, 0xFFEEB127,
30         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
31         0x00001000, 0x0,
32 
33     /* bt709 */
34     0x000012A0, 0x0, 0x00000000, 0x0, 0x00001CB0, 0x0, 0xFFF07DF4,
35         0xFFFFFFFF, 0x000012A0, 0x0, 0xfffffC98, 0xFFFFFFFF, 0xfffff775,
36         0xFFFFFFFF, 0x0004CFDF, 0x0,
37     0x000012A0, 0x0, 0x000021D7, 0x0, 0x00000000, 0x0, 0xFFEDEA7F,
38         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
39         0x00001000, 0x0,
40 
41     /* ycc */
42     0x00001000, 0x0, 0x00000000, 0x0, 0x0000166F, 0x0, 0xFFF4C84B,
43         0xFFFFFFFF, 0x00001000, 0x0, 0xFFFFFA78, 0xFFFFFFFF, 0xFFFFF491,
44         0xFFFFFFFF, 0x00087B16, 0x0,
45     0x00001000, 0x0, 0x00001C56, 0x0, 0x00000000, 0x0, 0xFFF1D4FE,
46         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
47         0x00001000, 0x0,
48 
49     /* ehance */
50     0x00001000, 0x0, 0x00000000, 0x0, 0x00001933, 0x0, 0xFFF36666,
51         0xFFFFFFFF, 0x00001000, 0x0, 0xFFFFFD02, 0xFFFFFFFF, 0xFFFFF883,
52         0xFFFFFFFF, 0x00053D71, 0x0,
53     0x00001000, 0x0, 0x00001DB2, 0x0, 0x00000000, 0x0, 0xFFF126E9,
54         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
55         0x00001000, 0x0,
56 
57     /* bt601 studio */
58     0x00001000, 0x0, 0x00000000, 0x0, 0x000015F0, 0x0, 0xFFF50831,
59         0xFFFFFFFF, 0x00001000, 0x0, 0xFFFFFAA0, 0xFFFFFFFF, 0xFFFFF4FA,
60         0xFFFFFFFF, 0x00083333, 0x0,
61     0x00001000, 0x0, 0x00001BB6, 0x0, 0x00000000, 0x0, 0xFFF224DD,
62         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
63         0x00001000, 0x0,
64 
65     /* bt709 studio */
66     0x00001000, 0x0, 0x00000000, 0x0, 0x000018A4, 0x0, 0xFFF3AE14,
67         0xFFFFFFFF, 0x00001000, 0x0, 0xFFFFFD12, 0xFFFFFFFF, 0xFFFFF8A8,
68         0xFFFFFFFF, 0x000522D1, 0x0,
69     0x00001000, 0x0, 0x00001D0E, 0x0, 0x00000000, 0x0, 0xFFF178D5,
70         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
71         0x00001000, 0x0,
72 
73 };
74 
75 int r2y[128] = {
76     /* bt601 */
77     0x0000041D, 0x0, 0x00000810, 0x0, 0x00000191, 0x0, 0x00010000, 0x0,
78         0xFFFFFDA2, 0xFFFFFFFF, 0xFFFFFB58, 0xFFFFFFFF, 0x00000706, 0x0,
79         0x00080000, 0x0,
80     0x00000706, 0x0, 0xFFFFFA1D, 0xFFFFFFFF, 0xFFFFFEDD, 0xFFFFFFFF,
81         0x00080000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
82         0x00001000, 0x0,
83 
84     /* bt709 */
85     0x000002EE, 0x0, 0x000009D3, 0x0, 0x000000FE, 0x0, 0x00010000, 0x0,
86         0xfffffe62, 0xFFFFFFFF, 0xfffffA98, 0xFFFFFFFF, 0x00000706, 0x0,
87         0x00080000, 0x0,
88     0x00000706, 0x0, 0xfffff99E, 0xFFFFFFFF, 0xffffff5C, 0xFFFFFFFF,
89         0x00080000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
90         0x00001000, 0x0,
91 
92     /* ycc */
93     0x000004C8, 0x0, 0x00000963, 0x0, 0x000001D5, 0x0, 0x00000000, 0x0,
94         0xFFFFFD4D, 0xFFFFFFFF, 0xFFFFFAB3, 0xFFFFFFFF, 0x00000800, 0x0,
95         0x00080000, 0x0,
96     0x00000800, 0x0, 0xFFFFF94F, 0xFFFFFFFF, 0xFFFFFEB2, 0xFFFFFFFF,
97         0x00080000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
98         0x00001000, 0x0,
99 
100     /* ehance */
101     0x00000368, 0x0, 0x00000B71, 0x0, 0x00000127, 0x0, 0x00000000, 0x0,
102         0xFFFFFE29, 0xFFFFFFFF, 0xFFFFF9D7, 0xFFFFFFFF, 0x00000800, 0x0,
103         0x00080000, 0x0,
104     0x00000800, 0x0, 0xFFFFF8BC, 0xFFFFFFFF, 0xFFFFFF44, 0xFFFFFFFF,
105         0x00080000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
106         0x00001000, 0x0,
107 };
108 
109 int y2y[64] = {
110     /* bt601 to bt709 */
111     0x00001000, 0x0, 0xFFFFFE27, 0xFFFFFFFF, 0xFFFFFCAC, 0xFFFFFFFF,
112         0x00029681, 0x0, 0x00000000, 0x0, 0x0000104C, 0x0, 0x000001D5, 0x0,
113         0xFFFEEF17, 0xFFFFFFFF,
114     0x00000000, 0x0, 0x00000133, 0x0, 0x00001068, 0x0, 0xFFFF326E,
115         0xFFFFFFFF, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0,
116         0x00001000, 0x0,
117 
118     /* bt709 to bt601 */
119     0x00001000, 0x0, 0x00000197, 0x0, 0x00000311, 0x0, 0xFFFDAC02,
120         0xFFFFFFFF, 0x00000000, 0x0, 0x00000FD6, 0x0, 0xFFFFFE3B,
121         0xFFFFFFFF, 0x0000F765, 0x0,
122     0x00000000, 0x0, 0xFFFFFED7, 0xFFFFFFFF, 0x00000FBC, 0x0, 0x0000B663,
123         0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00001000,
124         0x0,
125 };
126 
127 int r2r[32] = {
128     /* 0-255 to 16-235 */
129     0x00000DC0, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00010000, 0x0,
130         0x00000000, 0x0, 0x00000DC0, 0x0, 0x00000000, 0x0, 0x00010000, 0x0,
131     0x00000000, 0x0, 0x00000000, 0x0, 0x00000DC0, 0x0, 0x00010000, 0x0,
132         0x00000000, 0x0, 0x00000000, 0x0, 0x00000000, 0x0, 0x00001000, 0x0,
133 };
134 
135 int bypass_csc[12] = {
136     0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400,
137         0x00000000, 0x00000000,
138     0x00000000, 0x00000000, 0x00000400, 0x00000000,
139 };
140 
141 unsigned int sin_cos[128] = {
142     /* sin table */
143     0xffffffbd, 0xffffffbf, 0xffffffc1, 0xffffffc2, 0xffffffc4, 0xffffffc6,
144         0xffffffc8, 0xffffffca,
145     0xffffffcc, 0xffffffce, 0xffffffd1, 0xffffffd3, 0xffffffd5, 0xffffffd7,
146         0xffffffd9, 0xffffffdb,
147     0xffffffdd, 0xffffffdf, 0xffffffe2, 0xffffffe4, 0xffffffe6, 0xffffffe8,
148         0xffffffea, 0xffffffec,
149     0xffffffef, 0xfffffff1, 0xfffffff3, 0xfffffff5, 0xfffffff8, 0xfffffffa,
150         0xfffffffc, 0xfffffffe,
151     0x00000000, 0x00000002, 0x00000004, 0x00000006, 0x00000008, 0x0000000b,
152         0x0000000d, 0x0000000f,
153     0x00000011, 0x00000014, 0x00000016, 0x00000018, 0x0000001a, 0x0000001c,
154         0x0000001e, 0x00000021,
155     0x00000023, 0x00000025, 0x00000027, 0x00000029, 0x0000002b, 0x0000002d,
156         0x0000002f, 0x00000032,
157     0x00000034, 0x00000036, 0x00000038, 0x0000003a, 0x0000003c, 0x0000003e,
158         0x0000003f, 0x00000041,
159     /* cos table */
160     0x0000006c, 0x0000006d, 0x0000006e, 0x0000006f, 0x00000071, 0x00000072,
161         0x00000073, 0x00000074,
162     0x00000074, 0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00000079,
163         0x00000079, 0x0000007a,
164     0x0000007b, 0x0000007b, 0x0000007c, 0x0000007c, 0x0000007d, 0x0000007d,
165         0x0000007e, 0x0000007e,
166     0x0000007e, 0x0000007f, 0x0000007f, 0x0000007f, 0x0000007f, 0x0000007f,
167         0x0000007f, 0x0000007f,
168     0x00000080, 0x0000007f, 0x0000007f, 0x0000007f, 0x0000007f, 0x0000007f,
169         0x0000007f, 0x0000007f,
170     0x0000007e, 0x0000007e, 0x0000007e, 0x0000007d, 0x0000007d, 0x0000007c,
171         0x0000007c, 0x0000007b,
172     0x0000007b, 0x0000007a, 0x00000079, 0x00000079, 0x00000078, 0x00000077,
173         0x00000076, 0x00000075,
174     0x00000074, 0x00000074, 0x00000073, 0x00000072, 0x00000071, 0x0000006f,
175         0x0000006e, 0x0000006d
176 };
177 
178 int fcc_range_gain[6] = {
179     0x01550eaa, 0x070503f3, 0x0bdd084f, 0x0a000705,
180     0x0eaa0bdd, 0x03330155
181 };
182 
183 unsigned char ce_bypass_lut[256] = {
184     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
185     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
186     32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
187     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
188     64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
189     80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
190     96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
191         111,
192     112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
193         126, 127,
194     128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
195         142, 143,
196     144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
197         158, 159,
198     160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
199         174, 175,
200     176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
201         190, 191,
202     192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
203         206, 207,
204     208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
205         222, 223,
206     224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
207         238, 239,
208     240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
209         254, 255
210 };
211 unsigned char ce_constant_lut[256] = {
212     0, 1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11,
213     12, 14, 15, 16, 17, 19, 20, 21, 22, 24, 25, 26, 27, 29, 30, 31,
214     32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
215     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
216     64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
217     80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
218     96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
219         111,
220     112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
221         126, 127,
222     128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
223         142, 143,
224     144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
225         158, 159,
226     160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
227         174, 175,
228     176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
229         190, 191,
230     192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
231         206, 207,
232     208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
233         222, 223,
234     225, 226, 228, 229, 231, 232, 234, 235, 237, 238, 240, 241, 243, 244,
235         246, 247,
236     248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254,
237         255, 255,
238 };
239