• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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