1/*
2 * Copyright (C) 2017 Jernej Skrabec <jernej.skrabec@siol.net>
3 *
4 * Coefficients are taken from BSP driver, which is:
5 * Copyright (C) 2014-2015 Allwinner
6 *
7 * This file is licensed under the terms of the GNU General Public
8 * License version 2. This program is licensed "as is" without any
9 * warranty of any kind, whether express or implied.
10 */
11
12#include "sun8i_vi_scaler.h"
13
14static const u32 lan3coefftab32_left[480] = {
15 0x40000000, 0x40fe0000, 0x3ffd0100, 0x3efc0100,
16 0x3efb0100, 0x3dfa0200, 0x3cf90200, 0x3bf80200,
17 0x39f70200, 0x37f70200, 0x35f70200, 0x33f70200,
18 0x31f70200, 0x2ef70200, 0x2cf70200, 0x2af70200,
19 0x27f70200, 0x24f80100, 0x22f80100, 0x1ef90100,
20 0x1cf90100, 0x19fa0100, 0x17fa0100, 0x14fb0100,
21 0x11fc0000, 0x0ffc0000, 0x0cfd0000, 0x0afd0000,
22 0x08fe0000, 0x05ff0000, 0x03ff0000, 0x02000000,
23
24 0x3806fc02, 0x3805fc02, 0x3803fd01, 0x3801fe01,
25 0x3700fe01, 0x35ffff01, 0x35fdff01, 0x34fc0001,
26 0x34fb0000, 0x33fa0000, 0x31fa0100, 0x2ff90100,
27 0x2df80200, 0x2bf80200, 0x2af70200, 0x28f70200,
28 0x27f70200, 0x24f70300, 0x22f70300, 0x1ff70300,
29 0x1ef70300, 0x1cf70300, 0x1af70300, 0x18f70300,
30 0x16f80300, 0x13f80300, 0x11f90300, 0x0ef90300,
31 0x0efa0200, 0x0cfa0200, 0x0afb0200, 0x08fb0200,
32
33 0x320bfa02, 0x3309fa02, 0x3208fb02, 0x3206fb02,
34 0x3205fb02, 0x3104fc02, 0x3102fc01, 0x3001fd01,
35 0x3000fd01, 0x2ffffd01, 0x2efefe01, 0x2dfdfe01,
36 0x2bfcff01, 0x29fcff01, 0x28fbff01, 0x27fa0001,
37 0x26fa0000, 0x24f90000, 0x22f90100, 0x20f90100,
38 0x1ff80100, 0x1ef80100, 0x1cf80100, 0x1af80200,
39 0x18f80200, 0x17f80200, 0x15f80200, 0x12f80200,
40 0x11f90200, 0x0ff90200, 0x0df90200, 0x0cfa0200,
41
42 0x2e0efa01, 0x2f0dfa01, 0x2f0bfa01, 0x2e0afa01,
43 0x2e09fa01, 0x2e07fb01, 0x2d06fb01, 0x2d05fb01,
44 0x2c04fb01, 0x2b03fc01, 0x2a02fc01, 0x2a01fc01,
45 0x2800fd01, 0x28fffd01, 0x26fefd01, 0x25fefe01,
46 0x24fdfe01, 0x23fcfe01, 0x21fcff01, 0x20fbff01,
47 0x1efbff01, 0x1efbff00, 0x1cfa0000, 0x1bfa0000,
48 0x19fa0000, 0x18fa0000, 0x17f90000, 0x15f90100,
49 0x14f90100, 0x12f90100, 0x11f90100, 0x0ff90100,
50
51 0x2b10fa00, 0x2b0ffa00, 0x2b0efa00, 0x2b0cfa00,
52 0x2b0bfa00, 0x2a0afb01, 0x2a09fb01, 0x2908fb01,
53 0x2807fb01, 0x2806fb01, 0x2805fb01, 0x2604fc01,
54 0x2503fc01, 0x2502fc01, 0x2401fc01, 0x2301fc01,
55 0x2100fd01, 0x21fffd01, 0x21fffd01, 0x20fefd01,
56 0x1dfefe01, 0x1cfdfe01, 0x1cfdfe00, 0x1bfcfe00,
57 0x19fcff00, 0x19fbff00, 0x17fbff00, 0x16fbff00,
58 0x15fbff00, 0x14fb0000, 0x13fa0000, 0x11fa0000,
59
60 0x2811fcff, 0x2810fcff, 0x280ffbff, 0x280efbff,
61 0x270dfb00, 0x270cfb00, 0x270bfb00, 0x260afb00,
62 0x2609fb00, 0x2508fb00, 0x2507fb00, 0x2407fb00,
63 0x2406fc00, 0x2305fc00, 0x2204fc00, 0x2203fc00,
64 0x2103fc00, 0x2002fc00, 0x1f01fd00, 0x1e01fd00,
65 0x1d00fd00, 0x1dfffd00, 0x1cfffd00, 0x1bfefd00,
66 0x1afefe00, 0x19fefe00, 0x18fdfe00, 0x17fdfe00,
67 0x16fdfe00, 0x15fcff00, 0x13fcff00, 0x12fcff00,
68
69 0x2512fdfe, 0x2511fdff, 0x2410fdff, 0x240ffdff,
70 0x240efcff, 0x240dfcff, 0x240dfcff, 0x240cfcff,
71 0x230bfcff, 0x230afc00, 0x2209fc00, 0x2108fc00,
72 0x2108fc00, 0x2007fc00, 0x2006fc00, 0x2005fc00,
73 0x1f05fc00, 0x1e04fc00, 0x1e03fc00, 0x1c03fd00,
74 0x1c02fd00, 0x1b02fd00, 0x1b01fd00, 0x1a00fd00,
75 0x1900fd00, 0x1800fd00, 0x17fffe00, 0x16fffe00,
76 0x16fefe00, 0x14fefe00, 0x13fefe00, 0x13fdfe00,
77
78 0x2212fffe, 0x2211fefe, 0x2211fefe, 0x2110fefe,
79 0x210ffeff, 0x220efdff, 0x210dfdff, 0x210dfdff,
80 0x210cfdff, 0x210bfdff, 0x200afdff, 0x200afdff,
81 0x1f09fdff, 0x1f08fdff, 0x1d08fd00, 0x1c07fd00,
82 0x1d06fd00, 0x1b06fd00, 0x1b05fd00, 0x1c04fd00,
83 0x1b04fd00, 0x1a03fd00, 0x1a03fd00, 0x1902fd00,
84 0x1802fd00, 0x1801fd00, 0x1701fd00, 0x1600fd00,
85 0x1400fe00, 0x1400fe00, 0x14fffe00, 0x13fffe00,
86
87 0x201200fe, 0x201100fe, 0x1f11fffe, 0x2010fffe,
88 0x1f0ffffe, 0x1e0ffffe, 0x1f0efeff, 0x1f0dfeff,
89 0x1f0dfeff, 0x1e0cfeff, 0x1e0bfeff, 0x1d0bfeff,
90 0x1d0afeff, 0x1d09fdff, 0x1d09fdff, 0x1c08fdff,
91 0x1c07fdff, 0x1b07fd00, 0x1b06fd00, 0x1a06fd00,
92 0x1a05fd00, 0x1805fd00, 0x1904fd00, 0x1804fd00,
93 0x1703fd00, 0x1703fd00, 0x1602fe00, 0x1502fe00,
94 0x1501fe00, 0x1401fe00, 0x1301fe00, 0x1300fe00,
95
96 0x1c1202fe, 0x1c1102fe, 0x1b1102fe, 0x1c1001fe,
97 0x1b1001fe, 0x1b0f01ff, 0x1b0e00ff, 0x1b0e00ff,
98 0x1b0d00ff, 0x1a0d00ff, 0x1a0c00ff, 0x1a0cffff,
99 0x1a0bffff, 0x1a0bffff, 0x1a0affff, 0x180affff,
100 0x1909ffff, 0x1809ffff, 0x1808ffff, 0x1808feff,
101 0x1807feff, 0x1707fe00, 0x1606fe00, 0x1506fe00,
102 0x1605fe00, 0x1505fe00, 0x1504fe00, 0x1304fe00,
103 0x1304fe00, 0x1303fe00, 0x1203fe00, 0x1203fe00,
104
105 0x181104ff, 0x191103ff, 0x191003ff, 0x181003ff,
106 0x180f03ff, 0x190f02ff, 0x190e02ff, 0x180e02ff,
107 0x180d02ff, 0x180d01ff, 0x180d01ff, 0x180c01ff,
108 0x180c01ff, 0x180b00ff, 0x170b00ff, 0x170a00ff,
109 0x170a00ff, 0x170900ff, 0x160900ff, 0x160900ff,
110 0x1608ffff, 0x1508ffff, 0x1507ff00, 0x1507ff00,
111 0x1407ff00, 0x1306ff00, 0x1306ff00, 0x1305ff00,
112 0x1205ff00, 0x1105ff00, 0x1204ff00, 0x1104ff00,
113
114 0x171005ff, 0x171005ff, 0x171004ff, 0x170f04ff,
115 0x160f04ff, 0x170f03ff, 0x170e03ff, 0x160e03ff,
116 0x160d03ff, 0x160d02ff, 0x160d02ff, 0x160c02ff,
117 0x160c02ff, 0x160c02ff, 0x160b01ff, 0x150b01ff,
118 0x150a01ff, 0x150a01ff, 0x150a01ff, 0x140901ff,
119 0x14090000, 0x14090000, 0x14080000, 0x13080000,
120 0x13070000, 0x12070000, 0x12070000, 0x12060000,
121 0x11060000, 0x11060000, 0x11050000, 0x1105ff00,
122
123 0x14100600, 0x15100500, 0x150f0500, 0x150f0500,
124 0x140f0500, 0x150e0400, 0x140e0400, 0x130e0400,
125 0x140d0400, 0x150d0300, 0x130d0300, 0x140c0300,
126 0x140c0300, 0x140c0200, 0x140b0200, 0x130b0200,
127 0x120b0200, 0x130a0200, 0x130a0200, 0x130a0100,
128 0x13090100, 0x12090100, 0x11090100, 0x12080100,
129 0x11080100, 0x10080100, 0x11070100, 0x11070000,
130 0x10070000, 0x11060000, 0x10060000, 0x10060000,
131
132 0x140f0600, 0x140f0600, 0x130f0600, 0x140f0500,
133 0x140e0500, 0x130e0500, 0x130e0500, 0x140d0400,
134 0x140d0400, 0x130d0400, 0x120d0400, 0x130c0400,
135 0x130c0300, 0x130c0300, 0x130b0300, 0x130b0300,
136 0x110b0300, 0x130a0200, 0x120a0200, 0x120a0200,
137 0x120a0200, 0x12090200, 0x10090200, 0x11090100,
138 0x11080100, 0x11080100, 0x10080100, 0x10080100,
139 0x10070100, 0x10070100, 0x0f070100, 0x10060100,
140
141 0x120f0701, 0x130f0601, 0x130e0601, 0x130e0601,
142 0x120e0601, 0x130e0501, 0x130e0500, 0x130d0500,
143 0x120d0500, 0x120d0500, 0x130c0400, 0x130c0400,
144 0x120c0400, 0x110c0400, 0x120b0400, 0x120b0300,
145 0x120b0300, 0x120b0300, 0x120a0300, 0x110a0300,
146 0x110a0200, 0x11090200, 0x11090200, 0x10090200,
147 0x10090200, 0x10080200, 0x10080200, 0x10080100,
148 0x0f080100, 0x10070100, 0x0f070100, 0x0f070100
149};
150
151static const u32 lan3coefftab32_right[480] = {
152 0x00000000, 0x00000002, 0x0000ff04, 0x0000ff06,
153 0x0000fe08, 0x0000fd0a, 0x0000fd0c, 0x0000fc0f,
154 0x0000fc12, 0x0001fb14, 0x0001fa17, 0x0001fa19,
155 0x0001f91c, 0x0001f91f, 0x0001f822, 0x0001f824,
156 0x0002f727, 0x0002f72a, 0x0002f72c, 0x0002f72f,
157 0x0002f731, 0x0002f733, 0x0002f735, 0x0002f737,
158 0x0002f73a, 0x0002f83b, 0x0002f93c, 0x0002fa3d,
159 0x0001fb3e, 0x0001fc3f, 0x0001fd40, 0x0000fe40,
160
161 0x0002fc06, 0x0002fb08, 0x0002fb0a, 0x0002fa0c,
162 0x0002fa0e, 0x0003f910, 0x0003f912, 0x0003f814,
163 0x0003f816, 0x0003f719, 0x0003f71a, 0x0003f71d,
164 0x0003f71f, 0x0003f721, 0x0003f723, 0x0003f725,
165 0x0002f727, 0x0002f729, 0x0002f72b, 0x0002f82d,
166 0x0002f82e, 0x0001f930, 0x0001fa31, 0x0000fa34,
167 0x0000fb34, 0x0100fc35, 0x01fffd36, 0x01ffff37,
168 0x01fe0037, 0x01fe0138, 0x01fd0338, 0x02fc0538,
169
170 0x0002fa0b, 0x0002fa0c, 0x0002f90e, 0x0002f910,
171 0x0002f911, 0x0002f813, 0x0002f816, 0x0002f817,
172 0x0002f818, 0x0002f81a, 0x0001f81c, 0x0001f81e,
173 0x0001f820, 0x0001f921, 0x0001f923, 0x0000f925,
174 0x0000fa26, 0x0100fa28, 0x01fffb29, 0x01fffc2a,
175 0x01fffc2c, 0x01fefd2d, 0x01fefe2e, 0x01fdff2f,
176 0x01fd0030, 0x01fd0130, 0x01fc0232, 0x02fc0432,
177 0x02fb0532, 0x02fb0633, 0x02fb0833, 0x02fa0933,
178
179 0x0001fa0e, 0x0001f90f, 0x0001f911, 0x0001f913,
180 0x0001f914, 0x0001f915, 0x0000f918, 0x0000fa18,
181 0x0000fa1a, 0x0000fa1b, 0x0000fa1d, 0x00fffb1e,
182 0x01fffb1f, 0x01fffb20, 0x01fffc22, 0x01fefc23,
183 0x01fefd24, 0x01fefe25, 0x01fdfe27, 0x01fdff28,
184 0x01fd0029, 0x01fc012a, 0x01fc022b, 0x01fc032b,
185 0x01fb042d, 0x01fb052d, 0x01fb062e, 0x01fb072e,
186 0x01fa092e, 0x01fa0a2f, 0x01fa0b2f, 0x01fa0d2f,
187
188 0x0000fa11, 0x0000fa12, 0x0000fa13, 0x0000fb14,
189 0x00fffb16, 0x00fffb16, 0x00fffb17, 0x00fffb19,
190 0x00fffc1a, 0x00fefc1c, 0x00fefd1c, 0x01fefd1d,
191 0x01fefe1e, 0x01fdfe20, 0x01fdff21, 0x01fdff22,
192 0x01fd0023, 0x01fc0124, 0x01fc0124, 0x01fc0225,
193 0x01fc0326, 0x01fc0427, 0x01fb0528, 0x01fb0629,
194 0x01fb0729, 0x01fb0829, 0x01fb092a, 0x01fb0a2a,
195 0x00fa0b2c, 0x00fa0c2b, 0x00fa0e2b, 0x00fa0f2c,
196
197 0x00fffc11, 0x00fffc12, 0x00fffc14, 0x00fffc15,
198 0x00fefd16, 0x00fefd17, 0x00fefd18, 0x00fefe19,
199 0x00fefe1a, 0x00fdfe1d, 0x00fdff1d, 0x00fdff1e,
200 0x00fd001d, 0x00fd011e, 0x00fd0120, 0x00fc0221,
201 0x00fc0321, 0x00fc0323, 0x00fc0423, 0x00fc0523,
202 0x00fc0624, 0x00fb0725, 0x00fb0726, 0x00fb0827,
203 0x00fb0926, 0x00fb0a26, 0x00fb0b27, 0x00fb0c27,
204 0x00fb0d27, 0xfffb0e28, 0xfffb0f29, 0xfffc1028,
205
206 0x00fefd13, 0x00fefd13, 0x00fefe14, 0x00fefe15,
207 0x00fefe17, 0x00feff17, 0x00feff17, 0x00fd0018,
208 0x00fd001a, 0x00fd001a, 0x00fd011b, 0x00fd021c,
209 0x00fd021c, 0x00fd031d, 0x00fc031f, 0x00fc041f,
210 0x00fc051f, 0x00fc0521, 0x00fc0621, 0x00fc0721,
211 0x00fc0821, 0x00fc0822, 0x00fc0922, 0x00fc0a23,
212 0xfffc0b24, 0xfffc0c24, 0xfffc0d24, 0xfffc0d25,
213 0xfffc0e25, 0xfffd0f25, 0xfffd1025, 0xfffd1125,
214
215 0x00feff12, 0x00feff14, 0x00feff14, 0x00fe0015,
216 0x00fe0015, 0x00fd0017, 0x00fd0118, 0x00fd0118,
217 0x00fd0218, 0x00fd0219, 0x00fd031a, 0x00fd031a,
218 0x00fd041b, 0x00fd041c, 0x00fd051c, 0x00fd061d,
219 0x00fd061d, 0x00fd071e, 0x00fd081e, 0xfffd081f,
220 0xfffd091f, 0xfffd0a20, 0xfffd0a20, 0xfffd0b21,
221 0xfffd0c21, 0xfffd0d21, 0xfffd0d22, 0xfffd0e23,
222 0xfffe0f22, 0xfefe1022, 0xfefe1122, 0xfefe1123,
223
224 0x00fe0012, 0x00fe0013, 0x00fe0114, 0x00fe0114,
225 0x00fe0116, 0x00fe0216, 0x00fe0216, 0x00fd0317,
226 0x00fd0317, 0x00fd0418, 0x00fd0419, 0x00fd0519,
227 0x00fd051a, 0x00fd061b, 0x00fd061b, 0x00fd071c,
228 0xfffd071e, 0xfffd081d, 0xfffd091d, 0xfffd091e,
229 0xfffe0a1d, 0xfffe0b1e, 0xfffe0b1e, 0xfffe0c1e,
230 0xfffe0d1f, 0xfffe0d1f, 0xfffe0e1f, 0xfeff0f1f,
231 0xfeff0f20, 0xfeff1020, 0xfeff1120, 0xfe001120,
232
233 0x00fe0212, 0x00fe0312, 0x00fe0313, 0x00fe0314,
234 0x00fe0414, 0x00fe0414, 0x00fe0416, 0x00fe0515,
235 0x00fe0516, 0x00fe0616, 0x00fe0617, 0x00fe0717,
236 0xfffe0719, 0xfffe0818, 0xffff0818, 0xffff0919,
237 0xffff0919, 0xffff0a19, 0xffff0a1a, 0xffff0b1a,
238 0xffff0b1b, 0xffff0c1a, 0xff000c1b, 0xff000d1b,
239 0xff000d1b, 0xff000e1b, 0xff000e1c, 0xff010f1c,
240 0xfe01101c, 0xfe01101d, 0xfe02111c, 0xfe02111c,
241
242 0x00ff0411, 0x00ff0411, 0x00ff0412, 0x00ff0512,
243 0x00ff0513, 0x00ff0513, 0x00ff0613, 0x00ff0614,
244 0x00ff0714, 0x00ff0715, 0x00ff0715, 0xffff0816,
245 0xffff0816, 0xff000916, 0xff000917, 0xff000918,
246 0xff000a17, 0xff000a18, 0xff000b18, 0xff000b18,
247 0xff010c18, 0xff010c19, 0xff010d18, 0xff010d18,
248 0xff020d18, 0xff020e19, 0xff020e19, 0xff020f19,
249 0xff030f19, 0xff031019, 0xff031019, 0xff031119,
250
251 0x00ff0511, 0x00ff0511, 0x00000511, 0x00000611,
252 0x00000612, 0x00000612, 0x00000712, 0x00000713,
253 0x00000714, 0x00000814, 0x00000814, 0x00000914,
254 0x00000914, 0xff010914, 0xff010a15, 0xff010a16,
255 0xff010a17, 0xff010b16, 0xff010b16, 0xff020c16,
256 0xff020c16, 0xff020c16, 0xff020d16, 0xff020d17,
257 0xff030d17, 0xff030e17, 0xff030e17, 0xff030f17,
258 0xff040f17, 0xff040f17, 0xff041017, 0xff051017,
259
260 0x00000610, 0x00000610, 0x00000611, 0x00000611,
261 0x00000711, 0x00000712, 0x00010712, 0x00010812,
262 0x00010812, 0x00010812, 0x00010913, 0x00010913,
263 0x00010913, 0x00010a13, 0x00020a13, 0x00020a14,
264 0x00020b14, 0x00020b14, 0x00020b14, 0x00020c14,
265 0x00030c14, 0x00030c15, 0x00030d15, 0x00030d15,
266 0x00040d15, 0x00040e15, 0x00040e15, 0x00040e16,
267 0x00050f15, 0x00050f15, 0x00050f16, 0x00051015,
268
269 0x00000611, 0x00010610, 0x00010710, 0x00010710,
270 0x00010711, 0x00010811, 0x00010811, 0x00010812,
271 0x00010812, 0x00010912, 0x00020912, 0x00020912,
272 0x00020a12, 0x00020a12, 0x00020a13, 0x00020a13,
273 0x00030b13, 0x00030b13, 0x00030b14, 0x00030c13,
274 0x00030c13, 0x00040c13, 0x00040d14, 0x00040d14,
275 0x00040d15, 0x00040d15, 0x00050e14, 0x00050e14,
276 0x00050e15, 0x00050f14, 0x00060f14, 0x00060f14,
277
278 0x0001070f, 0x0001070f, 0x00010710, 0x00010710,
279 0x00010810, 0x00010810, 0x00020810, 0x00020811,
280 0x00020911, 0x00020911, 0x00020912, 0x00020912,
281 0x00020a12, 0x00030a12, 0x00030a12, 0x00030b12,
282 0x00030b12, 0x00030b12, 0x00040b12, 0x00040c12,
283 0x00040c13, 0x00040c14, 0x00040c14, 0x00050d13,
284 0x00050d13, 0x00050d14, 0x00050e13, 0x01050e13,
285 0x01060e13, 0x01060e13, 0x01060e14, 0x01060f13
286};
287
288static const u32 lan2coefftab32[480] = {
289 0x00004000, 0x000140ff, 0x00033ffe, 0x00043ffd,
290 0x00063efc, 0xff083dfc, 0x000a3bfb, 0xff0d39fb,
291 0xff0f37fb, 0xff1136fa, 0xfe1433fb, 0xfe1631fb,
292 0xfd192ffb, 0xfd1c2cfb, 0xfd1f29fb, 0xfc2127fc,
293 0xfc2424fc, 0xfc2721fc, 0xfb291ffd, 0xfb2c1cfd,
294 0xfb2f19fd, 0xfb3116fe, 0xfb3314fe, 0xfa3611ff,
295 0xfb370fff, 0xfb390dff, 0xfb3b0a00, 0xfc3d08ff,
296 0xfc3e0600, 0xfd3f0400, 0xfe3f0300, 0xff400100,
297
298 0xff053804, 0xff063803, 0xff083801, 0xff093701,
299 0xff0a3700, 0xff0c3500, 0xff0e34ff, 0xff1033fe,
300 0xff1232fd, 0xfe1431fd, 0xfe162ffd, 0xfe182dfd,
301 0xfd1b2cfc, 0xfd1d2afc, 0xfd1f28fc, 0xfd2126fc,
302 0xfd2323fd, 0xfc2621fd, 0xfc281ffd, 0xfc2a1dfd,
303 0xfc2c1bfd, 0xfd2d18fe, 0xfd2f16fe, 0xfd3114fe,
304 0xfd3212ff, 0xfe3310ff, 0xff340eff, 0x00350cff,
305 0x00360a00, 0x01360900, 0x02370700, 0x03370600,
306
307 0xff083207, 0xff093206, 0xff0a3205, 0xff0c3203,
308 0xff0d3103, 0xff0e3102, 0xfe113001, 0xfe132f00,
309 0xfe142e00, 0xfe162dff, 0xfe182bff, 0xfe192aff,
310 0xfe1b29fe, 0xfe1d27fe, 0xfe1f25fe, 0xfd2124fe,
311 0xfe2222fe, 0xfe2421fd, 0xfe251ffe, 0xfe271dfe,
312 0xfe291bfe, 0xff2a19fe, 0xff2b18fe, 0xff2d16fe,
313 0x002e14fe, 0x002f12ff, 0x013010ff, 0x02300fff,
314 0x03310dff, 0x04310cff, 0x05310a00, 0x06310900,
315
316 0xff0a2e09, 0xff0b2e08, 0xff0c2e07, 0xff0e2d06,
317 0xff0f2d05, 0xff102d04, 0xff122c03, 0xfe142c02,
318 0xfe152b02, 0xfe172a01, 0xfe182901, 0xfe1a2800,
319 0xfe1b2700, 0xfe1d2500, 0xff1e24ff, 0xfe2023ff,
320 0xff2121ff, 0xff2320fe, 0xff241eff, 0x00251dfe,
321 0x00261bff, 0x00281afe, 0x012818ff, 0x012a16ff,
322 0x022a15ff, 0x032b13ff, 0x032c12ff, 0x052c10ff,
323 0x052d0fff, 0x062d0d00, 0x072d0c00, 0x082d0b00,
324
325 0xff0c2a0b, 0xff0d2a0a, 0xff0e2a09, 0xff0f2a08,
326 0xff102a07, 0xff112a06, 0xff132905, 0xff142904,
327 0xff162803, 0xff172703, 0xff182702, 0xff1a2601,
328 0xff1b2501, 0xff1c2401, 0xff1e2300, 0xff1f2200,
329 0x00202000, 0x00211f00, 0x01221d00, 0x01231c00,
330 0x01251bff, 0x02251aff, 0x032618ff, 0x032717ff,
331 0x042815ff, 0x052814ff, 0x052913ff, 0x06291100,
332 0x072a10ff, 0x082a0e00, 0x092a0d00, 0x0a2a0c00,
333
334 0xff0d280c, 0xff0e280b, 0xff0f280a, 0xff102809,
335 0xff112808, 0xff122708, 0xff142706, 0xff152705,
336 0xff162605, 0xff172604, 0xff192503, 0xff1a2403,
337 0x001b2302, 0x001c2202, 0x001d2201, 0x001e2101,
338 0x011f1f01, 0x01211e00, 0x01221d00, 0x02221c00,
339 0x02231b00, 0x03241900, 0x04241800, 0x04251700,
340 0x052616ff, 0x06261400, 0x072713ff, 0x08271100,
341 0x08271100, 0x09271000, 0x0a280e00, 0x0b280d00,
342
343 0xff0e260d, 0xff0f260c, 0xff10260b, 0xff11260a,
344 0xff122609, 0xff132608, 0xff142508, 0xff152507,
345 0x00152506, 0x00172405, 0x00182305, 0x00192304,
346 0x001b2203, 0x001c2103, 0x011d2002, 0x011d2002,
347 0x011f1f01, 0x021f1e01, 0x02201d01, 0x03211c00,
348 0x03221b00, 0x04221a00, 0x04231801, 0x05241700,
349 0x06241600, 0x07241500, 0x08251300, 0x09251200,
350 0x09261100, 0x0a261000, 0x0b260f00, 0x0c260e00,
351
352 0xff0e250e, 0xff0f250d, 0xff10250c, 0xff11250b,
353 0x0011250a, 0x00132409, 0x00142408, 0x00152407,
354 0x00162307, 0x00172306, 0x00182206, 0x00192205,
355 0x011a2104, 0x011b2004, 0x011c2003, 0x021c1f03,
356 0x021e1e02, 0x031e1d02, 0x03201c01, 0x04201b01,
357 0x04211a01, 0x05221900, 0x05221801, 0x06231700,
358 0x07231600, 0x07241500, 0x08241400, 0x09241300,
359 0x0a241200, 0x0b241100, 0x0c241000, 0x0d240f00,
360
361 0x000e240e, 0x000f240d, 0x0010240c, 0x0011240b,
362 0x0013230a, 0x0013230a, 0x00142309, 0x00152308,
363 0x00162208, 0x00172207, 0x01182106, 0x01192105,
364 0x011a2005, 0x021b1f04, 0x021b1f04, 0x021d1e03,
365 0x031d1d03, 0x031e1d02, 0x041e1c02, 0x041f1b02,
366 0x05201a01, 0x05211901, 0x06211801, 0x07221700,
367 0x07221601, 0x08231500, 0x09231400, 0x0a231300,
368 0x0a231300, 0x0b231200, 0x0c231100, 0x0d231000,
369
370 0x000f220f, 0x0010220e, 0x0011220d, 0x0012220c,
371 0x0013220b, 0x0013220b, 0x0015210a, 0x0015210a,
372 0x01162108, 0x01172008, 0x01182007, 0x02191f06,
373 0x02191f06, 0x021a1e06, 0x031a1e05, 0x031c1d04,
374 0x041c1c04, 0x041d1c03, 0x051d1b03, 0x051e1a03,
375 0x061f1902, 0x061f1902, 0x07201801, 0x08201701,
376 0x08211601, 0x09211501, 0x0a211500, 0x0b211400,
377 0x0b221300, 0x0c221200, 0x0d221100, 0x0e221000,
378
379 0x0010210f, 0x0011210e, 0x0011210e, 0x0012210d,
380 0x0013210c, 0x0014200c, 0x0114200b, 0x0115200a,
381 0x01161f0a, 0x01171f09, 0x02171f08, 0x02181e08,
382 0x03181e07, 0x031a1d06, 0x031a1d06, 0x041b1c05,
383 0x041c1c04, 0x051c1b04, 0x051d1a04, 0x061d1a03,
384 0x071d1903, 0x071e1803, 0x081e1802, 0x081f1702,
385 0x091f1602, 0x0a201501, 0x0b1f1501, 0x0b201401,
386 0x0c211300, 0x0d211200, 0x0e201200, 0x0e211100,
387
388 0x00102010, 0x0011200f, 0x0012200e, 0x0013200d,
389 0x0013200d, 0x01141f0c, 0x01151f0b, 0x01151f0b,
390 0x01161f0a, 0x02171e09, 0x02171e09, 0x03181d08,
391 0x03191d07, 0x03191d07, 0x041a1c06, 0x041b1c05,
392 0x051b1b05, 0x051c1b04, 0x061c1a04, 0x071d1903,
393 0x071d1903, 0x081d1803, 0x081e1703, 0x091e1702,
394 0x0a1f1601, 0x0a1f1502, 0x0b1f1501, 0x0c1f1401,
395 0x0d201300, 0x0d201300, 0x0e201200, 0x0f201100,
396
397 0x00102010, 0x0011200f, 0x00121f0f, 0x00131f0e,
398 0x00141f0d, 0x01141f0c, 0x01141f0c, 0x01151e0c,
399 0x02161e0a, 0x02171e09, 0x03171d09, 0x03181d08,
400 0x03181d08, 0x04191c07, 0x041a1c06, 0x051a1b06,
401 0x051b1b05, 0x061b1a05, 0x061c1a04, 0x071c1904,
402 0x081c1903, 0x081d1803, 0x091d1703, 0x091e1702,
403 0x0a1e1602, 0x0b1e1502, 0x0c1e1501, 0x0c1f1401,
404 0x0d1f1400, 0x0e1f1300, 0x0e1f1201, 0x0f1f1200,
405
406 0x00111e11, 0x00121e10, 0x00131e0f, 0x00131e0f,
407 0x01131e0e, 0x01141d0e, 0x02151d0c, 0x02151d0c,
408 0x02161d0b, 0x03161c0b, 0x03171c0a, 0x04171c09,
409 0x04181b09, 0x05181b08, 0x05191b07, 0x06191a07,
410 0x061a1a06, 0x071a1906, 0x071b1905, 0x081b1805,
411 0x091b1804, 0x091c1704, 0x0a1c1703, 0x0a1c1604,
412 0x0b1d1602, 0x0c1d1502, 0x0c1d1502, 0x0d1d1402,
413 0x0e1d1401, 0x0e1e1301, 0x0f1e1300, 0x101e1200,
414
415 0x00111e11, 0x00121e10, 0x00131d10, 0x01131d0f,
416 0x01141d0e, 0x01141d0e, 0x02151c0d, 0x02151c0d,
417 0x03161c0b, 0x03161c0b, 0x04171b0a, 0x04171b0a,
418 0x05171b09, 0x05181a09, 0x06181a08, 0x06191a07,
419 0x07191907, 0x071a1906, 0x081a1806, 0x081a1806,
420 0x091a1805, 0x0a1b1704, 0x0a1b1704, 0x0b1c1603,
421 0x0b1c1603, 0x0c1c1503, 0x0d1c1502, 0x0d1d1402,
422 0x0e1d1401, 0x0f1d1301, 0x0f1d1301, 0x101e1200,
423};
424
425static const u32 bicubic8coefftab32_left[480] = {
426 0x40000000, 0x40ff0000, 0x3ffe0000, 0x3efe0000,
427 0x3dfd0000, 0x3cfc0000, 0x3bfc0000, 0x39fc0000,
428 0x36fc0000, 0x35fb0000, 0x33fb0000, 0x31fb0000,
429 0x2ffb0000, 0x2cfb0000, 0x29fc0000, 0x27fc0000,
430 0x24fc0000, 0x21fc0000, 0x1efd0000, 0x1cfd0000,
431 0x19fd0000, 0x16fe0000, 0x14fe0000, 0x11fe0000,
432 0x0dff0000, 0x0cff0000, 0x0aff0000, 0x08ff0000,
433 0x05000000, 0x03000000, 0x02000000, 0x01000000,
434
435 0x3904ff00, 0x3903ff00, 0x3902ff00, 0x38010000,
436 0x37000000, 0x36ff0000, 0x35ff0000, 0x34fe0000,
437 0x32fe0000, 0x31fd0000, 0x30fd0000, 0x2efc0000,
438 0x2cfc0000, 0x2afc0000, 0x28fc0000, 0x26fc0000,
439 0x24fc0000, 0x22fc0000, 0x20fc0000, 0x1efc0000,
440 0x1cfc0000, 0x19fc0000, 0x17fc0000, 0x15fd0000,
441 0x12fd0000, 0x11fd0000, 0x0ffd0000, 0x0dfe0000,
442 0x0bfe0000, 0x09fe0000, 0x08fe0000, 0x06ff0000,
443
444 0x3209fe00, 0x3407fe00, 0x3306fe00, 0x3305fe00,
445 0x3204fe00, 0x3102ff00, 0x3102ff00, 0x3001ff00,
446 0x2f00ff00, 0x2effff00, 0x2cff0000, 0x2bfe0000,
447 0x29fe0000, 0x28fe0000, 0x26fd0000, 0x24fd0000,
448 0x23fd0000, 0x21fd0000, 0x20fc0000, 0x1efc0000,
449 0x1dfc0000, 0x1bfc0000, 0x19fc0000, 0x17fc0000,
450 0x16fc0000, 0x14fc0000, 0x12fc0000, 0x10fd0000,
451 0x0ffd0000, 0x0dfd0000, 0x0cfd0000, 0x0afd0000,
452
453 0x2e0cfd00, 0x2e0bfd00, 0x2e09fd00, 0x2e08fd00,
454 0x2e07fd00, 0x2c06fe00, 0x2c05fe00, 0x2b04fe00,
455 0x2b03fe00, 0x2a02fe00, 0x2901fe00, 0x2701ff00,
456 0x2700ff00, 0x26ffff00, 0x24ffff00, 0x23ffff00,
457 0x22feff00, 0x20fe0000, 0x1ffe0000, 0x1efd0000,
458 0x1dfd0000, 0x1bfd0000, 0x1afd0000, 0x19fd0000,
459 0x17fd0000, 0x15fd0000, 0x13fd0000, 0x12fd0000,
460 0x11fd0000, 0x10fd0000, 0x0ffd0000, 0x0cfd0000,
461
462 0x2a0efd00, 0x2a0dfd00, 0x2a0cfd00, 0x290bfd00,
463 0x290afd00, 0x2909fd00, 0x2908fd00, 0x2807fd00,
464 0x2706fd00, 0x2705fd00, 0x2604fe00, 0x2603fe00,
465 0x2502fe00, 0x2402fe00, 0x2401fe00, 0x2200fe00,
466 0x2200fe00, 0x2000ff00, 0x1fffff00, 0x1effff00,
467 0x1dfeff00, 0x1cfeff00, 0x1afeff00, 0x19feff00,
468 0x17fe0000, 0x16fd0000, 0x15fd0000, 0x14fd0000,
469 0x12fd0000, 0x11fd0000, 0x10fd0000, 0x0ffd0000,
470
471 0x2610fd00, 0x260ffd00, 0x260efd00, 0x260dfd00,
472 0x260cfd00, 0x260bfd00, 0x260afd00, 0x2609fd00,
473 0x2508fd00, 0x2507fd00, 0x2406fd00, 0x2406fd00,
474 0x2305fd00, 0x2304fd00, 0x2203fe00, 0x2103fe00,
475 0x2002fe00, 0x1f01fe00, 0x1e01fe00, 0x1e00fe00,
476 0x1c00fe00, 0x1b00fe00, 0x1afffe00, 0x19ffff00,
477 0x18ffff00, 0x17feff00, 0x16feff00, 0x15feff00,
478 0x14feff00, 0x13feff00, 0x11feff00, 0x10fd0000,
479
480 0x2411feff, 0x2410feff, 0x240ffeff, 0x230efeff,
481 0x240dfeff, 0x240cfeff, 0x230cfd00, 0x230bfd00,
482 0x230afd00, 0x2309fd00, 0x2208fd00, 0x2108fd00,
483 0x2007fd00, 0x2106fd00, 0x2005fd00, 0x1f05fd00,
484 0x1f04fd00, 0x1e03fd00, 0x1d03fe00, 0x1c02fe00,
485 0x1b02fe00, 0x1a01fe00, 0x1a01fe00, 0x1900fe00,
486 0x1800fe00, 0x1700fe00, 0x16fffe00, 0x15fffe00,
487 0x13ffff00, 0x12ffff00, 0x12feff00, 0x11feff00,
488
489 0x2212fffe, 0x2211fffe, 0x2210ffff, 0x220ffeff,
490 0x220efeff, 0x210efeff, 0x210dfeff, 0x210cfeff,
491 0x210bfeff, 0x200bfeff, 0x200afeff, 0x1f09feff,
492 0x1f08feff, 0x1d08fe00, 0x1e07fd00, 0x1e06fd00,
493 0x1d06fd00, 0x1c05fd00, 0x1b04fe00, 0x1a04fe00,
494 0x1a03fe00, 0x1903fe00, 0x1802fe00, 0x1802fe00,
495 0x1701fe00, 0x1601fe00, 0x1501fe00, 0x1500fe00,
496 0x1400fe00, 0x1400fe00, 0x13fffe00, 0x12fffe00,
497
498 0x201200fe, 0x201100fe, 0x1f1100fe, 0x2010fffe,
499 0x200ffffe, 0x1f0ffffe, 0x1f0efffe, 0x1e0dffff,
500 0x1f0cfeff, 0x1e0cfeff, 0x1e0bfeff, 0x1e0afeff,
501 0x1d0afeff, 0x1d09feff, 0x1c08feff, 0x1b08feff,
502 0x1b07feff, 0x1a07feff, 0x1a06feff, 0x1a05feff,
503 0x1805fe00, 0x1904fe00, 0x1704fe00, 0x1703fe00,
504 0x1603fe00, 0x1602fe00, 0x1402fe00, 0x1402fe00,
505 0x1401fe00, 0x1301fe00, 0x1201fe00, 0x1200fe00,
506
507 0x1c1202fe, 0x1c1102fe, 0x1b1102fe, 0x1c1001fe,
508 0x1b1001fe, 0x1c0f01fe, 0x1b0f00fe, 0x1b0e00fe,
509 0x1b0e00fe, 0x1b0d00fe, 0x1b0c00fe, 0x1a0cfffe,
510 0x1a0bfffe, 0x1a0bfffe, 0x190afffe, 0x190afffe,
511 0x1909fffe, 0x1709ffff, 0x1808ffff, 0x1708feff,
512 0x1707feff, 0x1707feff, 0x1606feff, 0x1506feff,
513 0x1505feff, 0x1505feff, 0x1404feff, 0x1404feff,
514 0x1404feff, 0x1303feff, 0x1203feff, 0x1202feff,
515
516 0x191104fe, 0x191104fe, 0x191003fe, 0x191003fe,
517 0x171003fe, 0x180f03fe, 0x180f02fe, 0x180e02fe,
518 0x180e02fe, 0x180d01fe, 0x180d01fe, 0x180d01fe,
519 0x170c01fe, 0x160c01fe, 0x170b00fe, 0x170b00fe,
520 0x160a00fe, 0x160a00fe, 0x160a00fe, 0x150900fe,
521 0x1509fffe, 0x1508fffe, 0x1508fffe, 0x1408fffe,
522 0x1407fffe, 0x1307ffff, 0x1306ffff, 0x1206ffff,
523 0x1206ffff, 0x1205ffff, 0x1205ffff, 0x1104feff,
524
525 0x161006ff, 0x161005ff, 0x161005ff, 0x160f05ff,
526 0x160f04ff, 0x150f04ff, 0x150e04ff, 0x150e04ff,
527 0x150e03ff, 0x150d03ff, 0x150d03ff, 0x150d02ff,
528 0x140c02ff, 0x150c02fe, 0x150c02fe, 0x150b02fe,
529 0x140b01fe, 0x140b01fe, 0x140a01fe, 0x140a01fe,
530 0x140a01fe, 0x130900fe, 0x130900fe, 0x130900fe,
531 0x130800fe, 0x120800fe, 0x120800fe, 0x120700fe,
532 0x120700fe, 0x1107fffe, 0x1106fffe, 0x1106fffe,
533
534 0x140f0700, 0x140f0600, 0x140f0600, 0x140f0600,
535 0x140e0600, 0x130e0500, 0x140e05ff, 0x130e05ff,
536 0x140d05ff, 0x130d04ff, 0x130d04ff, 0x120d04ff,
537 0x130c04ff, 0x130c03ff, 0x130c03ff, 0x120c03ff,
538 0x120b03ff, 0x120b02ff, 0x120b02ff, 0x120a02ff,
539 0x120a02ff, 0x110a02ff, 0x110a01ff, 0x120901ff,
540 0x100901ff, 0x100901ff, 0x110801ff, 0x110801ff,
541 0x100800ff, 0x100800ff, 0x100700ff, 0x100700fe,
542
543 0x120f0701, 0x120e0701, 0x120e0701, 0x120e0701,
544 0x120e0600, 0x110e0600, 0x120d0600, 0x120d0600,
545 0x120d0500, 0x120d0500, 0x110d0500, 0x110c0500,
546 0x110c0500, 0x110c0400, 0x110c0400, 0x110b04ff,
547 0x110b04ff, 0x110b04ff, 0x110b03ff, 0x110b03ff,
548 0x110a03ff, 0x110a03ff, 0x100a03ff, 0x110a02ff,
549 0x100902ff, 0x100902ff, 0x100902ff, 0x0f0902ff,
550 0x0e0902ff, 0x100801ff, 0x0f0801ff, 0x0f0801ff,
551
552 0x100e0802, 0x100e0802, 0x110e0702, 0x110d0701,
553 0x110d0701, 0x100d0701, 0x100d0701, 0x110d0601,
554 0x110d0601, 0x110c0601, 0x110c0601, 0x100c0600,
555 0x100c0500, 0x100c0500, 0x100c0500, 0x100b0500,
556 0x100b0500, 0x100b0400, 0x100b0400, 0x0f0b0400,
557 0x100a0400, 0x0f0a0400, 0x0f0a0400, 0x0f0a0300,
558 0x0f0a03ff, 0x0f0903ff, 0x0f0903ff, 0x0f0903ff,
559 0x0f0903ff, 0x0f0902ff, 0x0f0902ff, 0x0f0802ff
560};
561
562static const u32 bicubic8coefftab32_right[480] = {
563 0x00000000, 0x00000001, 0x00000003, 0x00000004,
564 0x00000006, 0x0000ff09, 0x0000ff0a, 0x0000ff0c,
565 0x0000ff0f, 0x0000fe12, 0x0000fe14, 0x0000fe16,
566 0x0000fd19, 0x0000fd1c, 0x0000fd1e, 0x0000fc21,
567 0x0000fc24, 0x0000fc27, 0x0000fc29, 0x0000fb2c,
568 0x0000fb2f, 0x0000fb31, 0x0000fb33, 0x0000fb36,
569 0x0000fc38, 0x0000fc39, 0x0000fc3b, 0x0000fc3d,
570 0x0000fd3e, 0x0000fe3f, 0x0000fe40, 0x0000ff40,
571
572 0x0000ff05, 0x0000ff06, 0x0000fe08, 0x0000fe09,
573 0x0000fe0b, 0x0000fe0d, 0x0000fd0f, 0x0000fd11,
574 0x0000fd13, 0x0000fd15, 0x0000fc17, 0x0000fc1a,
575 0x0000fc1c, 0x0000fc1e, 0x0000fc20, 0x0000fc22,
576 0x0000fc24, 0x0000fc26, 0x0000fc28, 0x0000fc2a,
577 0x0000fc2c, 0x0000fc2f, 0x0000fd30, 0x0000fd31,
578 0x0000fe33, 0x0000fe34, 0x0000ff35, 0x0000ff36,
579 0x00000037, 0x00000138, 0x00ff0239, 0x00ff0339,
580
581 0x0000fe09, 0x0000fd0a, 0x0000fd0c, 0x0000fd0d,
582 0x0000fd0f, 0x0000fd11, 0x0000fc12, 0x0000fc14,
583 0x0000fc16, 0x0000fc18, 0x0000fc19, 0x0000fc1b,
584 0x0000fc1d, 0x0000fc1e, 0x0000fc21, 0x0000fd22,
585 0x0000fd23, 0x0000fd25, 0x0000fd27, 0x0000fe28,
586 0x0000fe29, 0x0000fe2b, 0x0000ff2c, 0x00ffff2f,
587 0x00ff002f, 0x00ff0130, 0x00ff0231, 0x00ff0232,
588 0x00fe0432, 0x00fe0533, 0x00fe0633, 0x00fe0734,
589
590 0x0000fd0c, 0x0000fd0d, 0x0000fd0f, 0x0000fd10,
591 0x0000fd11, 0x0000fd13, 0x0000fd14, 0x0000fd16,
592 0x0000fd17, 0x0000fd19, 0x0000fd1b, 0x0000fd1c,
593 0x0000fd1d, 0x0000fd1f, 0x0000fe20, 0x0000fe21,
594 0x00fffe24, 0x00ffff24, 0x00ffff25, 0x00ffff27,
595 0x00ff0027, 0x00ff0128, 0x00fe012a, 0x00fe022a,
596 0x00fe032b, 0x00fe042c, 0x00fe052d, 0x00fe062d,
597 0x00fd072e, 0x00fd082e, 0x00fd092e, 0x00fd0b2f,
598
599 0x0000fd0e, 0x0000fd0f, 0x0000fd10, 0x0000fd12,
600 0x0000fd13, 0x0000fd14, 0x0000fd15, 0x0000fd17,
601 0x0000fe18, 0x00fffe1a, 0x00fffe1b, 0x00fffe1c,
602 0x00fffe1e, 0x00ffff1e, 0x00ffff1f, 0x00ff0021,
603 0x00fe0022, 0x00fe0023, 0x00fe0124, 0x00fe0224,
604 0x00fe0226, 0x00fe0326, 0x00fe0427, 0x00fd0528,
605 0x00fd0628, 0x00fd0729, 0x00fd0829, 0x00fd0929,
606 0x00fd0a2a, 0x00fd0b2a, 0x00fd0c2a, 0x00fd0d2a,
607
608 0x0000fd10, 0x0000fd11, 0x00fffe12, 0x00fffe13,
609 0x00fffe14, 0x00fffe15, 0x00fffe16, 0x00fffe17,
610 0x00ffff18, 0x00ffff19, 0x00feff1c, 0x00fe001b,
611 0x00fe001d, 0x00fe001e, 0x00fe011e, 0x00fe011f,
612 0x00fe0220, 0x00fe0321, 0x00fe0322, 0x00fd0423,
613 0x00fd0524, 0x00fd0624, 0x00fd0626, 0x00fd0725,
614 0x00fd0825, 0x00fd0926, 0x00fd0a26, 0x00fd0b26,
615 0x00fd0c26, 0x00fd0d26, 0x00fd0e27, 0x00fd0f27,
616
617 0x00fffe11, 0x00fffe12, 0x00fffe13, 0x00ffff14,
618 0x00ffff14, 0x00feff16, 0x00feff17, 0x00fe0017,
619 0x00fe0018, 0x00fe0019, 0x00fe011a, 0x00fe011b,
620 0x00fe021c, 0x00fe021c, 0x00fe031d, 0x00fd031f,
621 0x00fd041f, 0x00fd0520, 0x00fd0520, 0x00fd0621,
622 0x00fd0721, 0x00fd0822, 0x00fd0822, 0x00fd0923,
623 0x00fd0a23, 0x00fd0b23, 0x00fd0b25, 0x00fe0c24,
624 0x00fe0d24, 0x00fe0e24, 0x00fe0f24, 0x00fe1024,
625
626 0x00feff12, 0x00feff13, 0x00feff13, 0x00fe0014,
627 0x00fe0015, 0x00fe0016, 0x00fe0116, 0x00fe0117,
628 0x00fe0118, 0x00fe0218, 0x00fe0219, 0x00fe031a,
629 0x00fe031b, 0x00fe041b, 0x00fd041d, 0x00fd051d,
630 0x00fd061d, 0x00fd061f, 0x00fe071e, 0x00fe081e,
631 0x00fe081f, 0x00fe091f, 0x00fe0a20, 0x00fe0a20,
632 0x00fe0b21, 0x00fe0c21, 0x00fe0d21, 0x00fe0d22,
633 0x00fe0e22, 0x00fe0f21, 0x00ff1021, 0x00ff1022,
634
635 0x00fe0012, 0x00fe0013, 0x00fe0113, 0x00fe0114,
636 0x00fe0115, 0x00fe0215, 0x00fe0216, 0x00fe0217,
637 0x00fe0317, 0x00fe0318, 0x00fe0418, 0x00fe0419,
638 0x00fe0519, 0x00fe051a, 0x00fe061b, 0x00fe071b,
639 0x00fe071c, 0x00fe081c, 0x00fe081d, 0x00fe091d,
640 0x00fe0a1d, 0x00fe0a1d, 0x00fe0b1e, 0x00fe0c1e,
641 0x00ff0c1e, 0x00ff0d1e, 0x00ff0e1f, 0x00ff0e1f,
642 0x00ff0f1f, 0x00ff0f20, 0x0000101f, 0x0000111f,
643
644 0x00fe0212, 0x00fe0312, 0x00fe0313, 0x00fe0314,
645 0x00fe0414, 0x00fe0414, 0x00fe0515, 0x00fe0516,
646 0x00fe0516, 0x00fe0616, 0x00fe0617, 0x00fe0718,
647 0x00fe0719, 0x00fe0818, 0x00ff0819, 0x00ff0918,
648 0x00ff0919, 0x00ff0a19, 0x00ff0a19, 0x00ff0b1a,
649 0x00ff0b1b, 0x00ff0c1a, 0x00000c1b, 0x00000d1b,
650 0x00000d1c, 0x00000e1b, 0x00000e1d, 0x00010f1b,
651 0x00010f1b, 0x0001101c, 0x0001101d, 0x0002111c,
652
653 0x00fe0412, 0x00fe0412, 0x00ff0512, 0x00ff0512,
654 0x00ff0613, 0x00ff0613, 0x00ff0614, 0x00ff0714,
655 0x00ff0714, 0x00ff0815, 0x00ff0815, 0x00ff0815,
656 0x00ff0916, 0x00000916, 0x00000a16, 0x00000a16,
657 0x00000a18, 0x00000b17, 0x00000b17, 0x00010c17,
658 0x00010c18, 0x00010d18, 0x00010d18, 0x00010d19,
659 0x00020e18, 0x00020e18, 0x00020f18, 0x00030f18,
660 0x00030f18, 0x00031018, 0x00031018, 0x00041119,
661
662 0x00ff0610, 0x00ff0611, 0x00ff0611, 0x00ff0711,
663 0x00000711, 0x00000712, 0x00000812, 0x00000812,
664 0x00000813, 0x00000913, 0x00000913, 0x00000914,
665 0x00010a14, 0x00010a14, 0x00010a14, 0x00010b14,
666 0x00010b16, 0x00020b15, 0x00020c15, 0x00020c15,
667 0x00020c15, 0x00020d17, 0x00030d16, 0x00030d16,
668 0x00030e16, 0x00040e16, 0x00040e16, 0x00040f16,
669 0x00040f16, 0x00050f17, 0x00051017, 0x00051017,
670
671 0x0000070f, 0x00000710, 0x00000710, 0x00000710,
672 0x00000810, 0x00010811, 0x00010811, 0x00010911,
673 0x00010911, 0x00010913, 0x00010913, 0x00020a12,
674 0x00020a12, 0x00020a13, 0x00020b12, 0x00020b13,
675 0x00030b13, 0x00030c13, 0x00030c13, 0x00030c14,
676 0x00040c13, 0x00040d13, 0x00040d14, 0x00040d14,
677 0x00050e14, 0x00050e14, 0x00050e14, 0x00050e14,
678 0x00060f14, 0x00060f14, 0x00060f15, 0x00061015,
679
680 0x0001070f, 0x0001080f, 0x0001080f, 0x0001080f,
681 0x00010811, 0x00020910, 0x00020910, 0x00020910,
682 0x00020911, 0x00020a10, 0x00030a10, 0x00030a11,
683 0x00030a11, 0x00030b11, 0x00030b11, 0x00040b12,
684 0x00040b12, 0x00040c11, 0x00040c12, 0x00040c12,
685 0x00050c12, 0x00050c12, 0x00050d12, 0x00050d12,
686 0x00060d13, 0x00060d13, 0x00060e12, 0x00060e13,
687 0x00070e13, 0x00070e13, 0x00070f13, 0x00070f13,
688
689 0x0002080e, 0x0002080e, 0x0002080e, 0x00020810,
690 0x0002090f, 0x0003090f, 0x0003090f, 0x0003090f,
691 0x0003090f, 0x00030a0f, 0x00030a0f, 0x00040a10,
692 0x00040a11, 0x00040b10, 0x00040b10, 0x00040b11,
693 0x00050b10, 0x00050b11, 0x00050c10, 0x00050c11,
694 0x00050c11, 0x00060c11, 0x00060c11, 0x00060d11,
695 0x00060d12, 0x00070d12, 0x00070d12, 0x00070e11,
696 0x00070e11, 0x00070e12, 0x00080e11, 0x00080e12
697};
698
699static const u32 bicubic4coefftab32[480] = {
700 0x00004000, 0x000140ff, 0x00033ffe, 0x00043ffd,
701 0x00063dfd, 0xff083dfc, 0xff0a3bfc, 0xff0c39fc,
702 0xff0e37fc, 0xfe1136fb, 0xfe1433fb, 0xfe1631fb,
703 0xfd192ffb, 0xfd1c2cfb, 0xfd1e29fc, 0xfc2127fc,
704 0xfc2424fc, 0xfc2721fc, 0xfc291efd, 0xfb2c1cfd,
705 0xfb2f19fd, 0xfb3116fe, 0xfb3314fe, 0xfb3611fe,
706 0xfc370eff, 0xfc390cff, 0xfc3b0aff, 0xfc3d08ff,
707 0xfd3d0600, 0xfd3f0400, 0xfe3f0300, 0xff400100,
708
709 0xfe053904, 0xfe063903, 0xfe083901, 0xfe0a3800,
710 0xfd0b3800, 0xfe0d36ff, 0xfd0f35ff, 0xfd1134fe,
711 0xfd1332fe, 0xfd1531fd, 0xfc1730fd, 0xfc1a2efc,
712 0xfc1c2cfc, 0xfc1e2afc, 0xfc2028fc, 0xfc2226fc,
713 0xfc2424fc, 0xfc2622fc, 0xfc2820fc, 0xfc2a1efc,
714 0xfc2c1cfc, 0xfc2e1afc, 0xfd3017fc, 0xfd3115fd,
715 0xfe3213fd, 0xfe3411fd, 0xff350ffd, 0xff360dfe,
716 0x00370bfe, 0x013809fe, 0x023808fe, 0x033806ff,
717
718 0xfd093208, 0xfd0a3207, 0xfd0c3205, 0xfd0d3204,
719 0xfc0f3203, 0xfc113102, 0xfc123002, 0xfc143000,
720 0xfc152f00, 0xfc172d00, 0xfc192cff, 0xfc1b2bfe,
721 0xfc1d29fe, 0xfc1e28fe, 0xfc2027fd, 0xfd2125fd,
722 0xfd2323fd, 0xfd2521fd, 0xfd2720fc, 0xfe281efc,
723 0xfe291dfc, 0xfe2b1bfc, 0xff2c19fc, 0x002d17fc,
724 0x002e16fc, 0x012f14fc, 0x022f12fd, 0x023110fd,
725 0x03310ffd, 0x05310dfd, 0x06320bfd, 0x07320afd,
726
727 0xfc0c2d0b, 0xfc0d2d0a, 0xfc0e2d09, 0xfc102d07,
728 0xfc112c07, 0xfc132c05, 0xfc142c04, 0xfc162b03,
729 0xfc172a03, 0xfc192a01, 0xfc1a2901, 0xfd1b2800,
730 0xfd1c2700, 0xfd1e2500, 0xfe1f24ff, 0xfe2023ff,
731 0xfe2222fe, 0xff2320fe, 0xff241ffe, 0x00251efd,
732 0x00271cfd, 0x01271bfd, 0x01281afd, 0x022918fd,
733 0x032a16fd, 0x032b15fd, 0x042b14fd, 0x052c12fd,
734 0x072c10fd, 0x082c0ffd, 0x092c0efd, 0x0a2c0dfd,
735
736 0xfd0d290d, 0xfd0e290c, 0xfd0f290b, 0xfd11280a,
737 0xfd122809, 0xfd132808, 0xfd142807, 0xfd162706,
738 0xfd172705, 0xfd192604, 0xfe1a2503, 0xfe1b2502,
739 0xfe1c2402, 0xfe1d2302, 0xff1e2201, 0xff1f2101,
740 0x00202000, 0x00211f00, 0x01221eff, 0x02221dff,
741 0x02241cfe, 0x03241bfe, 0x042519fe, 0x042618fe,
742 0x052617fe, 0x062716fd, 0x072714fe, 0x082713fe,
743 0x092812fd, 0x0a2811fd, 0x0b2810fd, 0x0c280ffd,
744
745 0xfd0f250f, 0xfd10250e, 0xfd11250d, 0xfd12250c,
746 0xfd13250b, 0xfe13250a, 0xfe152409, 0xfe162408,
747 0xfe172308, 0xff182306, 0xff192305, 0xff1a2205,
748 0x001b2104, 0x001c2103, 0x001d2003, 0x011e1f02,
749 0x011f1f01, 0x021f1e01, 0x03201d00, 0x03211c00,
750 0x04211b00, 0x05221aff, 0x062219ff, 0x062318ff,
751 0x082316ff, 0x082316ff, 0x092415fe, 0x0a2414fe,
752 0x0b2413fe, 0x0c2412fe, 0x0d2411fe, 0x0e2410fe,
753
754 0xfe10230f, 0xfe11230e, 0xfe12220e, 0xfe13220d,
755 0xfe14220c, 0xff14220b, 0xff15220a, 0xff16210a,
756 0x00162109, 0x00172108, 0x00182008, 0x01192006,
757 0x011a1f06, 0x021a1f05, 0x021b1e05, 0x031c1d04,
758 0x031d1d03, 0x041d1c03, 0x041e1b03, 0x051e1b02,
759 0x061f1a01, 0x06201901, 0x07201801, 0x08201800,
760 0x09201700, 0x0a211500, 0x0b2115ff, 0x0c2114ff,
761 0x0c2213ff, 0x0d2212ff, 0x0e2211ff, 0x0f2211fe,
762
763 0xff112010, 0xff12200f, 0xff12200f, 0xff13200e,
764 0x0013200d, 0x0014200c, 0x00151f0c, 0x00161f0b,
765 0x01161f0a, 0x01171e0a, 0x02171e09, 0x02181e08,
766 0x03191d07, 0x03191d07, 0x041a1c06, 0x041b1c05,
767 0x051b1b05, 0x051c1b04, 0x061c1a04, 0x071c1a03,
768 0x071d1903, 0x081e1802, 0x091d1802, 0x091e1702,
769 0x0a1f1601, 0x0b1f1600, 0x0b1f1501, 0x0c201400,
770 0x0d1f1400, 0x0e2013ff, 0x0f1f1200, 0x102011ff,
771
772 0x00111f10, 0x00121e10, 0x00131e0f, 0x00131e0f,
773 0x01131e0e, 0x01141e0d, 0x01151d0d, 0x02151d0c,
774 0x02161d0b, 0x03161d0a, 0x03171c0a, 0x04171c09,
775 0x04181c08, 0x05181b08, 0x05191b07, 0x06191a07,
776 0x061a1a06, 0x071a1906, 0x071b1905, 0x081b1805,
777 0x081c1804, 0x091c1704, 0x0a1c1703, 0x0a1d1603,
778 0x0b1d1602, 0x0c1d1502, 0x0c1d1502, 0x0d1e1401,
779 0x0e1d1401, 0x0e1e1301, 0x0f1e1300, 0x101e1200,
780
781 0x02111c11, 0x02121c10, 0x02131b10, 0x03131b0f,
782 0x03131b0f, 0x03141b0e, 0x04141b0d, 0x04151a0d,
783 0x05151a0c, 0x05151a0c, 0x05161a0b, 0x0616190b,
784 0x0616190b, 0x0716190a, 0x0717180a, 0x08171809,
785 0x08181808, 0x09181708, 0x09181708, 0x0a181707,
786 0x0a191607, 0x0b191606, 0x0b1a1605, 0x0c1a1505,
787 0x0c1a1505, 0x0d1a1504, 0x0d1b1404, 0x0e1b1403,
788 0x0f1b1303, 0x0f1b1303, 0x101b1302, 0x101c1202,
789
790 0x04111a11, 0x04121911, 0x04131910, 0x0513190f,
791 0x0513190f, 0x0513190f, 0x0613190e, 0x0614180e,
792 0x0714180d, 0x0714180d, 0x0715180c, 0x0814180c,
793 0x0815170c, 0x0816170b, 0x0916170a, 0x0916170a,
794 0x0a16160a, 0x0a171609, 0x0a171609, 0x0b171608,
795 0x0b171509, 0x0c171508, 0x0c181507, 0x0d171507,
796 0x0d181407, 0x0e181406, 0x0e181406, 0x0e191306,
797 0x0f191305, 0x0f191305, 0x10191304, 0x10191205,
798
799 0x05121811, 0x06121810, 0x06121810, 0x06131710,
800 0x0713170f, 0x0713170f, 0x0713170f, 0x0813170e,
801 0x0813170e, 0x0814170d, 0x0914160d, 0x0914160d,
802 0x0914160d, 0x0a14160c, 0x0a15160b, 0x0a15150c,
803 0x0b15150b, 0x0b15150b, 0x0b16150a, 0x0c15150a,
804 0x0c16140a, 0x0d161409, 0x0d161409, 0x0d171408,
805 0x0e161408, 0x0e171308, 0x0e171308, 0x0f171307,
806 0x0f171307, 0x10171306, 0x10181206, 0x10181206,
807
808 0x07111711, 0x07121710, 0x07121611, 0x08121610,
809 0x08121610, 0x0813160f, 0x0912160f, 0x0913160e,
810 0x0913160e, 0x0913160e, 0x0a14150d, 0x0a14150d,
811 0x0a14150d, 0x0b14150c, 0x0b14150c, 0x0b14150c,
812 0x0c14140c, 0x0c15140b, 0x0c15140b, 0x0c15140b,
813 0x0d15140a, 0x0d15140a, 0x0d15140a, 0x0e161309,
814 0x0e161309, 0x0e161309, 0x0f151309, 0x0f161308,
815 0x0f161209, 0x10161208, 0x10161208, 0x10171207,
816
817 0x0a111411, 0x0b111410, 0x0b111410, 0x0b111410,
818 0x0b111410, 0x0b12140f, 0x0b12140f, 0x0c12130f,
819 0x0c12130f, 0x0c12130f, 0x0c12130f, 0x0c12130f,
820 0x0d12130e, 0x0d12130e, 0x0d12130e, 0x0d13130d,
821 0x0d13130d, 0x0d13130d, 0x0e12130d, 0x0e13120d,
822 0x0e13120d, 0x0e13120d, 0x0e13120d, 0x0f13120c,
823 0x0f13120c, 0x0f13120c, 0x0f14120b, 0x0f14120b,
824 0x1013120b, 0x1013120b, 0x1013120b, 0x1014110b,
825
826 0x0c111310, 0x0c111310, 0x0c111310, 0x0d101310,
827 0x0d101310, 0x0d111210, 0x0d111210, 0x0d111210,
828 0x0d12120f, 0x0d12120f, 0x0d12120f, 0x0d12120f,
829 0x0e11120f, 0x0e12120e, 0x0e12120e, 0x0e12120e,
830 0x0e12120e, 0x0e12120e, 0x0e12120e, 0x0e12120e,
831 0x0f11120e, 0x0f12120d, 0x0f12120d, 0x0f12120d,
832 0x0f12120d, 0x0f12110e, 0x0f12110e, 0x0f12110e,
833 0x1012110d, 0x1012110d, 0x1013110c, 0x1013110c,
834};
835
836static u32 sun8i_vi_scaler_base(struct sun8i_mixer *mixer, int channel)
837{
838 if (mixer->cfg->is_de3)
839 return DE3_VI_SCALER_UNIT_BASE +
840 DE3_VI_SCALER_UNIT_SIZE * channel;
841 else
842 return DE2_VI_SCALER_UNIT_BASE +
843 DE2_VI_SCALER_UNIT_SIZE * channel;
844}
845
846static int sun8i_vi_scaler_coef_index(unsigned int step)
847{
848 unsigned int scale, int_part, float_part;
849
850 scale = step >> (SUN8I_VI_SCALER_SCALE_FRAC - 3);
851 int_part = scale >> 3;
852 float_part = scale & 0x7;
853
854 switch (int_part) {
855 case 0:
856 return 0;
857 case 1:
858 return float_part;
859 case 2:
860 return 8 + (float_part >> 1);
861 case 3:
862 return 12;
863 case 4:
864 return 13;
865 default:
866 return 14;
867 }
868}
869
870static void sun8i_vi_scaler_set_coeff(struct regmap *map, u32 base,
871 u32 hstep, u32 vstep,
872 const struct drm_format_info *format)
873{
874 const u32 *ch_left, *ch_right, *cy;
875 int offset, i;
876
877 if (format->hsub == 1 && format->vsub == 1) {
878 ch_left = lan3coefftab32_left;
879 ch_right = lan3coefftab32_right;
880 cy = lan2coefftab32;
881 } else {
882 ch_left = bicubic8coefftab32_left;
883 ch_right = bicubic8coefftab32_right;
884 cy = bicubic4coefftab32;
885 }
886
887 offset = sun8i_vi_scaler_coef_index(step: hstep) *
888 SUN8I_VI_SCALER_COEFF_COUNT;
889 for (i = 0; i < SUN8I_VI_SCALER_COEFF_COUNT; i++) {
890 regmap_write(map, SUN8I_SCALER_VSU_YHCOEFF0(base, i),
891 val: lan3coefftab32_left[offset + i]);
892 regmap_write(map, SUN8I_SCALER_VSU_YHCOEFF1(base, i),
893 val: lan3coefftab32_right[offset + i]);
894 regmap_write(map, SUN8I_SCALER_VSU_CHCOEFF0(base, i),
895 val: ch_left[offset + i]);
896 regmap_write(map, SUN8I_SCALER_VSU_CHCOEFF1(base, i),
897 val: ch_right[offset + i]);
898 }
899
900 offset = sun8i_vi_scaler_coef_index(step: hstep) *
901 SUN8I_VI_SCALER_COEFF_COUNT;
902 for (i = 0; i < SUN8I_VI_SCALER_COEFF_COUNT; i++) {
903 regmap_write(map, SUN8I_SCALER_VSU_YVCOEFF(base, i),
904 val: lan2coefftab32[offset + i]);
905 regmap_write(map, SUN8I_SCALER_VSU_CVCOEFF(base, i),
906 val: cy[offset + i]);
907 }
908}
909
910void sun8i_vi_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable)
911{
912 u32 val, base;
913
914 base = sun8i_vi_scaler_base(mixer, channel: layer);
915
916 if (enable)
917 val = SUN8I_SCALER_VSU_CTRL_EN |
918 SUN8I_SCALER_VSU_CTRL_COEFF_RDY;
919 else
920 val = 0;
921
922 regmap_write(map: mixer->engine.regs,
923 SUN8I_SCALER_VSU_CTRL(base), val);
924}
925
926void sun8i_vi_scaler_setup(struct sun8i_mixer *mixer, int layer,
927 u32 src_w, u32 src_h, u32 dst_w, u32 dst_h,
928 u32 hscale, u32 vscale, u32 hphase, u32 vphase,
929 const struct drm_format_info *format)
930{
931 u32 chphase, cvphase;
932 u32 insize, outsize;
933 u32 base;
934
935 base = sun8i_vi_scaler_base(mixer, channel: layer);
936
937 hphase <<= SUN8I_VI_SCALER_PHASE_FRAC - 16;
938 vphase <<= SUN8I_VI_SCALER_PHASE_FRAC - 16;
939 hscale <<= SUN8I_VI_SCALER_SCALE_FRAC - 16;
940 vscale <<= SUN8I_VI_SCALER_SCALE_FRAC - 16;
941
942 insize = SUN8I_VI_SCALER_SIZE(src_w, src_h);
943 outsize = SUN8I_VI_SCALER_SIZE(dst_w, dst_h);
944
945 /*
946 * This is chroma V/H phase calculation as it appears in
947 * BSP driver. There is no detailed explanation. YUV 420
948 * chroma is threated specialy for some reason.
949 */
950 if (format->hsub == 2 && format->vsub == 2) {
951 chphase = hphase >> 1;
952 cvphase = (vphase >> 1) -
953 (1UL << (SUN8I_VI_SCALER_SCALE_FRAC - 2));
954 } else {
955 chphase = hphase;
956 cvphase = vphase;
957 }
958
959 if (mixer->cfg->is_de3) {
960 u32 val;
961
962 if (format->hsub == 1 && format->vsub == 1)
963 val = SUN50I_SCALER_VSU_SCALE_MODE_UI;
964 else
965 val = SUN50I_SCALER_VSU_SCALE_MODE_NORMAL;
966
967 regmap_write(map: mixer->engine.regs,
968 SUN50I_SCALER_VSU_SCALE_MODE(base), val);
969 }
970
971 regmap_write(map: mixer->engine.regs,
972 SUN8I_SCALER_VSU_OUTSIZE(base), val: outsize);
973 regmap_write(map: mixer->engine.regs,
974 SUN8I_SCALER_VSU_YINSIZE(base), val: insize);
975 regmap_write(map: mixer->engine.regs,
976 SUN8I_SCALER_VSU_YHSTEP(base), val: hscale);
977 regmap_write(map: mixer->engine.regs,
978 SUN8I_SCALER_VSU_YVSTEP(base), val: vscale);
979 regmap_write(map: mixer->engine.regs,
980 SUN8I_SCALER_VSU_YHPHASE(base), val: hphase);
981 regmap_write(map: mixer->engine.regs,
982 SUN8I_SCALER_VSU_YVPHASE(base), val: vphase);
983 regmap_write(map: mixer->engine.regs,
984 SUN8I_SCALER_VSU_CINSIZE(base),
985 SUN8I_VI_SCALER_SIZE(src_w / format->hsub,
986 src_h / format->vsub));
987 regmap_write(map: mixer->engine.regs,
988 SUN8I_SCALER_VSU_CHSTEP(base),
989 val: hscale / format->hsub);
990 regmap_write(map: mixer->engine.regs,
991 SUN8I_SCALER_VSU_CVSTEP(base),
992 val: vscale / format->vsub);
993 regmap_write(map: mixer->engine.regs,
994 SUN8I_SCALER_VSU_CHPHASE(base), val: chphase);
995 regmap_write(map: mixer->engine.regs,
996 SUN8I_SCALER_VSU_CVPHASE(base), val: cvphase);
997 sun8i_vi_scaler_set_coeff(map: mixer->engine.regs, base,
998 hstep: hscale, vstep: vscale, format);
999}
1000

source code of linux/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c