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 /* #include "../include.h" */
12 #include "rtmx_eink.h"
13 #include "de_rtmx.h"
14 #include <linux/kernel.h>
15
16 static unsigned int de_base;
17 /* #define de_writel writel */
18 /* #define de_readl readl */
19
20 #define de_writel(addr, val) (*((volatile unsigned long *)(addr)) = (unsigned long)(val))
21 #define de_readl(addr) (*((volatile unsigned long *)(addr)))
22
23
24 #define RTMX0_BASE 0x00100000
25 #define CSC0_BASE 0x001aa050
26 #define RTMX1_BASE 0x00200000
27 #define CSC1_BASE 0x002a0000
28
29 int csc_tab_601_fullrgbtoyuv[12] = {0x107, 0x204, 0x64, 0x4000,
30 0xFFFFFF68, 0xFFFFFED6, 0x1C2, 0x20000,
31 0x1C2, 0xFFFFFE87, 0xFFFFFFB7, 0x20000};
32 int csc_tab_601_yuvtofullrgb[12] = {0x4A8, 0x0, 0x662, 0xFFFC865A,
33 0x4A8, 0xFFFFFE70, 0xFFFFFCBF, 0x00021FF4,
34 0x4A8, 0x812, 0x0, 0xFFFBAE4A};
35
rtmx_set_base(unsigned int reg_base)36 int rtmx_set_base(unsigned int reg_base)
37 {
38 de_base = reg_base;
39 pr_info("%s: set de base = 0x%x\n", __func__, reg_base);
40 return 0;
41 }
42
43
44 /* csc_mode:0:yuv2rgb,1:rgb2yuv */
csc_set(int csc_mode,int sel,int csc_en)45 void csc_set(int csc_mode, int sel, int csc_en)
46 {
47 int i;
48 unsigned int csc_base;
49
50 csc_base = sel ? (de_base + CSC1_BASE) : (de_base + CSC0_BASE);
51 for (i = 0; i < 12; i++) {
52 de_writel(csc_base + 0x10 + (i << 2),
53 csc_mode ? csc_tab_601_fullrgbtoyuv[i] :
54 csc_tab_601_yuvtofullrgb[i]);
55 }
56 de_writel(csc_base + 0x0, csc_en);
57 }
58
59 #if 0
60 /* sel:0:rt-mixer0,1:rt-mixer1 */
61 /* addr0:y/argb addr;addr1:u addr;addr2:u addr; */
62 /* csc_en:0:disable csc,1:enable csc */
63 /* fmt: input fmt */
64 /* DE_FORMAT_ARGB_8888 = 0x00,//MSB A-R-G-B LSB */
65 /* DE_FORMAT_ABGR_8888 = 0x01, */
66 /* DE_FORMAT_RGBA_8888 = 0x02, */
67 /* DE_FORMAT_BGRA_8888 = 0x03, */
68 /* DE_FORMAT_XRGB_8888 = 0x04, */
69 /* DE_FORMAT_XBGR_8888 = 0x05, */
70 /* DE_FORMAT_RGBX_8888 = 0x06, */
71 /* DE_FORMAT_BGRX_8888 = 0x07, */
72 /* DE_FORMAT_RGB_888 = 0x08, */
73 /* DE_FORMAT_BGR_888 = 0x09, */
74 /* DE_FORMAT_RGB_565 = 0x0a, */
75 /* DE_FORMAT_BGR_565 = 0x0b, */
76 /* DE_FORMAT_ARGB_4444 = 0x0c, */
77 /* DE_FORMAT_ABGR_4444 = 0x0d, */
78 /* DE_FORMAT_RGBA_4444 = 0x0e, */
79 /* DE_FORMAT_BGRA_4444 = 0x0f, */
80 /* DE_FORMAT_ARGB_1555 = 0x10, */
81 /* DE_FORMAT_ABGR_1555 = 0x11, */
82 /* DE_FORMAT_RGBA_5551 = 0x12, */
83 /* DE_FORMAT_BGRA_5551 = 0x13, */
84 /* */
85 /* SP: semi-planar, P:planar, I:interleaved */
86 /* UVUV: U in the LSBs; VUVU: V in the LSBs */
87 /* DE_FORMAT_YUV444_I_AYUV = 0x40,//MSB A-Y-U-V LSB, reserved */
88 /* DE_FORMAT_YUV444_I_VUYA = 0x41,//MSB V-U-Y-A LSB */
89 /* DE_FORMAT_YUV422_I_YVYU = 0x42,//MSB Y-V-Y-U LSB */
90 /* DE_FORMAT_YUV422_I_YUYV = 0x43,//MSB Y-U-Y-V LSB */
91 /* DE_FORMAT_YUV422_I_UYVY = 0x44,//MSB U-Y-V-Y LSB */
92 /* DE_FORMAT_YUV422_I_VYUY = 0x45,//MSB V-Y-U-Y LSB */
93 /* DE_FORMAT_YUV444_P = 0x46,//MSB P3-2-1-0 LSB, */
94 /* YYYY UUUU VVVV, reserved */
95 /* DE_FORMAT_YUV422_P = 0x47,//MSB P3-2-1-0 LSB YYYY UU VV */
96 /* DE_FORMAT_YUV420_P = 0x48,//MSB P3-2-1-0 LSB YYYY U V */
97 /* DE_FORMAT_YUV411_P = 0x49,//MSB P3-2-1-0 LSB YYYY U V */
98 /* DE_FORMAT_YUV422_SP_UVUV = 0x4a,//MSB V-U-V-U LSB */
99 /* DE_FORMAT_YUV422_SP_VUVU = 0x4b,//MSB U-V-U-V LSB */
100 /* DE_FORMAT_YUV420_SP_UVUV = 0x4c, */
101 /* DE_FORMAT_YUV420_SP_VUVU = 0x4d, */
102 /* DE_FORMAT_YUV411_SP_UVUV = 0x4e, */
103 /* DE_FORMAT_YUV411_SP_VUVU = 0x4f, */
104 void rt_mixer_set(int sel, unsigned int addr0, unsigned int addr1,
105 unsigned int addr2, unsigned int w, unsigned int h,
106 unsigned int outw, unsigned int outh, unsigned int fmt)
107 {
108 int ycnt, ccnt, uisel;
109 int cinw, cinh, r_fmt;
110 unsigned int yhstep, yvstep, chstep, cvstep;
111 unsigned int base;
112
113 uisel = 0;
114 base = sel ? (de_base + RTMX1_BASE) : (de_base + RTMX0_BASE);
115
116 if (fmt == DE_FORMAT_YUV422_I_VYUY) {
117 r_fmt = 0x0;
118 } else if (fmt == DE_FORMAT_YUV422_I_YVYU) {
119 r_fmt = 0x1;
120 } else if (fmt == DE_FORMAT_YUV422_I_YVYU) {
121 r_fmt = 0x1;
122 } else if (fmt == DE_FORMAT_YUV422_I_UYVY) {
123 r_fmt = 0x2;
124 } else if (fmt == DE_FORMAT_YUV422_I_UYVY) {
125 r_fmt = 0x2;
126 } else if (fmt == DE_FORMAT_YUV422_I_YUYV) {
127 r_fmt = 0x3;
128 } else if (fmt == DE_FORMAT_YUV422_I_YUYV) {
129 r_fmt = 0x3;
130 } else if (fmt == DE_FORMAT_YUV422_SP_VUVU) {
131 r_fmt = 0x5;
132 } else if (fmt == DE_FORMAT_YUV422_SP_VUVU) {
133 r_fmt = 0x5;
134 } else if (fmt == DE_FORMAT_YUV422_SP_UVUV) {
135 r_fmt = 0x4;
136 } else if (fmt == DE_FORMAT_YUV422_SP_UVUV) {
137 r_fmt = 0x4;
138 } else if (fmt == DE_FORMAT_YUV422_P) {
139 r_fmt = 0x6;
140 } else if (fmt == DE_FORMAT_YUV422_P) {
141 r_fmt = 0x6;
142 } else if (fmt == DE_FORMAT_YUV420_SP_VUVU) {
143 r_fmt = 0x9;
144 } else if (fmt == DE_FORMAT_YUV420_SP_VUVU) {
145 r_fmt = 0x9;
146 } else if (fmt == DE_FORMAT_YUV420_SP_UVUV) {
147 r_fmt = 0x8;
148 } else if (fmt == DE_FORMAT_YUV420_SP_UVUV) {
149 r_fmt = 0x8;
150 } else if (fmt == DE_FORMAT_YUV420_P) {
151 r_fmt = 0xa;
152 } else if (fmt == DE_FORMAT_YUV420_P) {
153 r_fmt = 0xa;
154 } else if (fmt == DE_FORMAT_YUV411_SP_VUVU) {
155 r_fmt = 0xd;
156 } else if (fmt == DE_FORMAT_YUV411_SP_VUVU) {
157 r_fmt = 0xd;
158 } else if (fmt == DE_FORMAT_YUV411_SP_UVUV) {
159 r_fmt = 0xc;
160 } else if (fmt == DE_FORMAT_YUV411_SP_UVUV) {
161 r_fmt = 0xc;
162 } else if (fmt == DE_FORMAT_YUV411_P) {
163 r_fmt = 0xe;
164 } else if (fmt == DE_FORMAT_YUV411_P) {
165 r_fmt = 0xe;
166 } else {
167 uisel = 0x1;
168 r_fmt = fmt;
169 }
170
171 ccnt = 0;
172 if (!uisel) {
173 if (r_fmt <= 0x3) {
174 ycnt = 2;
175 cinw = w>>1;
176 cinh = h;
177 } else if (r_fmt == 0x6) {
178 ycnt = 1;
179 ccnt = 1;
180 cinw = w >> 1;
181 cinh = h;
182 } else if (r_fmt <= 0x9) {
183 ycnt = 1;
184 ccnt = 0;
185 cinw = w >> 1;
186 cinh = h >> 1;
187 } else if (r_fmt == 0xa) {
188 ycnt = 1;
189 ccnt = 1;
190 cinw = w >> 1;
191 cinh = h >> 1;
192 } else if (r_fmt <= 0xd) {
193 ycnt = 1;
194 ccnt = 1;
195 cinw = w >> 2;
196 cinh = h;
197 } else if (r_fmt == 0xe) {
198 ycnt = 1;
199 ccnt = 2;
200 cinw = w >> 2;
201 cinh = h;
202 }
203 if ((r_fmt == 0x4) || (r_fmt == 0x5)) {
204 cinw = w>>1;
205 cinh = h;
206 }
207 csc_set(0, sel, 1);
208 } else {
209 if (r_fmt <= 0x7)
210 ycnt = 4;
211 else if (r_fmt <= 0x9)
212 ycnt = 3;
213 else
214 ycnt = 2;
215 cinw = w;
216 cinh = h;
217 csc_set(1, sel, 0);
218 }
219
220 yhstep = (w<<20)/outw;
221 yvstep = (h<<20)/outh;
222 chstep = (cinw<<20)/outw;
223 cvstep = (cinh<<20)/outh;
224
225 /* [RTMX] */
226 de_writel(base + 0x00000, 0x00000000);
227 de_writel(base + 0x01000, 0x00000100);
228 de_writel(base + 0x01004, 0x00000000);
229 de_writel(base + 0x01008, ((outh - 1) << 16) | (outw - 1));
230 de_writel(base + 0x0100c, 0x00000000);
231 de_writel(base + 0x01010, 0x00000000);
232 de_writel(base + 0x01014, 0x00000000);
233 de_writel(base + 0x01018, 0x00000000);
234 de_writel(base + 0x0101c, 0x00000000);
235 de_writel(base + 0x01020, 0x00000000);
236 de_writel(base + 0x01024, 0x00000000);
237 de_writel(base + 0x01028, 0x00000000);
238 de_writel(base + 0x0102c, 0x00000000);
239 de_writel(base + 0x01030, 0x00000000);
240 de_writel(base + 0x01034, 0x00000000);
241 de_writel(base + 0x01038, 0x00000000);
242 de_writel(base + 0x0103c, 0x00000000);
243 de_writel(base + 0x01040, 0x00000000);
244 de_writel(base + 0x01044, 0x00000000);
245 de_writel(base + 0x01048, 0x00000000);
246 de_writel(base + 0x0104c, 0x00000000);
247 de_writel(base + 0x01050, 0x00000000);
248 de_writel(base + 0x01054, 0x00000000);
249 de_writel(base + 0x01058, 0x00000000);
250 de_writel(base + 0x0105c, 0x00000000);
251 de_writel(base + 0x01060, 0x00000000);
252 de_writel(base + 0x01064, 0x00000000);
253 de_writel(base + 0x01068, 0x00000000);
254 de_writel(base + 0x0106c, 0x00000000);
255 de_writel(base + 0x01070, 0x00000000);
256 de_writel(base + 0x01074, 0x00000000);
257 de_writel(base + 0x01078, 0x00000000);
258 de_writel(base + 0x0107c, 0x00000000);
259 de_writel(base + 0x01080, 0x00043210);
260 de_writel(base + 0x01084, 0x00000000);
261 de_writel(base + 0x01088, 0xffff0000);
262 de_writel(base + 0x0108c, ((outh - 1) << 16) | (outw - 1));
263 de_writel(base + 0x01090, 0x03010301);
264 de_writel(base + 0x01094, 0x03010301);
265 de_writel(base + 0x01098, 0x03010301);
266 de_writel(base + 0x0109c, 0x03010301);
267 de_writel(base + 0x010a0, 0x00000000);
268 de_writel(base + 0x010a4, 0x00000000);
269 de_writel(base + 0x010a8, 0x00000000);
270 de_writel(base + 0x010ac, 0x00000000);
271 de_writel(base + 0x010b0, 0x00000000);
272 de_writel(base + 0x010b4, 0x00000000);
273 de_writel(base + 0x010b8, 0x00000000);
274 de_writel(base + 0x010bc, 0x00000000);
275 de_writel(base + 0x010c0, 0x00000000);
276 de_writel(base + 0x010c4, 0x00000000);
277 de_writel(base + 0x010c8, 0x00000000);
278 de_writel(base + 0x010cc, 0x00000000);
279 de_writel(base + 0x010d0, 0x00000000);
280 de_writel(base + 0x010d4, 0x00000000);
281 de_writel(base + 0x010d8, 0x00000000);
282 de_writel(base + 0x010dc, 0x00000000);
283 de_writel(base + 0x010e0, 0x00000000);
284 de_writel(base + 0x010e4, 0x00000000);
285 de_writel(base + 0x010e8, 0x00000000);
286 de_writel(base + 0x010ec, 0x00000000);
287 de_writel(base + 0x010f0, 0x00000000);
288 de_writel(base + 0x010f4, 0x00000000);
289 de_writel(base + 0x010f8, 0x00000000);
290 de_writel(base + 0x010fc, 0x00000000);
291 de_writel(base + 0x02000, (uisel << 15) | (r_fmt << 8) | 0x1);
292 de_writel(base + 0x02004, ((h - 1) << 16) | (w - 1));
293 de_writel(base + 0x02008, 0x00000000);
294 de_writel(base + 0x0200c, (w * ycnt));
295 de_writel(base + 0x02010, (w >> ccnt));
296 de_writel(base + 0x02014, (w >> ccnt));
297 de_writel(base + 0x02018, addr0);
298 de_writel(base + 0x0201c, addr1);
299 de_writel(base + 0x02020, addr2);
300 de_writel(base + 0x02024, 0x00000000);
301 de_writel(base + 0x02028, 0x00000000);
302 de_writel(base + 0x0202c, 0x00000000);
303 de_writel(base + 0x02030, 0x00000000);
304 de_writel(base + 0x02034, 0x00000000);
305 de_writel(base + 0x02038, 0x00000000);
306 de_writel(base + 0x0203c, 0x00000000);
307 de_writel(base + 0x02040, 0x00000000);
308 de_writel(base + 0x02044, 0x00000000);
309 de_writel(base + 0x02048, 0x00000000);
310 de_writel(base + 0x0204c, 0x00000000);
311 de_writel(base + 0x02050, 0x00000000);
312 de_writel(base + 0x02054, 0x00000000);
313 de_writel(base + 0x02058, 0x00000000);
314 de_writel(base + 0x0205c, 0x00000000);
315 de_writel(base + 0x02060, 0x00000000);
316 de_writel(base + 0x02064, 0x00000000);
317 de_writel(base + 0x02068, 0x00000000);
318 de_writel(base + 0x0206c, 0x00000000);
319 de_writel(base + 0x02070, 0x00000000);
320 de_writel(base + 0x02074, 0x00000000);
321 de_writel(base + 0x02078, 0x00000000);
322 de_writel(base + 0x0207c, 0x00000000);
323 de_writel(base + 0x02080, 0x00000000);
324 de_writel(base + 0x02084, 0x00000000);
325 de_writel(base + 0x02088, 0x00000000);
326 de_writel(base + 0x0208c, 0x00000000);
327 de_writel(base + 0x02090, 0x00000000);
328 de_writel(base + 0x02094, 0x00000000);
329 de_writel(base + 0x02098, 0x00000000);
330 de_writel(base + 0x0209c, 0x00000000);
331 de_writel(base + 0x020a0, 0x00000000);
332 de_writel(base + 0x020a4, 0x00000000);
333 de_writel(base + 0x020a8, 0x00000000);
334 de_writel(base + 0x020ac, 0x00000000);
335 de_writel(base + 0x020b0, 0x00000000);
336 de_writel(base + 0x020b4, 0x00000000);
337 de_writel(base + 0x020b8, 0x00000000);
338 de_writel(base + 0x020bc, 0x00000000);
339 de_writel(base + 0x020c0, 0x00000000);
340 de_writel(base + 0x020c4, 0x00000000);
341 de_writel(base + 0x020c8, 0x00000000);
342 de_writel(base + 0x020cc, 0x00000000);
343 de_writel(base + 0x020d0, 0x00000000);
344 de_writel(base + 0x020d4, 0x00000000);
345 de_writel(base + 0x020d8, 0x00000000);
346 de_writel(base + 0x020dc, 0x00000000);
347 de_writel(base + 0x020e0, 0x00000000);
348 de_writel(base + 0x020e4, 0x00000000);
349 de_writel(base + 0x020e8, ((h - 1) << 16) | (w - 1));
350 de_writel(base + 0x020ec, 0x00000000);
351 de_writel(base + 0x020f0, 0x00000000);
352 de_writel(base + 0x020f4, 0x00000000);
353 de_writel(base + 0x020f8, 0x00000000);
354 de_writel(base + 0x020fc, 0x00000000);
355 de_writel(base + 0x03000, 0x00000000);
356 de_writel(base + 0x03004, 0x00000000);
357 de_writel(base + 0x03008, 0x00000000);
358 de_writel(base + 0x0300c, 0x00000000);
359 de_writel(base + 0x03010, 0x00000000);
360 de_writel(base + 0x03014, 0x00000000);
361 de_writel(base + 0x03018, 0x00000000);
362 de_writel(base + 0x0301c, 0x00000000);
363 de_writel(base + 0x03020, 0x00000000);
364 de_writel(base + 0x03024, 0x00000000);
365 de_writel(base + 0x03028, 0x00000000);
366 de_writel(base + 0x0302c, 0x00000000);
367 de_writel(base + 0x03030, 0x00000000);
368 de_writel(base + 0x03034, 0x00000000);
369 de_writel(base + 0x03038, 0x00000000);
370 de_writel(base + 0x0303c, 0x00000000);
371 de_writel(base + 0x03040, 0x00000000);
372 de_writel(base + 0x03044, 0x00000000);
373 de_writel(base + 0x03048, 0x00000000);
374 de_writel(base + 0x0304c, 0x00000000);
375 de_writel(base + 0x03050, 0x00000000);
376 de_writel(base + 0x03054, 0x00000000);
377 de_writel(base + 0x03058, 0x00000000);
378 de_writel(base + 0x0305c, 0x00000000);
379 de_writel(base + 0x03060, 0x00000000);
380 de_writel(base + 0x03064, 0x00000000);
381 de_writel(base + 0x03068, 0x00000000);
382 de_writel(base + 0x0306c, 0x00000000);
383 de_writel(base + 0x03070, 0x00000000);
384 de_writel(base + 0x03074, 0x00000000);
385 de_writel(base + 0x03078, 0x00000000);
386 de_writel(base + 0x0307c, 0x00000000);
387 de_writel(base + 0x03080, 0x00000000);
388 de_writel(base + 0x03084, 0x00000000);
389 de_writel(base + 0x03088, 0x00000000);
390 if (!sel) {
391 de_writel(base + 0x04000, 0x00000000);
392 de_writel(base + 0x04004, 0x00000000);
393 de_writel(base + 0x04008, 0x00000000);
394 de_writel(base + 0x0400c, 0x00000000);
395 de_writel(base + 0x04010, 0x00000000);
396 de_writel(base + 0x04014, 0x00000000);
397 de_writel(base + 0x04018, 0x00000000);
398 de_writel(base + 0x0401c, 0x00000000);
399 de_writel(base + 0x04020, 0x00000000);
400 de_writel(base + 0x04024, 0x00000000);
401 de_writel(base + 0x04028, 0x00000000);
402 de_writel(base + 0x0402c, 0x00000000);
403 de_writel(base + 0x04030, 0x00000000);
404 de_writel(base + 0x04034, 0x00000000);
405 de_writel(base + 0x04038, 0x00000000);
406 de_writel(base + 0x0403c, 0x00000000);
407 de_writel(base + 0x04040, 0x00000000);
408 de_writel(base + 0x04044, 0x00000000);
409 de_writel(base + 0x04048, 0x00000000);
410 de_writel(base + 0x0404c, 0x00000000);
411 de_writel(base + 0x04050, 0x00000000);
412 de_writel(base + 0x04054, 0x00000000);
413 de_writel(base + 0x04058, 0x00000000);
414 de_writel(base + 0x0405c, 0x00000000);
415 de_writel(base + 0x04060, 0x00000000);
416 de_writel(base + 0x04064, 0x00000000);
417 de_writel(base + 0x04068, 0x00000000);
418 de_writel(base + 0x0406c, 0x00000000);
419 de_writel(base + 0x04070, 0x00000000);
420 de_writel(base + 0x04074, 0x00000000);
421 de_writel(base + 0x04078, 0x00000000);
422 de_writel(base + 0x0407c, 0x00000000);
423 de_writel(base + 0x04080, 0x00000000);
424 de_writel(base + 0x04084, 0x00000000);
425 de_writel(base + 0x04088, 0x00000000);
426 de_writel(base + 0x05000, 0x00000000);
427 de_writel(base + 0x05004, 0x00000000);
428 de_writel(base + 0x05008, 0x00000000);
429 de_writel(base + 0x0500c, 0x00000000);
430 de_writel(base + 0x05010, 0x00000000);
431 de_writel(base + 0x05014, 0x00000000);
432 de_writel(base + 0x05018, 0x00000000);
433 de_writel(base + 0x0501c, 0x00000000);
434 de_writel(base + 0x05020, 0x00000000);
435 de_writel(base + 0x05024, 0x00000000);
436 de_writel(base + 0x05028, 0x00000000);
437 de_writel(base + 0x0502c, 0x00000000);
438 de_writel(base + 0x05030, 0x00000000);
439 de_writel(base + 0x05034, 0x00000000);
440 de_writel(base + 0x05038, 0x00000000);
441 de_writel(base + 0x0503c, 0x00000000);
442 de_writel(base + 0x05040, 0x00000000);
443 de_writel(base + 0x05044, 0x00000000);
444 de_writel(base + 0x05048, 0x00000000);
445 de_writel(base + 0x0504c, 0x00000000);
446 de_writel(base + 0x05050, 0x00000000);
447 de_writel(base + 0x05054, 0x00000000);
448 de_writel(base + 0x05058, 0x00000000);
449 de_writel(base + 0x0505c, 0x00000000);
450 de_writel(base + 0x05060, 0x00000000);
451 de_writel(base + 0x05064, 0x00000000);
452 de_writel(base + 0x05068, 0x00000000);
453 de_writel(base + 0x0506c, 0x00000000);
454 de_writel(base + 0x05070, 0x00000000);
455 de_writel(base + 0x05074, 0x00000000);
456 de_writel(base + 0x05078, 0x00000000);
457 de_writel(base + 0x0507c, 0x00000000);
458 de_writel(base + 0x05080, 0x00000000);
459 de_writel(base + 0x05084, 0x00000000);
460 de_writel(base + 0x05088, 0x00000000);
461 }
462 de_writel(base + 0x00004, 0x00000000);
463 de_writel(base + 0x00008, 0x00000001);
464 de_writel(base + 0x0000c, ((outh - 1) << 16) | (outw - 1));
465 de_writel(base + 0x00000, 0x00000001);
466
467 /* [SCALERVIDEO_0] */
468 de_writel(base + 0x2000c, 0x00000000);
469 de_writel(base + 0x20040, ((outh - 1) << 16) | (outw - 1));
470 de_writel(base + 0x20080, ((h - 1) << 16) | (w - 1));
471 de_writel(base + 0x20088, yhstep);
472 de_writel(base + 0x2008c, yvstep);
473 de_writel(base + 0x20090, 0x00000000);
474 de_writel(base + 0x20098, 0x00000000);
475 de_writel(base + 0x2009c, 0x00000000);
476 de_writel(base + 0x200c0, ((cinh - 1) << 16) | (cinw - 1));/* */
477 de_writel(base + 0x200c8, chstep);
478 de_writel(base + 0x200cc, cvstep);
479 de_writel(base + 0x200d0, 0x00000000);
480 de_writel(base + 0x200d8, 0x00000000);
481 de_writel(base + 0x200dc, 0x00000000);
482 de_writel(base + 0x20200, 0x40000000);
483 de_writel(base + 0x20204, 0x40fe0000);
484 de_writel(base + 0x20208, 0x3ffd0100);
485 de_writel(base + 0x2020c, 0x3efc0100);
486 de_writel(base + 0x20210, 0x3efb0100);
487 de_writel(base + 0x20214, 0x3dfa0200);
488 de_writel(base + 0x20218, 0x3cf90200);
489 de_writel(base + 0x2021c, 0x3bf80200);
490 de_writel(base + 0x20220, 0x39f70200);
491 de_writel(base + 0x20224, 0x37f70200);
492 de_writel(base + 0x20228, 0x35f70200);
493 de_writel(base + 0x2022c, 0x33f70200);
494 de_writel(base + 0x20230, 0x31f70200);
495 de_writel(base + 0x20234, 0x2ef70200);
496 de_writel(base + 0x20238, 0x2cf70200);
497 de_writel(base + 0x2023c, 0x2af70200);
498 de_writel(base + 0x20240, 0x27f70200);
499 de_writel(base + 0x20244, 0x24f80100);
500 de_writel(base + 0x20248, 0x22f80100);
501 de_writel(base + 0x2024c, 0x1ef90100);
502 de_writel(base + 0x20250, 0x1cf90100);
503 de_writel(base + 0x20254, 0x19fa0100);
504 de_writel(base + 0x20258, 0x17fa0100);
505 de_writel(base + 0x2025c, 0x14fb0100);
506 de_writel(base + 0x20260, 0x11fc0000);
507 de_writel(base + 0x20264, 0x0ffc0000);
508 de_writel(base + 0x20268, 0x0cfd0000);
509 de_writel(base + 0x2026c, 0x0afd0000);
510 de_writel(base + 0x20270, 0x08fe0000);
511 de_writel(base + 0x20274, 0x05ff0000);
512 de_writel(base + 0x20278, 0x03ff0000);
513 de_writel(base + 0x2027c, 0x02000000);
514 de_writel(base + 0x20300, 0x00000000);
515 de_writel(base + 0x20304, 0x00000002);
516 de_writel(base + 0x20308, 0x0000ff04);
517 de_writel(base + 0x2030c, 0x0000ff06);
518 de_writel(base + 0x20310, 0x0000fe08);
519 de_writel(base + 0x20314, 0x0000fd0a);
520 de_writel(base + 0x20318, 0x0000fd0c);
521 de_writel(base + 0x2031c, 0x0000fc0f);
522 de_writel(base + 0x20320, 0x0000fc12);
523 de_writel(base + 0x20324, 0x0001fb14);
524 de_writel(base + 0x20328, 0x0001fa17);
525 de_writel(base + 0x2032c, 0x0001fa19);
526 de_writel(base + 0x20330, 0x0001f91c);
527 de_writel(base + 0x20334, 0x0001f91f);
528 de_writel(base + 0x20338, 0x0001f822);
529 de_writel(base + 0x2033c, 0x0001f824);
530 de_writel(base + 0x20340, 0x0002f727);
531 de_writel(base + 0x20344, 0x0002f72a);
532 de_writel(base + 0x20348, 0x0002f72c);
533 de_writel(base + 0x2034c, 0x0002f72f);
534 de_writel(base + 0x20350, 0x0002f731);
535 de_writel(base + 0x20354, 0x0002f733);
536 de_writel(base + 0x20358, 0x0002f735);
537 de_writel(base + 0x2035c, 0x0002f737);
538 de_writel(base + 0x20360, 0x0002f73a);
539 de_writel(base + 0x20364, 0x0002f83b);
540 de_writel(base + 0x20368, 0x0002f93c);
541 de_writel(base + 0x2036c, 0x0002fa3d);
542 de_writel(base + 0x20370, 0x0001fb3e);
543 de_writel(base + 0x20374, 0x0001fc3f);
544 de_writel(base + 0x20378, 0x0001fd40);
545 de_writel(base + 0x2037c, 0x0000fe40);
546 de_writel(base + 0x20400, 0x00004000);
547 de_writel(base + 0x20404, 0x000140ff);
548 de_writel(base + 0x20408, 0x00033ffe);
549 de_writel(base + 0x2040c, 0x00043ffd);
550 de_writel(base + 0x20410, 0x00063efc);
551 de_writel(base + 0x20414, 0xff083dfc);
552 de_writel(base + 0x20418, 0x000a3bfb);
553 de_writel(base + 0x2041c, 0xff0d39fb);
554 de_writel(base + 0x20420, 0xff0f37fb);
555 de_writel(base + 0x20424, 0xff1136fa);
556 de_writel(base + 0x20428, 0xfe1433fb);
557 de_writel(base + 0x2042c, 0xfe1631fb);
558 de_writel(base + 0x20430, 0xfd192ffb);
559 de_writel(base + 0x20434, 0xfd1c2cfb);
560 de_writel(base + 0x20438, 0xfd1f29fb);
561 de_writel(base + 0x2043c, 0xfc2127fc);
562 de_writel(base + 0x20440, 0xfc2424fc);
563 de_writel(base + 0x20444, 0xfc2721fc);
564 de_writel(base + 0x20448, 0xfb291ffd);
565 de_writel(base + 0x2044c, 0xfb2c1cfd);
566 de_writel(base + 0x20450, 0xfb2f19fd);
567 de_writel(base + 0x20454, 0xfb3116fe);
568 de_writel(base + 0x20458, 0xfb3314fe);
569 de_writel(base + 0x2045c, 0xfa3611ff);
570 de_writel(base + 0x20460, 0xfb370fff);
571 de_writel(base + 0x20464, 0xfb390dff);
572 de_writel(base + 0x20468, 0xfb3b0a00);
573 de_writel(base + 0x2046c, 0xfc3d08ff);
574 de_writel(base + 0x20470, 0xfc3e0600);
575 de_writel(base + 0x20474, 0xfd3f0400);
576 de_writel(base + 0x20478, 0xfe3f0300);
577 de_writel(base + 0x2047c, 0xff400100);
578 de_writel(base + 0x20600, 0x40000000);
579 de_writel(base + 0x20604, 0x40fe0000);
580 de_writel(base + 0x20608, 0x3ffd0100);
581 de_writel(base + 0x2060c, 0x3efc0100);
582 de_writel(base + 0x20610, 0x3efb0100);
583 de_writel(base + 0x20614, 0x3dfa0200);
584 de_writel(base + 0x20618, 0x3cf90200);
585 de_writel(base + 0x2061c, 0x3bf80200);
586 de_writel(base + 0x20620, 0x39f70200);
587 de_writel(base + 0x20624, 0x37f70200);
588 de_writel(base + 0x20628, 0x35f70200);
589 de_writel(base + 0x2062c, 0x33f70200);
590 de_writel(base + 0x20630, 0x31f70200);
591 de_writel(base + 0x20634, 0x2ef70200);
592 de_writel(base + 0x20638, 0x2cf70200);
593 de_writel(base + 0x2063c, 0x2af70200);
594 de_writel(base + 0x20640, 0x27f70200);
595 de_writel(base + 0x20644, 0x24f80100);
596 de_writel(base + 0x20648, 0x22f80100);
597 de_writel(base + 0x2064c, 0x1ef90100);
598 de_writel(base + 0x20650, 0x1cf90100);
599 de_writel(base + 0x20654, 0x19fa0100);
600 de_writel(base + 0x20658, 0x17fa0100);
601 de_writel(base + 0x2065c, 0x14fb0100);
602 de_writel(base + 0x20660, 0x11fc0000);
603 de_writel(base + 0x20664, 0x0ffc0000);
604 de_writel(base + 0x20668, 0x0cfd0000);
605 de_writel(base + 0x2066c, 0x0afd0000);
606 de_writel(base + 0x20670, 0x08fe0000);
607 de_writel(base + 0x20674, 0x05ff0000);
608 de_writel(base + 0x20678, 0x03ff0000);
609 de_writel(base + 0x2067c, 0x02000000);
610 de_writel(base + 0x20700, 0x00000000);
611 de_writel(base + 0x20704, 0x00000002);
612 de_writel(base + 0x20708, 0x0000ff04);
613 de_writel(base + 0x2070c, 0x0000ff06);
614 de_writel(base + 0x20710, 0x0000fe08);
615 de_writel(base + 0x20714, 0x0000fd0a);
616 de_writel(base + 0x20718, 0x0000fd0c);
617 de_writel(base + 0x2071c, 0x0000fc0f);
618 de_writel(base + 0x20720, 0x0000fc12);
619 de_writel(base + 0x20724, 0x0001fb14);
620 de_writel(base + 0x20728, 0x0001fa17);
621 de_writel(base + 0x2072c, 0x0001fa19);
622 de_writel(base + 0x20730, 0x0001f91c);
623 de_writel(base + 0x20734, 0x0001f91f);
624 de_writel(base + 0x20738, 0x0001f822);
625 de_writel(base + 0x2073c, 0x0001f824);
626 de_writel(base + 0x20740, 0x0002f727);
627 de_writel(base + 0x20744, 0x0002f72a);
628 de_writel(base + 0x20748, 0x0002f72c);
629 de_writel(base + 0x2074c, 0x0002f72f);
630 de_writel(base + 0x20750, 0x0002f731);
631 de_writel(base + 0x20754, 0x0002f733);
632 de_writel(base + 0x20758, 0x0002f735);
633 de_writel(base + 0x2075c, 0x0002f737);
634 de_writel(base + 0x20760, 0x0002f73a);
635 de_writel(base + 0x20764, 0x0002f83b);
636 de_writel(base + 0x20768, 0x0002f93c);
637 de_writel(base + 0x2076c, 0x0002fa3d);
638 de_writel(base + 0x20770, 0x0001fb3e);
639 de_writel(base + 0x20774, 0x0001fc3f);
640 de_writel(base + 0x20778, 0x0001fd40);
641 de_writel(base + 0x2077c, 0x0000fe40);
642 de_writel(base + 0x20800, 0x00004000);
643 de_writel(base + 0x20804, 0x000140ff);
644 de_writel(base + 0x20808, 0x00033ffe);
645 de_writel(base + 0x2080c, 0x00043ffd);
646 de_writel(base + 0x20810, 0x00063efc);
647 de_writel(base + 0x20814, 0xff083dfc);
648 de_writel(base + 0x20818, 0x000a3bfb);
649 de_writel(base + 0x2081c, 0xff0d39fb);
650 de_writel(base + 0x20820, 0xff0f37fb);
651 de_writel(base + 0x20824, 0xff1136fa);
652 de_writel(base + 0x20828, 0xfe1433fb);
653 de_writel(base + 0x2082c, 0xfe1631fb);
654 de_writel(base + 0x20830, 0xfd192ffb);
655 de_writel(base + 0x20834, 0xfd1c2cfb);
656 de_writel(base + 0x20838, 0xfd1f29fb);
657 de_writel(base + 0x2083c, 0xfc2127fc);
658 de_writel(base + 0x20840, 0xfc2424fc);
659 de_writel(base + 0x20844, 0xfc2721fc);
660 de_writel(base + 0x20848, 0xfb291ffd);
661 de_writel(base + 0x2084c, 0xfb2c1cfd);
662 de_writel(base + 0x20850, 0xfb2f19fd);
663 de_writel(base + 0x20854, 0xfb3116fe);
664 de_writel(base + 0x20858, 0xfb3314fe);
665 de_writel(base + 0x2085c, 0xfa3611ff);
666 de_writel(base + 0x20860, 0xfb370fff);
667 de_writel(base + 0x20864, 0xfb390dff);
668 de_writel(base + 0x20868, 0xfb3b0a00);
669 de_writel(base + 0x2086c, 0xfc3d08ff);
670 de_writel(base + 0x20870, 0xfc3e0600);
671 de_writel(base + 0x20874, 0xfd3f0400);
672 de_writel(base + 0x20878, 0xfe3f0300);
673 de_writel(base + 0x2087c, 0xff400100);
674 de_writel(base + 0x20000, 0x00000011);
675 de_writel(base + 0x00008, 0x00000001);
676
677 }
678 #else
rt_mixer_init(int sel,unsigned int addr0,unsigned int addr1,unsigned int addr2,unsigned int w,unsigned int h,unsigned int outw,unsigned int outh,unsigned int fmt)679 void rt_mixer_init(int sel, unsigned int addr0, unsigned int addr1,
680 unsigned int addr2, unsigned int w, unsigned int h,
681 unsigned int outw, unsigned int outh, unsigned int fmt)
682 {
683 int ycnt, ccnt, uisel;
684 int cinw, cinh, r_fmt;
685 unsigned int yhstep, yvstep, chstep, cvstep;
686 unsigned int base;
687
688 uisel = 0;
689 base = sel ? (de_base + RTMX1_BASE):(de_base + RTMX0_BASE);
690
691 if (fmt == DE_FORMAT_YUV422_I_VYUY)
692 r_fmt = 0x0;
693 else if (fmt == DE_FORMAT_YUV422_I_YVYU)
694 r_fmt = 0x1;
695 else if (fmt == DE_FORMAT_YUV422_I_YVYU)
696 r_fmt = 0x1;
697 else if (fmt == DE_FORMAT_YUV422_I_UYVY)
698 r_fmt = 0x2;
699 else if (fmt == DE_FORMAT_YUV422_I_UYVY)
700 r_fmt = 0x2;
701 else if (fmt == DE_FORMAT_YUV422_I_YUYV)
702 r_fmt = 0x3;
703 else if (fmt == DE_FORMAT_YUV422_I_YUYV)
704 r_fmt = 0x3;
705 else if (fmt == DE_FORMAT_YUV422_SP_VUVU)
706 r_fmt = 0x5;
707 else if (fmt == DE_FORMAT_YUV422_SP_VUVU)
708 r_fmt = 0x5;
709 else if (fmt == DE_FORMAT_YUV422_SP_UVUV)
710 r_fmt = 0x4;
711 else if (fmt == DE_FORMAT_YUV422_SP_UVUV)
712 r_fmt = 0x4;
713 else if (fmt == DE_FORMAT_YUV422_P)
714 r_fmt = 0x6;
715 else if (fmt == DE_FORMAT_YUV422_P)
716 r_fmt = 0x6;
717 else if (fmt == DE_FORMAT_YUV420_SP_VUVU)
718 r_fmt = 0x9;
719 else if (fmt == DE_FORMAT_YUV420_SP_VUVU)
720 r_fmt = 0x9;
721 else if (fmt == DE_FORMAT_YUV420_SP_UVUV)
722 r_fmt = 0x8;
723 else if (fmt == DE_FORMAT_YUV420_SP_UVUV)
724 r_fmt = 0x8;
725 else if (fmt == DE_FORMAT_YUV420_P)
726 r_fmt = 0xa;
727 else if (fmt == DE_FORMAT_YUV420_P)
728 r_fmt = 0xa;
729 else if (fmt == DE_FORMAT_YUV411_SP_VUVU)
730 r_fmt = 0xd;
731 else if (fmt == DE_FORMAT_YUV411_SP_VUVU)
732 r_fmt = 0xd;
733 else if (fmt == DE_FORMAT_YUV411_SP_UVUV)
734 r_fmt = 0xc;
735 else if (fmt == DE_FORMAT_YUV411_SP_UVUV)
736 r_fmt = 0xc;
737 else if (fmt == DE_FORMAT_YUV411_P)
738 r_fmt = 0xe;
739 else if (fmt == DE_FORMAT_YUV411_P)
740 r_fmt = 0xe;
741 else {
742 uisel = 0x1;
743 r_fmt = fmt;
744 }
745
746 ccnt = 0;
747 if (!uisel) {
748 if (r_fmt <= 0x3) {
749 ycnt = 2;
750 cinw = w >> 1;
751 cinh = h;
752 } else if (r_fmt == 0x6) {
753 ycnt = 1;
754 ccnt = 1;
755 cinw = w >> 1;
756 cinh = h;
757 } else if (r_fmt <= 0x9) {
758 ycnt = 1;
759 ccnt = 0;
760 cinw = w >> 1;
761 cinh = h >> 1;
762 } else if (r_fmt == 0xa) {
763 ycnt = 1;
764 ccnt = 1;
765 cinw = w >> 1;
766 cinh = h >> 1;
767 } else if (r_fmt <= 0xd) {
768 ycnt = 1;
769 ccnt = 1;
770 cinw = w >> 2;
771 cinh = h;
772 } else if (r_fmt == 0xe) {
773 ycnt = 1;
774 ccnt = 2;
775 cinw = w>>2; cinh = h;
776 }
777 if ((r_fmt == 0x4) || (r_fmt == 0x5)) {
778 cinw = w >> 1;
779 cinh = h;
780 }
781 csc_set(0, sel, 1);
782 } else {
783 if (r_fmt <= 0x7)
784 ycnt = 4;
785 else if (r_fmt <= 0x9)
786 ycnt = 3;
787 else
788 ycnt = 2;
789 cinw = w;
790 cinh = h;
791 csc_set(1, sel, 0);
792 }
793
794 yhstep = (w << 20) / outw;
795 yvstep = (h << 20) / outh;
796 chstep = (cinw << 20) / outw;
797 cvstep = (cinh << 20) / outh;
798
799 /* [RTMX] */
800 de_writel(base + 0x00000, 0x00000000);
801 de_writel(base + 0x01000, 0x00000100);
802 de_writel(base + 0x01004, 0x00000000);
803 de_writel(base + 0x01008, ((outh - 1) << 16)|(outw - 1));
804 de_writel(base + 0x0100c, 0x00000000);
805 de_writel(base + 0x01010, 0x00000000);
806 de_writel(base + 0x01014, 0x00000000);
807 de_writel(base + 0x01018, 0x00000000);
808 de_writel(base + 0x0101c, 0x00000000);
809 de_writel(base + 0x01020, 0x00000000);
810 de_writel(base + 0x01024, 0x00000000);
811 de_writel(base + 0x01028, 0x00000000);
812 de_writel(base + 0x0102c, 0x00000000);
813 de_writel(base + 0x01030, 0x00000000);
814 de_writel(base + 0x01034, 0x00000000);
815 de_writel(base + 0x01038, 0x00000000);
816 de_writel(base + 0x0103c, 0x00000000);
817 de_writel(base + 0x01040, 0x00000000);
818 de_writel(base + 0x01044, 0x00000000);
819 de_writel(base + 0x01048, 0x00000000);
820 de_writel(base + 0x0104c, 0x00000000);
821 de_writel(base + 0x01050, 0x00000000);
822 de_writel(base + 0x01054, 0x00000000);
823 de_writel(base + 0x01058, 0x00000000);
824 de_writel(base + 0x0105c, 0x00000000);
825 de_writel(base + 0x01060, 0x00000000);
826 de_writel(base + 0x01064, 0x00000000);
827 de_writel(base + 0x01068, 0x00000000);
828 de_writel(base + 0x0106c, 0x00000000);
829 de_writel(base + 0x01070, 0x00000000);
830 de_writel(base + 0x01074, 0x00000000);
831 de_writel(base + 0x01078, 0x00000000);
832 de_writel(base + 0x0107c, 0x00000000);
833 de_writel(base + 0x01080, 0x00043210);
834 de_writel(base + 0x01084, 0x00000000);
835 de_writel(base + 0x01088, 0xffff0000);
836 de_writel(base + 0x0108c, ((outh - 1) << 16) | (outw - 1));
837 de_writel(base + 0x01090, 0x03010301);
838 de_writel(base + 0x01094, 0x03010301);
839 de_writel(base + 0x01098, 0x03010301);
840 de_writel(base + 0x0109c, 0x03010301);
841 de_writel(base + 0x010a0, 0x00000000);
842 de_writel(base + 0x010a4, 0x00000000);
843 de_writel(base + 0x010a8, 0x00000000);
844 de_writel(base + 0x010ac, 0x00000000);
845 de_writel(base + 0x010b0, 0x00000000);
846 de_writel(base + 0x010b4, 0x00000000);
847 de_writel(base + 0x010b8, 0x00000000);
848 de_writel(base + 0x010bc, 0x00000000);
849 de_writel(base + 0x010c0, 0x00000000);
850 de_writel(base + 0x010c4, 0x00000000);
851 de_writel(base + 0x010c8, 0x00000000);
852 de_writel(base + 0x010cc, 0x00000000);
853 de_writel(base + 0x010d0, 0x00000000);
854 de_writel(base + 0x010d4, 0x00000000);
855 de_writel(base + 0x010d8, 0x00000000);
856 de_writel(base + 0x010dc, 0x00000000);
857 de_writel(base + 0x010e0, 0x00000000);
858 de_writel(base + 0x010e4, 0x00000000);
859 de_writel(base + 0x010e8, 0x00000000);
860 de_writel(base + 0x010ec, 0x00000000);
861 de_writel(base + 0x010f0, 0x00000000);
862 de_writel(base + 0x010f4, 0x00000000);
863 de_writel(base + 0x010f8, 0x00000000);
864 de_writel(base + 0x010fc, 0x00000000);
865 de_writel(base + 0x02000, (uisel << 15) | (r_fmt << 8) | 0x1);
866 de_writel(base + 0x02004, ((h - 1) << 16) | (w - 1));
867 de_writel(base + 0x02008, 0x00000000);
868 de_writel(base + 0x0200c, (w * ycnt));
869 de_writel(base + 0x02010, (w >> ccnt));
870 de_writel(base + 0x02014, (w >> ccnt));
871 de_writel(base + 0x02018, addr0);
872 de_writel(base + 0x0201c, addr1);
873 de_writel(base + 0x02020, addr2);
874 de_writel(base + 0x02024, 0x00000000);
875 de_writel(base + 0x02028, 0x00000000);
876 de_writel(base + 0x0202c, 0x00000000);
877 de_writel(base + 0x02030, 0x00000000);
878 de_writel(base + 0x02034, 0x00000000);
879 de_writel(base + 0x02038, 0x00000000);
880 de_writel(base + 0x0203c, 0x00000000);
881 de_writel(base + 0x02040, 0x00000000);
882 de_writel(base + 0x02044, 0x00000000);
883 de_writel(base + 0x02048, 0x00000000);
884 de_writel(base + 0x0204c, 0x00000000);
885 de_writel(base + 0x02050, 0x00000000);
886 de_writel(base + 0x02054, 0x00000000);
887 de_writel(base + 0x02058, 0x00000000);
888 de_writel(base + 0x0205c, 0x00000000);
889 de_writel(base + 0x02060, 0x00000000);
890 de_writel(base + 0x02064, 0x00000000);
891 de_writel(base + 0x02068, 0x00000000);
892 de_writel(base + 0x0206c, 0x00000000);
893 de_writel(base + 0x02070, 0x00000000);
894 de_writel(base + 0x02074, 0x00000000);
895 de_writel(base + 0x02078, 0x00000000);
896 de_writel(base + 0x0207c, 0x00000000);
897 de_writel(base + 0x02080, 0x00000000);
898 de_writel(base + 0x02084, 0x00000000);
899 de_writel(base + 0x02088, 0x00000000);
900 de_writel(base + 0x0208c, 0x00000000);
901 de_writel(base + 0x02090, 0x00000000);
902 de_writel(base + 0x02094, 0x00000000);
903 de_writel(base + 0x02098, 0x00000000);
904 de_writel(base + 0x0209c, 0x00000000);
905 de_writel(base + 0x020a0, 0x00000000);
906 de_writel(base + 0x020a4, 0x00000000);
907 de_writel(base + 0x020a8, 0x00000000);
908 de_writel(base + 0x020ac, 0x00000000);
909 de_writel(base + 0x020b0, 0x00000000);
910 de_writel(base + 0x020b4, 0x00000000);
911 de_writel(base + 0x020b8, 0x00000000);
912 de_writel(base + 0x020bc, 0x00000000);
913 de_writel(base + 0x020c0, 0x00000000);
914 de_writel(base + 0x020c4, 0x00000000);
915 de_writel(base + 0x020c8, 0x00000000);
916 de_writel(base + 0x020cc, 0x00000000);
917 de_writel(base + 0x020d0, 0x00000000);
918 de_writel(base + 0x020d4, 0x00000000);
919 de_writel(base + 0x020d8, 0x00000000);
920 de_writel(base + 0x020dc, 0x00000000);
921 de_writel(base + 0x020e0, 0x00000000);
922 de_writel(base + 0x020e4, 0x00000000);
923 de_writel(base + 0x020e8, ((h - 1) << 16) | (w - 1));
924 de_writel(base + 0x020ec, 0x00000000);
925 de_writel(base + 0x020f0, 0x00000000);
926 de_writel(base + 0x020f4, 0x00000000);
927 de_writel(base + 0x020f8, 0x00000000);
928 de_writel(base + 0x020fc, 0x00000000);
929 de_writel(base + 0x03000, 0x00000000);
930 de_writel(base + 0x03004, 0x00000000);
931 de_writel(base + 0x03008, 0x00000000);
932 de_writel(base + 0x0300c, 0x00000000);
933 de_writel(base + 0x03010, 0x00000000);
934 de_writel(base + 0x03014, 0x00000000);
935 de_writel(base + 0x03018, 0x00000000);
936 de_writel(base + 0x0301c, 0x00000000);
937 de_writel(base + 0x03020, 0x00000000);
938 de_writel(base + 0x03024, 0x00000000);
939 de_writel(base + 0x03028, 0x00000000);
940 de_writel(base + 0x0302c, 0x00000000);
941 de_writel(base + 0x03030, 0x00000000);
942 de_writel(base + 0x03034, 0x00000000);
943 de_writel(base + 0x03038, 0x00000000);
944 de_writel(base + 0x0303c, 0x00000000);
945 de_writel(base + 0x03040, 0x00000000);
946 de_writel(base + 0x03044, 0x00000000);
947 de_writel(base + 0x03048, 0x00000000);
948 de_writel(base + 0x0304c, 0x00000000);
949 de_writel(base + 0x03050, 0x00000000);
950 de_writel(base + 0x03054, 0x00000000);
951 de_writel(base + 0x03058, 0x00000000);
952 de_writel(base + 0x0305c, 0x00000000);
953 de_writel(base + 0x03060, 0x00000000);
954 de_writel(base + 0x03064, 0x00000000);
955 de_writel(base + 0x03068, 0x00000000);
956 de_writel(base + 0x0306c, 0x00000000);
957 de_writel(base + 0x03070, 0x00000000);
958 de_writel(base + 0x03074, 0x00000000);
959 de_writel(base + 0x03078, 0x00000000);
960 de_writel(base + 0x0307c, 0x00000000);
961 de_writel(base + 0x03080, 0x00000000);
962 de_writel(base + 0x03084, 0x00000000);
963 de_writel(base + 0x03088, 0x00000000);
964 if (!sel) {
965 de_writel(base + 0x04000, 0x00000000);
966 de_writel(base + 0x04004, 0x00000000);
967 de_writel(base + 0x04008, 0x00000000);
968 de_writel(base + 0x0400c, 0x00000000);
969 de_writel(base + 0x04010, 0x00000000);
970 de_writel(base + 0x04014, 0x00000000);
971 de_writel(base + 0x04018, 0x00000000);
972 de_writel(base + 0x0401c, 0x00000000);
973 de_writel(base + 0x04020, 0x00000000);
974 de_writel(base + 0x04024, 0x00000000);
975 de_writel(base + 0x04028, 0x00000000);
976 de_writel(base + 0x0402c, 0x00000000);
977 de_writel(base + 0x04030, 0x00000000);
978 de_writel(base + 0x04034, 0x00000000);
979 de_writel(base + 0x04038, 0x00000000);
980 de_writel(base + 0x0403c, 0x00000000);
981 de_writel(base + 0x04040, 0x00000000);
982 de_writel(base + 0x04044, 0x00000000);
983 de_writel(base + 0x04048, 0x00000000);
984 de_writel(base + 0x0404c, 0x00000000);
985 de_writel(base + 0x04050, 0x00000000);
986 de_writel(base + 0x04054, 0x00000000);
987 de_writel(base + 0x04058, 0x00000000);
988 de_writel(base + 0x0405c, 0x00000000);
989 de_writel(base + 0x04060, 0x00000000);
990 de_writel(base + 0x04064, 0x00000000);
991 de_writel(base + 0x04068, 0x00000000);
992 de_writel(base + 0x0406c, 0x00000000);
993 de_writel(base + 0x04070, 0x00000000);
994 de_writel(base + 0x04074, 0x00000000);
995 de_writel(base + 0x04078, 0x00000000);
996 de_writel(base + 0x0407c, 0x00000000);
997 de_writel(base + 0x04080, 0x00000000);
998 de_writel(base + 0x04084, 0x00000000);
999 de_writel(base + 0x04088, 0x00000000);
1000 de_writel(base + 0x05000, 0x00000000);
1001 de_writel(base + 0x05004, 0x00000000);
1002 de_writel(base + 0x05008, 0x00000000);
1003 de_writel(base + 0x0500c, 0x00000000);
1004 de_writel(base + 0x05010, 0x00000000);
1005 de_writel(base + 0x05014, 0x00000000);
1006 de_writel(base + 0x05018, 0x00000000);
1007 de_writel(base + 0x0501c, 0x00000000);
1008 de_writel(base + 0x05020, 0x00000000);
1009 de_writel(base + 0x05024, 0x00000000);
1010 de_writel(base + 0x05028, 0x00000000);
1011 de_writel(base + 0x0502c, 0x00000000);
1012 de_writel(base + 0x05030, 0x00000000);
1013 de_writel(base + 0x05034, 0x00000000);
1014 de_writel(base + 0x05038, 0x00000000);
1015 de_writel(base + 0x0503c, 0x00000000);
1016 de_writel(base + 0x05040, 0x00000000);
1017 de_writel(base + 0x05044, 0x00000000);
1018 de_writel(base + 0x05048, 0x00000000);
1019 de_writel(base + 0x0504c, 0x00000000);
1020 de_writel(base + 0x05050, 0x00000000);
1021 de_writel(base + 0x05054, 0x00000000);
1022 de_writel(base + 0x05058, 0x00000000);
1023 de_writel(base + 0x0505c, 0x00000000);
1024 de_writel(base + 0x05060, 0x00000000);
1025 de_writel(base + 0x05064, 0x00000000);
1026 de_writel(base + 0x05068, 0x00000000);
1027 de_writel(base + 0x0506c, 0x00000000);
1028 de_writel(base + 0x05070, 0x00000000);
1029 de_writel(base + 0x05074, 0x00000000);
1030 de_writel(base + 0x05078, 0x00000000);
1031 de_writel(base + 0x0507c, 0x00000000);
1032 de_writel(base + 0x05080, 0x00000000);
1033 de_writel(base + 0x05084, 0x00000000);
1034 de_writel(base + 0x05088, 0x00000000);
1035 }
1036 de_writel(base + 0x00004, 0x00000000);
1037 de_writel(base + 0x00008, 0x00000001);
1038 de_writel(base + 0x0000c, ((outh-1)<<16)|(outw-1));
1039 de_writel(base + 0x00000, 0x00000001);
1040
1041 /* [SCALERVIDEO_0] */
1042 if (w != outw || h != outh || fmt > 0x40) {
1043 de_writel(base + 0x2000c, 0x00000000);
1044 de_writel(base + 0x20040, ((outh-1)<<16)|(outw-1));
1045 de_writel(base + 0x20080, ((h-1)<<16)|(w-1));
1046 de_writel(base + 0x20088, yhstep);
1047 de_writel(base + 0x2008c, yvstep);
1048 de_writel(base + 0x20090, 0x00000000);
1049 de_writel(base + 0x20098, 0x00000000);
1050 de_writel(base + 0x2009c, 0x00000000);
1051 de_writel(base + 0x200c0, ((cinh-1)<<16)|(cinw-1));
1052 de_writel(base + 0x200c8, chstep);
1053 de_writel(base + 0x200cc, cvstep);
1054 de_writel(base + 0x200d0, 0x00000000);
1055 de_writel(base + 0x200d8, 0x00000000);
1056 de_writel(base + 0x200dc, 0x00000000);
1057 de_writel(base + 0x20200, 0x40000000);
1058 de_writel(base + 0x20204, 0x40fe0000);
1059 de_writel(base + 0x20208, 0x3ffd0100);
1060 de_writel(base + 0x2020c, 0x3efc0100);
1061 de_writel(base + 0x20210, 0x3efb0100);
1062 de_writel(base + 0x20214, 0x3dfa0200);
1063 de_writel(base + 0x20218, 0x3cf90200);
1064 de_writel(base + 0x2021c, 0x3bf80200);
1065 de_writel(base + 0x20220, 0x39f70200);
1066 de_writel(base + 0x20224, 0x37f70200);
1067 de_writel(base + 0x20228, 0x35f70200);
1068 de_writel(base + 0x2022c, 0x33f70200);
1069 de_writel(base + 0x20230, 0x31f70200);
1070 de_writel(base + 0x20234, 0x2ef70200);
1071 de_writel(base + 0x20238, 0x2cf70200);
1072 de_writel(base + 0x2023c, 0x2af70200);
1073 de_writel(base + 0x20240, 0x27f70200);
1074 de_writel(base + 0x20244, 0x24f80100);
1075 de_writel(base + 0x20248, 0x22f80100);
1076 de_writel(base + 0x2024c, 0x1ef90100);
1077 de_writel(base + 0x20250, 0x1cf90100);
1078 de_writel(base + 0x20254, 0x19fa0100);
1079 de_writel(base + 0x20258, 0x17fa0100);
1080 de_writel(base + 0x2025c, 0x14fb0100);
1081 de_writel(base + 0x20260, 0x11fc0000);
1082 de_writel(base + 0x20264, 0x0ffc0000);
1083 de_writel(base + 0x20268, 0x0cfd0000);
1084 de_writel(base + 0x2026c, 0x0afd0000);
1085 de_writel(base + 0x20270, 0x08fe0000);
1086 de_writel(base + 0x20274, 0x05ff0000);
1087 de_writel(base + 0x20278, 0x03ff0000);
1088 de_writel(base + 0x2027c, 0x02000000);
1089 de_writel(base + 0x20300, 0x00000000);
1090 de_writel(base + 0x20304, 0x00000002);
1091 de_writel(base + 0x20308, 0x0000ff04);
1092 de_writel(base + 0x2030c, 0x0000ff06);
1093 de_writel(base + 0x20310, 0x0000fe08);
1094 de_writel(base + 0x20314, 0x0000fd0a);
1095 de_writel(base + 0x20318, 0x0000fd0c);
1096 de_writel(base + 0x2031c, 0x0000fc0f);
1097 de_writel(base + 0x20320, 0x0000fc12);
1098 de_writel(base + 0x20324, 0x0001fb14);
1099 de_writel(base + 0x20328, 0x0001fa17);
1100 de_writel(base + 0x2032c, 0x0001fa19);
1101 de_writel(base + 0x20330, 0x0001f91c);
1102 de_writel(base + 0x20334, 0x0001f91f);
1103 de_writel(base + 0x20338, 0x0001f822);
1104 de_writel(base + 0x2033c, 0x0001f824);
1105 de_writel(base + 0x20340, 0x0002f727);
1106 de_writel(base + 0x20344, 0x0002f72a);
1107 de_writel(base + 0x20348, 0x0002f72c);
1108 de_writel(base + 0x2034c, 0x0002f72f);
1109 de_writel(base + 0x20350, 0x0002f731);
1110 de_writel(base + 0x20354, 0x0002f733);
1111 de_writel(base + 0x20358, 0x0002f735);
1112 de_writel(base + 0x2035c, 0x0002f737);
1113 de_writel(base + 0x20360, 0x0002f73a);
1114 de_writel(base + 0x20364, 0x0002f83b);
1115 de_writel(base + 0x20368, 0x0002f93c);
1116 de_writel(base + 0x2036c, 0x0002fa3d);
1117 de_writel(base + 0x20370, 0x0001fb3e);
1118 de_writel(base + 0x20374, 0x0001fc3f);
1119 de_writel(base + 0x20378, 0x0001fd40);
1120 de_writel(base + 0x2037c, 0x0000fe40);
1121 de_writel(base + 0x20400, 0x00004000);
1122 de_writel(base + 0x20404, 0x000140ff);
1123 de_writel(base + 0x20408, 0x00033ffe);
1124 de_writel(base + 0x2040c, 0x00043ffd);
1125 de_writel(base + 0x20410, 0x00063efc);
1126 de_writel(base + 0x20414, 0xff083dfc);
1127 de_writel(base + 0x20418, 0x000a3bfb);
1128 de_writel(base + 0x2041c, 0xff0d39fb);
1129 de_writel(base + 0x20420, 0xff0f37fb);
1130 de_writel(base + 0x20424, 0xff1136fa);
1131 de_writel(base + 0x20428, 0xfe1433fb);
1132 de_writel(base + 0x2042c, 0xfe1631fb);
1133 de_writel(base + 0x20430, 0xfd192ffb);
1134 de_writel(base + 0x20434, 0xfd1c2cfb);
1135 de_writel(base + 0x20438, 0xfd1f29fb);
1136 de_writel(base + 0x2043c, 0xfc2127fc);
1137 de_writel(base + 0x20440, 0xfc2424fc);
1138 de_writel(base + 0x20444, 0xfc2721fc);
1139 de_writel(base + 0x20448, 0xfb291ffd);
1140 de_writel(base + 0x2044c, 0xfb2c1cfd);
1141 de_writel(base + 0x20450, 0xfb2f19fd);
1142 de_writel(base + 0x20454, 0xfb3116fe);
1143 de_writel(base + 0x20458, 0xfb3314fe);
1144 de_writel(base + 0x2045c, 0xfa3611ff);
1145 de_writel(base + 0x20460, 0xfb370fff);
1146 de_writel(base + 0x20464, 0xfb390dff);
1147 de_writel(base + 0x20468, 0xfb3b0a00);
1148 de_writel(base + 0x2046c, 0xfc3d08ff);
1149 de_writel(base + 0x20470, 0xfc3e0600);
1150 de_writel(base + 0x20474, 0xfd3f0400);
1151 de_writel(base + 0x20478, 0xfe3f0300);
1152 de_writel(base + 0x2047c, 0xff400100);
1153 de_writel(base + 0x20600, 0x40000000);
1154 de_writel(base + 0x20604, 0x40fe0000);
1155 de_writel(base + 0x20608, 0x3ffd0100);
1156 de_writel(base + 0x2060c, 0x3efc0100);
1157 de_writel(base + 0x20610, 0x3efb0100);
1158 de_writel(base + 0x20614, 0x3dfa0200);
1159 de_writel(base + 0x20618, 0x3cf90200);
1160 de_writel(base + 0x2061c, 0x3bf80200);
1161 de_writel(base + 0x20620, 0x39f70200);
1162 de_writel(base + 0x20624, 0x37f70200);
1163 de_writel(base + 0x20628, 0x35f70200);
1164 de_writel(base + 0x2062c, 0x33f70200);
1165 de_writel(base + 0x20630, 0x31f70200);
1166 de_writel(base + 0x20634, 0x2ef70200);
1167 de_writel(base + 0x20638, 0x2cf70200);
1168 de_writel(base + 0x2063c, 0x2af70200);
1169 de_writel(base + 0x20640, 0x27f70200);
1170 de_writel(base + 0x20644, 0x24f80100);
1171 de_writel(base + 0x20648, 0x22f80100);
1172 de_writel(base + 0x2064c, 0x1ef90100);
1173 de_writel(base + 0x20650, 0x1cf90100);
1174 de_writel(base + 0x20654, 0x19fa0100);
1175 de_writel(base + 0x20658, 0x17fa0100);
1176 de_writel(base + 0x2065c, 0x14fb0100);
1177 de_writel(base + 0x20660, 0x11fc0000);
1178 de_writel(base + 0x20664, 0x0ffc0000);
1179 de_writel(base + 0x20668, 0x0cfd0000);
1180 de_writel(base + 0x2066c, 0x0afd0000);
1181 de_writel(base + 0x20670, 0x08fe0000);
1182 de_writel(base + 0x20674, 0x05ff0000);
1183 de_writel(base + 0x20678, 0x03ff0000);
1184 de_writel(base + 0x2067c, 0x02000000);
1185 de_writel(base + 0x20700, 0x00000000);
1186 de_writel(base + 0x20704, 0x00000002);
1187 de_writel(base + 0x20708, 0x0000ff04);
1188 de_writel(base + 0x2070c, 0x0000ff06);
1189 de_writel(base + 0x20710, 0x0000fe08);
1190 de_writel(base + 0x20714, 0x0000fd0a);
1191 de_writel(base + 0x20718, 0x0000fd0c);
1192 de_writel(base + 0x2071c, 0x0000fc0f);
1193 de_writel(base + 0x20720, 0x0000fc12);
1194 de_writel(base + 0x20724, 0x0001fb14);
1195 de_writel(base + 0x20728, 0x0001fa17);
1196 de_writel(base + 0x2072c, 0x0001fa19);
1197 de_writel(base + 0x20730, 0x0001f91c);
1198 de_writel(base + 0x20734, 0x0001f91f);
1199 de_writel(base + 0x20738, 0x0001f822);
1200 de_writel(base + 0x2073c, 0x0001f824);
1201 de_writel(base + 0x20740, 0x0002f727);
1202 de_writel(base + 0x20744, 0x0002f72a);
1203 de_writel(base + 0x20748, 0x0002f72c);
1204 de_writel(base + 0x2074c, 0x0002f72f);
1205 de_writel(base + 0x20750, 0x0002f731);
1206 de_writel(base + 0x20754, 0x0002f733);
1207 de_writel(base + 0x20758, 0x0002f735);
1208 de_writel(base + 0x2075c, 0x0002f737);
1209 de_writel(base + 0x20760, 0x0002f73a);
1210 de_writel(base + 0x20764, 0x0002f83b);
1211 de_writel(base + 0x20768, 0x0002f93c);
1212 de_writel(base + 0x2076c, 0x0002fa3d);
1213 de_writel(base + 0x20770, 0x0001fb3e);
1214 de_writel(base + 0x20774, 0x0001fc3f);
1215 de_writel(base + 0x20778, 0x0001fd40);
1216 de_writel(base + 0x2077c, 0x0000fe40);
1217 de_writel(base + 0x20800, 0x00004000);
1218 de_writel(base + 0x20804, 0x000140ff);
1219 de_writel(base + 0x20808, 0x00033ffe);
1220 de_writel(base + 0x2080c, 0x00043ffd);
1221 de_writel(base + 0x20810, 0x00063efc);
1222 de_writel(base + 0x20814, 0xff083dfc);
1223 de_writel(base + 0x20818, 0x000a3bfb);
1224 de_writel(base + 0x2081c, 0xff0d39fb);
1225 de_writel(base + 0x20820, 0xff0f37fb);
1226 de_writel(base + 0x20824, 0xff1136fa);
1227 de_writel(base + 0x20828, 0xfe1433fb);
1228 de_writel(base + 0x2082c, 0xfe1631fb);
1229 de_writel(base + 0x20830, 0xfd192ffb);
1230 de_writel(base + 0x20834, 0xfd1c2cfb);
1231 de_writel(base + 0x20838, 0xfd1f29fb);
1232 de_writel(base + 0x2083c, 0xfc2127fc);
1233 de_writel(base + 0x20840, 0xfc2424fc);
1234 de_writel(base + 0x20844, 0xfc2721fc);
1235 de_writel(base + 0x20848, 0xfb291ffd);
1236 de_writel(base + 0x2084c, 0xfb2c1cfd);
1237 de_writel(base + 0x20850, 0xfb2f19fd);
1238 de_writel(base + 0x20854, 0xfb3116fe);
1239 de_writel(base + 0x20858, 0xfb3314fe);
1240 de_writel(base + 0x2085c, 0xfa3611ff);
1241 de_writel(base + 0x20860, 0xfb370fff);
1242 de_writel(base + 0x20864, 0xfb390dff);
1243 de_writel(base + 0x20868, 0xfb3b0a00);
1244 de_writel(base + 0x2086c, 0xfc3d08ff);
1245 de_writel(base + 0x20870, 0xfc3e0600);
1246 de_writel(base + 0x20874, 0xfd3f0400);
1247 de_writel(base + 0x20878, 0xfe3f0300);
1248 de_writel(base + 0x2087c, 0xff400100);
1249 de_writel(base + 0x20000, 0x00000011);
1250 }
1251
1252 de_writel(base + 0x00008, 0x00000001);
1253 }
1254
rt_mixer_set_addr(int sel,unsigned int addr0)1255 void rt_mixer_set_addr(int sel, unsigned int addr0)
1256 {
1257 unsigned int base;
1258
1259 base = sel?(de_base + RTMX1_BASE):(de_base + RTMX0_BASE);
1260 de_writel(base + 0x02018, addr0);
1261 }
1262 #endif
1263