xref: /linux/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c (revision 597473720f4dc69749542bfcfed4a927a43d935e)
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 
14 static 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 
151 static 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 
288 static 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 
425 static 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 
562 static 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 
699 static 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 
sun8i_vi_scaler_base(struct sun8i_mixer * mixer,int channel)836 static 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 
sun8i_vi_scaler_coef_index(unsigned int step)846 static 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 
sun8i_vi_scaler_set_coeff(struct regmap * map,u32 base,u32 hstep,u32 vstep,const struct drm_format_info * format)870 static 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(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 			     lan3coefftab32_left[offset + i]);
892 		regmap_write(map, SUN8I_SCALER_VSU_YHCOEFF1(base, i),
893 			     lan3coefftab32_right[offset + i]);
894 		regmap_write(map, SUN8I_SCALER_VSU_CHCOEFF0(base, i),
895 			     ch_left[offset + i]);
896 		regmap_write(map, SUN8I_SCALER_VSU_CHCOEFF1(base, i),
897 			     ch_right[offset + i]);
898 	}
899 
900 	offset = sun8i_vi_scaler_coef_index(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 			     lan2coefftab32[offset + i]);
905 		regmap_write(map, SUN8I_SCALER_VSU_CVCOEFF(base, i),
906 			     cy[offset + i]);
907 	}
908 }
909 
sun8i_vi_scaler_enable(struct sun8i_mixer * mixer,int layer,bool enable)910 void 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, 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(mixer->engine.regs,
923 		     SUN8I_SCALER_VSU_CTRL(base), val);
924 }
925 
sun8i_vi_scaler_setup(struct sun8i_mixer * mixer,int layer,u32 src_w,u32 src_h,u32 dst_w,u32 dst_h,u32 hscale,u32 vscale,u32 hphase,u32 vphase,const struct drm_format_info * format)926 void 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, 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(mixer->engine.regs,
968 			     SUN50I_SCALER_VSU_SCALE_MODE(base), val);
969 	}
970 
971 	regmap_write(mixer->engine.regs,
972 		     SUN8I_SCALER_VSU_OUTSIZE(base), outsize);
973 	regmap_write(mixer->engine.regs,
974 		     SUN8I_SCALER_VSU_YINSIZE(base), insize);
975 	regmap_write(mixer->engine.regs,
976 		     SUN8I_SCALER_VSU_YHSTEP(base), hscale);
977 	regmap_write(mixer->engine.regs,
978 		     SUN8I_SCALER_VSU_YVSTEP(base), vscale);
979 	regmap_write(mixer->engine.regs,
980 		     SUN8I_SCALER_VSU_YHPHASE(base), hphase);
981 	regmap_write(mixer->engine.regs,
982 		     SUN8I_SCALER_VSU_YVPHASE(base), vphase);
983 	regmap_write(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(mixer->engine.regs,
988 		     SUN8I_SCALER_VSU_CHSTEP(base),
989 		     hscale / format->hsub);
990 	regmap_write(mixer->engine.regs,
991 		     SUN8I_SCALER_VSU_CVSTEP(base),
992 		     vscale / format->vsub);
993 	regmap_write(mixer->engine.regs,
994 		     SUN8I_SCALER_VSU_CHPHASE(base), chphase);
995 	regmap_write(mixer->engine.regs,
996 		     SUN8I_SCALER_VSU_CVPHASE(base), cvphase);
997 	sun8i_vi_scaler_set_coeff(mixer->engine.regs, base,
998 				  hscale, vscale, format);
999 }
1000