blob: 4bc2420db624edabef9a7ec91a9aa4434fa73b0b
1 | /* |
2 | // Copyright (c) 2017 Amlogic |
3 | // |
4 | // Licensed under the Apache License, Version 2.0 (the "License"); |
5 | // you may not use this file except in compliance with the License. |
6 | // You may obtain a copy of the License at |
7 | // |
8 | // http://www.apache.org/licenses/LICENSE-2.0 |
9 | // |
10 | // Unless required by applicable law or agreed to in writing, software |
11 | // distributed under the License is distributed on an "AS IS" BASIS, |
12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | // See the License for the specific language governing permissions and |
14 | // limitations under the License. |
15 | // |
16 | */ |
17 | |
18 | /* |
19 | * !!!ATTENTATION: |
20 | * MOST COPY FROM KERNEL, DONT MODIFY. |
21 | */ |
22 | |
23 | #include <AmVinfo.h> |
24 | #include <string.h> |
25 | |
26 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
27 | /* |
28 | * COPY FROM Vinfo.c |
29 | */ |
30 | |
31 | struct vmode_match_s { |
32 | char *name; |
33 | enum vmode_e mode; |
34 | }; |
35 | |
36 | static struct vmode_match_s vmode_match_table[] = { |
37 | {"480i60hz", VMODE_480I}, |
38 | {"480irpt", VMODE_480I_RPT}, |
39 | {"480cvbs", VMODE_480CVBS}, |
40 | {"480p60hz", VMODE_480P}, |
41 | {"480prtp", VMODE_480P_RPT}, |
42 | {"576i50hz", VMODE_576I}, |
43 | {"576irpt", VMODE_576I_RPT}, |
44 | {"576cvbs", VMODE_576CVBS}, |
45 | {"576p50hz", VMODE_576P}, |
46 | {"576prpt", VMODE_576P_RPT}, |
47 | {"720p60hz", VMODE_720P}, |
48 | {"720p50hz", VMODE_720P_50HZ}, |
49 | {"768p60hz", VMODE_768P}, |
50 | {"768p50hz", VMODE_768P_50HZ}, |
51 | {"1080i60hz", VMODE_1080I}, |
52 | {"1080i50hz", VMODE_1080I_50HZ}, |
53 | {"1080p60hz", VMODE_1080P}, |
54 | {"1080p25hz", VMODE_1080P_25HZ}, |
55 | {"1080p30hz", VMODE_1080P_30HZ}, |
56 | {"1080p50hz", VMODE_1080P_50HZ}, |
57 | {"1080p24hz", VMODE_1080P_24HZ}, |
58 | {"2160p30hz", VMODE_4K2K_30HZ}, |
59 | {"2160p25hz", VMODE_4K2K_25HZ}, |
60 | {"2160p24hz", VMODE_4K2K_24HZ}, |
61 | {"smpte24hz", VMODE_4K2K_SMPTE}, |
62 | {"smpte25hz", VMODE_4K2K_SMPTE_25HZ}, |
63 | {"smpte30hz", VMODE_4K2K_SMPTE_30HZ}, |
64 | {"smpte50hz420", VMODE_4K2K_SMPTE_50HZ_Y420}, |
65 | {"smpte50hz", VMODE_4K2K_SMPTE_50HZ}, |
66 | {"smpte60hz420", VMODE_4K2K_SMPTE_60HZ_Y420}, |
67 | {"smpte60hz", VMODE_4K2K_SMPTE_60HZ}, |
68 | {"4k2k5g", VMODE_4K2K_FAKE_5G}, |
69 | {"2160p60hz420", VMODE_4K2K_60HZ_Y420}, |
70 | {"2160p60hz", VMODE_4K2K_60HZ}, |
71 | {"2160p50hz420", VMODE_4K2K_50HZ_Y420}, |
72 | {"2160p50hz", VMODE_4K2K_50HZ}, |
73 | {"2160p5g", VMODE_4K2K_5G}, |
74 | {"4k1k120hz420", VMODE_4K1K_120HZ_Y420}, |
75 | {"4k1k120hz", VMODE_4K1K_120HZ}, |
76 | {"4k1k100hz420", VMODE_4K1K_100HZ_Y420}, |
77 | {"4k1k100hz", VMODE_4K1K_100HZ}, |
78 | {"4k05k240hz420", VMODE_4K05K_240HZ_Y420}, |
79 | {"4k05k240hz", VMODE_4K05K_240HZ}, |
80 | {"4k05k200hz420", VMODE_4K05K_200HZ_Y420}, |
81 | {"4k05k200hz", VMODE_4K05K_200HZ}, |
82 | {"panel", VMODE_LCD}, |
83 | {"invalid", VMODE_INIT_NULL}, |
84 | }; |
85 | |
86 | /* |
87 | * Modified. |
88 | */ |
89 | enum vmode_e vmode_name_to_mode(const char *str) |
90 | { |
91 | int i; |
92 | enum vmode_e vmode = VMODE_MAX; |
93 | |
94 | for (i = 0; i < ARRAY_SIZE(vmode_match_table); i++) { |
95 | if (strstr(str, vmode_match_table[i].name)) { |
96 | vmode = vmode_match_table[i].mode; |
97 | break; |
98 | } |
99 | #if 0 |
100 | if (strcmp(vmode_match_table[i].name, str) == 0) { |
101 | vmode = vmode_match_table[i].mode; |
102 | break; |
103 | } |
104 | #endif |
105 | } |
106 | |
107 | return vmode; |
108 | } |
109 | |
110 | const char *vmode_mode_to_name(enum vmode_e vmode) |
111 | { |
112 | int i; |
113 | char *str = "invalid"; |
114 | |
115 | for (i = 0; i < ARRAY_SIZE(vmode_match_table); i++) { |
116 | if (vmode == vmode_match_table[i].mode) { |
117 | str = vmode_match_table[i].name; |
118 | break; |
119 | } |
120 | } |
121 | |
122 | return str; |
123 | } |
124 | |
125 | |
126 | /* |
127 | * COPY FROM TV_VOUT.h/TV_VOUT.c |
128 | */ |
129 | static const struct vinfo_s tv_info[] = { |
130 | { /* VMODE_480I */ |
131 | .name = "480i60hz", |
132 | .mode = VMODE_480I, |
133 | .width = 720, |
134 | .height = 480, |
135 | .field_height = 240, |
136 | .aspect_ratio_num = 4, |
137 | .aspect_ratio_den = 3, |
138 | .sync_duration_num = 60, |
139 | .sync_duration_den = 1, |
140 | .video_clk = 27000000, |
141 | .viu_color_fmt = TVIN_YUV444, |
142 | }, |
143 | { /* VMODE_480I_RPT */ |
144 | .name = "480i_rpt", |
145 | .mode = VMODE_480I_RPT, |
146 | .width = 720, |
147 | .height = 480, |
148 | .field_height = 240, |
149 | .aspect_ratio_num = 4, |
150 | .aspect_ratio_den = 3, |
151 | .sync_duration_num = 60, |
152 | .sync_duration_den = 1, |
153 | .video_clk = 27000000, |
154 | .viu_color_fmt = TVIN_YUV444, |
155 | }, |
156 | { /* VMODE_480CVBS*/ |
157 | .name = "480cvbs", |
158 | .mode = VMODE_480CVBS, |
159 | .width = 720, |
160 | .height = 480, |
161 | .field_height = 240, |
162 | .aspect_ratio_num = 4, |
163 | .aspect_ratio_den = 3, |
164 | .sync_duration_num = 60, |
165 | .sync_duration_den = 1, |
166 | .video_clk = 27000000, |
167 | .viu_color_fmt = TVIN_YUV444, |
168 | }, |
169 | { /* VMODE_480P */ |
170 | .name = "480p60hz", |
171 | .mode = VMODE_480P, |
172 | .width = 720, |
173 | .height = 480, |
174 | .field_height = 480, |
175 | .aspect_ratio_num = 4, |
176 | .aspect_ratio_den = 3, |
177 | .sync_duration_num = 60, |
178 | .sync_duration_den = 1, |
179 | .video_clk = 27000000, |
180 | .viu_color_fmt = TVIN_YUV444, |
181 | }, |
182 | { /* VMODE_480P_RPT */ |
183 | .name = "480p_rpt", |
184 | .mode = VMODE_480P_RPT, |
185 | .width = 720, |
186 | .height = 480, |
187 | .field_height = 480, |
188 | .aspect_ratio_num = 4, |
189 | .aspect_ratio_den = 3, |
190 | .sync_duration_num = 60, |
191 | .sync_duration_den = 1, |
192 | .video_clk = 27000000, |
193 | .viu_color_fmt = TVIN_YUV444, |
194 | }, |
195 | { /* VMODE_576I */ |
196 | .name = "576i50hz", |
197 | .mode = VMODE_576I, |
198 | .width = 720, |
199 | .height = 576, |
200 | .field_height = 288, |
201 | .aspect_ratio_num = 4, |
202 | .aspect_ratio_den = 3, |
203 | .sync_duration_num = 50, |
204 | .sync_duration_den = 1, |
205 | .video_clk = 27000000, |
206 | .viu_color_fmt = TVIN_YUV444, |
207 | }, |
208 | { /* VMODE_576I_RPT */ |
209 | .name = "576i_rpt", |
210 | .mode = VMODE_576I_RPT, |
211 | .width = 720, |
212 | .height = 576, |
213 | .field_height = 288, |
214 | .aspect_ratio_num = 4, |
215 | .aspect_ratio_den = 3, |
216 | .sync_duration_num = 50, |
217 | .sync_duration_den = 1, |
218 | .video_clk = 27000000, |
219 | .viu_color_fmt = TVIN_YUV444, |
220 | }, |
221 | { /* VMODE_576I */ |
222 | .name = "576cvbs", |
223 | .mode = VMODE_576CVBS, |
224 | .width = 720, |
225 | .height = 576, |
226 | .field_height = 288, |
227 | .aspect_ratio_num = 4, |
228 | .aspect_ratio_den = 3, |
229 | .sync_duration_num = 50, |
230 | .sync_duration_den = 1, |
231 | .video_clk = 27000000, |
232 | .viu_color_fmt = TVIN_YUV444, |
233 | }, |
234 | { /* VMODE_576P */ |
235 | .name = "576p50hz", |
236 | .mode = VMODE_576P, |
237 | .width = 720, |
238 | .height = 576, |
239 | .field_height = 576, |
240 | .aspect_ratio_num = 4, |
241 | .aspect_ratio_den = 3, |
242 | .sync_duration_num = 50, |
243 | .sync_duration_den = 1, |
244 | .video_clk = 27000000, |
245 | .viu_color_fmt = TVIN_YUV444, |
246 | }, |
247 | { /* VMODE_576P_RPT */ |
248 | .name = "576p_rpt", |
249 | .mode = VMODE_576P_RPT, |
250 | .width = 720, |
251 | .height = 576, |
252 | .field_height = 576, |
253 | .aspect_ratio_num = 4, |
254 | .aspect_ratio_den = 3, |
255 | .sync_duration_num = 50, |
256 | .sync_duration_den = 1, |
257 | .video_clk = 27000000, |
258 | .viu_color_fmt = TVIN_YUV444, |
259 | }, |
260 | { /* VMODE_720P */ |
261 | .name = "720p60hz", |
262 | .mode = VMODE_720P, |
263 | .width = 1280, |
264 | .height = 720, |
265 | .field_height = 720, |
266 | .aspect_ratio_num = 16, |
267 | .aspect_ratio_den = 9, |
268 | .sync_duration_num = 60, |
269 | .sync_duration_den = 1, |
270 | .video_clk = 74250000, |
271 | .viu_color_fmt = TVIN_YUV444, |
272 | }, |
273 | { /* VMODE_1080I */ |
274 | .name = "1080i60hz", |
275 | .mode = VMODE_1080I, |
276 | .width = 1920, |
277 | .height = 1080, |
278 | .field_height = 540, |
279 | .aspect_ratio_num = 16, |
280 | .aspect_ratio_den = 9, |
281 | .sync_duration_num = 60, |
282 | .sync_duration_den = 1, |
283 | .video_clk = 74250000, |
284 | .viu_color_fmt = TVIN_YUV444, |
285 | }, |
286 | { /* VMODE_1080P */ |
287 | .name = "1080p60hz", |
288 | .mode = VMODE_1080P, |
289 | .width = 1920, |
290 | .height = 1080, |
291 | .field_height = 1080, |
292 | .aspect_ratio_num = 16, |
293 | .aspect_ratio_den = 9, |
294 | .sync_duration_num = 60, |
295 | .sync_duration_den = 1, |
296 | .video_clk = 148500000, |
297 | .viu_color_fmt = TVIN_YUV444, |
298 | }, |
299 | { /* VMODE_720P_50hz */ |
300 | .name = "720p50hz", |
301 | .mode = VMODE_720P_50HZ, |
302 | .width = 1280, |
303 | .height = 720, |
304 | .field_height = 720, |
305 | .aspect_ratio_num = 16, |
306 | .aspect_ratio_den = 9, |
307 | .sync_duration_num = 50, |
308 | .sync_duration_den = 1, |
309 | .video_clk = 74250000, |
310 | .viu_color_fmt = TVIN_YUV444, |
311 | }, |
312 | { /* VMODE_1080I_50HZ */ |
313 | .name = "1080i50hz", |
314 | .mode = VMODE_1080I_50HZ, |
315 | .width = 1920, |
316 | .height = 1080, |
317 | .field_height = 540, |
318 | .aspect_ratio_num = 16, |
319 | .aspect_ratio_den = 9, |
320 | .sync_duration_num = 50, |
321 | .sync_duration_den = 1, |
322 | .video_clk = 74250000, |
323 | .viu_color_fmt = TVIN_YUV444, |
324 | }, |
325 | { /* VMODE_1080P_30HZ */ |
326 | .name = "1080p30hz", |
327 | .mode = VMODE_1080P_30HZ, |
328 | .width = 1920, |
329 | .height = 1080, |
330 | .field_height = 1080, |
331 | .aspect_ratio_num = 16, |
332 | .aspect_ratio_den = 9, |
333 | .sync_duration_num = 30, |
334 | .sync_duration_den = 1, |
335 | .video_clk = 74250000, |
336 | .viu_color_fmt = TVIN_YUV444, |
337 | }, |
338 | { /* VMODE_1080P_50HZ */ |
339 | .name = "1080p50hz", |
340 | .mode = VMODE_1080P_50HZ, |
341 | .width = 1920, |
342 | .height = 1080, |
343 | .field_height = 1080, |
344 | .aspect_ratio_num = 16, |
345 | .aspect_ratio_den = 9, |
346 | .sync_duration_num = 50, |
347 | .sync_duration_den = 1, |
348 | .video_clk = 148500000, |
349 | .viu_color_fmt = TVIN_YUV444, |
350 | }, |
351 | { /* VMODE_1080P_25HZ */ |
352 | .name = "1080p25hz", |
353 | .mode = VMODE_1080P_25HZ, |
354 | .width = 1920, |
355 | .height = 1080, |
356 | .field_height = 1080, |
357 | .aspect_ratio_num = 16, |
358 | .aspect_ratio_den = 9, |
359 | .sync_duration_num = 25, |
360 | .sync_duration_den = 1, |
361 | .video_clk = 74250000, |
362 | .viu_color_fmt = TVIN_YUV444, |
363 | }, |
364 | { /* VMODE_1080P_24HZ */ |
365 | .name = "1080p24hz", |
366 | .mode = VMODE_1080P_24HZ, |
367 | .width = 1920, |
368 | .height = 1080, |
369 | .field_height = 1080, |
370 | .aspect_ratio_num = 16, |
371 | .aspect_ratio_den = 9, |
372 | .sync_duration_num = 24, |
373 | .sync_duration_den = 1, |
374 | .video_clk = 74250000, |
375 | .viu_color_fmt = TVIN_YUV444, |
376 | }, |
377 | { /* VMODE_4K2K_30HZ */ |
378 | .name = "2160p30hz", |
379 | .mode = VMODE_4K2K_30HZ, |
380 | .width = 3840, |
381 | .height = 2160, |
382 | .field_height = 2160, |
383 | .aspect_ratio_num = 16, |
384 | .aspect_ratio_den = 9, |
385 | .sync_duration_num = 30, |
386 | .sync_duration_den = 1, |
387 | .video_clk = 297000000, |
388 | .viu_color_fmt = TVIN_YUV444, |
389 | }, |
390 | { /* VMODE_4K2K_25HZ */ |
391 | .name = "2160p25hz", |
392 | .mode = VMODE_4K2K_25HZ, |
393 | .width = 3840, |
394 | .height = 2160, |
395 | .field_height = 2160, |
396 | .aspect_ratio_num = 16, |
397 | .aspect_ratio_den = 9, |
398 | .sync_duration_num = 25, |
399 | .sync_duration_den = 1, |
400 | .video_clk = 297000000, |
401 | .viu_color_fmt = TVIN_YUV444, |
402 | }, |
403 | { /* VMODE_4K2K_24HZ */ |
404 | .name = "2160p24hz", |
405 | .mode = VMODE_4K2K_24HZ, |
406 | .width = 3840, |
407 | .height = 2160, |
408 | .field_height = 2160, |
409 | .aspect_ratio_num = 16, |
410 | .aspect_ratio_den = 9, |
411 | .sync_duration_num = 24, |
412 | .sync_duration_den = 1, |
413 | .video_clk = 297000000, |
414 | .viu_color_fmt = TVIN_YUV444, |
415 | }, |
416 | { /* VMODE_4K2K_SMPTE */ |
417 | .name = "smpte24hz", |
418 | .mode = VMODE_4K2K_SMPTE, |
419 | .width = 4096, |
420 | .height = 2160, |
421 | .field_height = 2160, |
422 | .aspect_ratio_num = 256, |
423 | .aspect_ratio_den = 135, |
424 | .sync_duration_num = 24, |
425 | .sync_duration_den = 1, |
426 | .video_clk = 297000000, |
427 | .viu_color_fmt = TVIN_YUV444, |
428 | }, |
429 | { /* VMODE_4K2K_SMPTE_25HZ */ |
430 | .name = "smpte25hz", |
431 | .mode = VMODE_4K2K_SMPTE_25HZ, |
432 | .width = 4096, |
433 | .height = 2160, |
434 | .field_height = 2160, |
435 | .aspect_ratio_num = 256, |
436 | .aspect_ratio_den = 135, |
437 | .sync_duration_num = 25, |
438 | .sync_duration_den = 1, |
439 | .video_clk = 297000000, |
440 | .viu_color_fmt = TVIN_YUV444, |
441 | }, |
442 | { /* VMODE_4K2K_SMPTE_30HZ */ |
443 | .name = "smpte30hz", |
444 | .mode = VMODE_4K2K_SMPTE_30HZ, |
445 | .width = 4096, |
446 | .height = 2160, |
447 | .field_height = 2160, |
448 | .aspect_ratio_num = 256, |
449 | .aspect_ratio_den = 135, |
450 | .sync_duration_num = 30, |
451 | .sync_duration_den = 1, |
452 | .video_clk = 297000000, |
453 | .viu_color_fmt = TVIN_YUV444, |
454 | }, |
455 | { /* VMODE_4K2K_SMPTE_50HZ */ |
456 | .name = "smpte50hz", |
457 | .mode = VMODE_4K2K_SMPTE_50HZ, |
458 | .width = 4096, |
459 | .height = 2160, |
460 | .field_height = 2160, |
461 | .aspect_ratio_num = 256, |
462 | .aspect_ratio_den = 135, |
463 | .sync_duration_num = 50, |
464 | .sync_duration_den = 1, |
465 | .video_clk = 297000000, |
466 | .viu_color_fmt = TVIN_YUV444, |
467 | }, |
468 | { /* VMODE_4K2K_SMPTE_60HZ */ |
469 | .name = "smpte60hz", |
470 | .mode = VMODE_4K2K_SMPTE_60HZ, |
471 | .width = 4096, |
472 | .height = 2160, |
473 | .field_height = 2160, |
474 | .aspect_ratio_num = 256, |
475 | .aspect_ratio_den = 135, |
476 | .sync_duration_num = 60, |
477 | .sync_duration_den = 1, |
478 | .video_clk = 297000000, |
479 | .viu_color_fmt = TVIN_YUV444, |
480 | }, |
481 | { /* VMODE_4K2K_FAKE_5G */ |
482 | .name = "4k2k5g", |
483 | .mode = VMODE_4K2K_FAKE_5G, |
484 | .width = 3840, |
485 | .height = 2160, |
486 | .field_height = 2160, |
487 | .aspect_ratio_num = 16, |
488 | .aspect_ratio_den = 9, |
489 | .sync_duration_num = 50, |
490 | .sync_duration_den = 1, |
491 | .video_clk = 495000000, |
492 | .viu_color_fmt = TVIN_YUV444, |
493 | }, |
494 | { /* VMODE_4K2K_60HZ_Y420 */ |
495 | .name = "2160p60hz420", |
496 | .mode = VMODE_4K2K_60HZ_Y420, |
497 | .width = 3840, |
498 | .height = 2160, |
499 | .field_height = 2160, |
500 | .aspect_ratio_num = 16, |
501 | .aspect_ratio_den = 9, |
502 | .sync_duration_num = 60, |
503 | .sync_duration_den = 1, |
504 | .video_clk = 594000000, |
505 | .viu_color_fmt = TVIN_YUV444, |
506 | }, |
507 | { /* VMODE_4K2K_SMPTE_60HZ_Y420 */ |
508 | .name = "smpte60hz420", |
509 | .mode = VMODE_4K2K_SMPTE_60HZ_Y420, |
510 | .width = 4096, |
511 | .height = 2160, |
512 | .field_height = 2160, |
513 | .aspect_ratio_num = 16, |
514 | .aspect_ratio_den = 9, |
515 | .sync_duration_num = 60, |
516 | .sync_duration_den = 1, |
517 | .video_clk = 594000000, |
518 | .viu_color_fmt = TVIN_YUV444, |
519 | }, |
520 | { /* VMODE_4K2K_60HZ */ |
521 | .name = "2160p60hz", |
522 | .mode = VMODE_4K2K_60HZ, |
523 | .width = 3840, |
524 | .height = 2160, |
525 | .field_height = 2160, |
526 | .aspect_ratio_num = 16, |
527 | .aspect_ratio_den = 9, |
528 | .sync_duration_num = 60, |
529 | .sync_duration_den = 1, |
530 | .video_clk = 594000000, |
531 | .viu_color_fmt = TVIN_YUV444, |
532 | }, |
533 | { /* VMODE_4K1K_100HZ_Y420 */ |
534 | .name = "4k1k100hz420", |
535 | .mode = VMODE_4K1K_100HZ_Y420, |
536 | .width = 3840, |
537 | .height = 1080, |
538 | .field_height = 1080, |
539 | .aspect_ratio_num = 32, |
540 | .aspect_ratio_den = 9, |
541 | .sync_duration_num = 100, |
542 | .sync_duration_den = 1, |
543 | .video_clk = 594000000, |
544 | .viu_color_fmt = TVIN_YUV444, |
545 | }, |
546 | { /* VMODE_4K1K_100HZ */ |
547 | .name = "4k1k100hz", |
548 | .mode = VMODE_4K1K_100HZ, |
549 | .width = 3840, |
550 | .height = 1080, |
551 | .field_height = 1080, |
552 | .aspect_ratio_num = 32, |
553 | .aspect_ratio_den = 9, |
554 | .sync_duration_num = 100, |
555 | .sync_duration_den = 1, |
556 | .video_clk = 594000000, |
557 | .viu_color_fmt = TVIN_YUV444, |
558 | }, |
559 | { /* VMODE_4K1K_120HZ_Y420 */ |
560 | .name = "4k1k120hz420", |
561 | .mode = VMODE_4K1K_120HZ_Y420, |
562 | .width = 3840, |
563 | .height = 1080, |
564 | .field_height = 1080, |
565 | .aspect_ratio_num = 32, |
566 | .aspect_ratio_den = 9, |
567 | .sync_duration_num = 120, |
568 | .sync_duration_den = 1, |
569 | .video_clk = 594000000, |
570 | .viu_color_fmt = TVIN_YUV444, |
571 | }, |
572 | { /* VMODE_4K1K_120HZ */ |
573 | .name = "4k1k120hz", |
574 | .mode = VMODE_4K1K_120HZ, |
575 | .width = 3840, |
576 | .height = 1080, |
577 | .field_height = 1080, |
578 | .aspect_ratio_num = 32, |
579 | .aspect_ratio_den = 9, |
580 | .sync_duration_num = 120, |
581 | .sync_duration_den = 1, |
582 | .video_clk = 594000000, |
583 | .viu_color_fmt = TVIN_YUV444, |
584 | }, |
585 | { /* VMODE_4K05K_200HZ_Y420 */ |
586 | .name = "4k05k200hz420", |
587 | .mode = VMODE_4K05K_200HZ_Y420, |
588 | .width = 3840, |
589 | .height = 1080, |
590 | .field_height = 1080, |
591 | .aspect_ratio_num = 64, |
592 | .aspect_ratio_den = 9, |
593 | .sync_duration_num = 200, |
594 | .sync_duration_den = 1, |
595 | .video_clk = 594000000, |
596 | .viu_color_fmt = TVIN_YUV444, |
597 | }, |
598 | { /* VMODE_4K05K_200HZ */ |
599 | .name = "4k05k200hz", |
600 | .mode = VMODE_4K05K_200HZ, |
601 | .width = 3840, |
602 | .height = 540, |
603 | .field_height = 540, |
604 | .aspect_ratio_num = 64, |
605 | .aspect_ratio_den = 9, |
606 | .sync_duration_num = 200, |
607 | .sync_duration_den = 1, |
608 | .video_clk = 594000000, |
609 | .viu_color_fmt = TVIN_YUV444, |
610 | }, |
611 | { /* VMODE_4K05K_240HZ_Y420 */ |
612 | .name = "4k05k240hz420", |
613 | .mode = VMODE_4K05K_240HZ_Y420, |
614 | .width = 3840, |
615 | .height = 540, |
616 | .field_height = 540, |
617 | .aspect_ratio_num = 64, |
618 | .aspect_ratio_den = 9, |
619 | .sync_duration_num = 240, |
620 | .sync_duration_den = 1, |
621 | .video_clk = 594000000, |
622 | .viu_color_fmt = TVIN_YUV444, |
623 | }, |
624 | { /* VMODE_4K05K_240HZ */ |
625 | .name = "4k05k240hz", |
626 | .mode = VMODE_4K05K_240HZ, |
627 | .width = 3840, |
628 | .height = 1080, |
629 | .field_height = 1080, |
630 | .aspect_ratio_num = 64, |
631 | .aspect_ratio_den = 9, |
632 | .sync_duration_num = 240, |
633 | .sync_duration_den = 1, |
634 | .video_clk = 594000000, |
635 | .viu_color_fmt = TVIN_YUV444, |
636 | }, |
637 | { /* VMODE_4K2K_50HZ_Y420 */ |
638 | .name = "2160p50hz420", |
639 | .mode = VMODE_4K2K_50HZ_Y420, |
640 | .width = 3840, |
641 | .height = 2160, |
642 | .field_height = 2160, |
643 | .aspect_ratio_num = 16, |
644 | .aspect_ratio_den = 9, |
645 | .sync_duration_num = 50, |
646 | .sync_duration_den = 1, |
647 | .video_clk = 594000000, |
648 | .viu_color_fmt = TVIN_YUV444, |
649 | }, |
650 | { /* VMODE_4K2K_SMPTE_50HZ_Y420 */ |
651 | .name = "smpte50hz420", |
652 | .mode = VMODE_4K2K_SMPTE_50HZ_Y420, |
653 | .width = 4096, |
654 | .height = 2160, |
655 | .field_height = 2160, |
656 | .aspect_ratio_num = 16, |
657 | .aspect_ratio_den = 9, |
658 | .sync_duration_num = 50, |
659 | .sync_duration_den = 1, |
660 | .video_clk = 594000000, |
661 | .viu_color_fmt = TVIN_YUV444, |
662 | }, |
663 | { /* VMODE_4K2K_50HZ */ |
664 | .name = "2160p50hz", |
665 | .mode = VMODE_4K2K_50HZ, |
666 | .width = 3840, |
667 | .height = 2160, |
668 | .field_height = 2160, |
669 | .aspect_ratio_num = 16, |
670 | .aspect_ratio_den = 9, |
671 | .sync_duration_num = 50, |
672 | .sync_duration_den = 1, |
673 | .video_clk = 594000000, |
674 | .viu_color_fmt = TVIN_YUV444, |
675 | }, |
676 | { /* VMODE_vga */ |
677 | .name = "vga", |
678 | .mode = VMODE_VGA, |
679 | .width = 640, |
680 | .height = 480, |
681 | .field_height = 240, |
682 | .aspect_ratio_num = 4, |
683 | .aspect_ratio_den = 3, |
684 | .sync_duration_num = 60, |
685 | .sync_duration_den = 1, |
686 | .video_clk = 25175000, |
687 | .viu_color_fmt = TVIN_YUV444, |
688 | }, |
689 | { /* VMODE_SVGA */ |
690 | .name = "svga", |
691 | .mode = VMODE_SVGA, |
692 | .width = 800, |
693 | .height = 600, |
694 | .field_height = 600, |
695 | .aspect_ratio_num = 4, |
696 | .aspect_ratio_den = 3, |
697 | .sync_duration_num = 60, |
698 | .sync_duration_den = 1, |
699 | .video_clk = 40000000, |
700 | .viu_color_fmt = TVIN_YUV444, |
701 | }, |
702 | { /* VMODE_XGA */ |
703 | .name = "xga", |
704 | .mode = VMODE_XGA, |
705 | .width = 1024, |
706 | .height = 768, |
707 | .field_height = 768, |
708 | .aspect_ratio_num = 4, |
709 | .aspect_ratio_den = 3, |
710 | .sync_duration_num = 60, |
711 | .sync_duration_den = 1, |
712 | .video_clk = 65000000, |
713 | .viu_color_fmt = TVIN_YUV444, |
714 | }, |
715 | { /* VMODE_sxga */ |
716 | .name = "sxga", |
717 | .mode = VMODE_SXGA, |
718 | .width = 1280, |
719 | .height = 1024, |
720 | .field_height = 1024, |
721 | .aspect_ratio_num = 5, |
722 | .aspect_ratio_den = 4, |
723 | .sync_duration_num = 60, |
724 | .sync_duration_den = 1, |
725 | .video_clk = 108000000, |
726 | .viu_color_fmt = TVIN_YUV444, |
727 | }, |
728 | { /* VMODE_wsxga */ |
729 | .name = "wsxga", |
730 | .mode = VMODE_WSXGA, |
731 | .width = 1440, |
732 | .height = 900, |
733 | .field_height = 900, |
734 | .aspect_ratio_num = 8, |
735 | .aspect_ratio_den = 5, |
736 | .sync_duration_num = 60, |
737 | .sync_duration_den = 1, |
738 | .video_clk = 88750000, |
739 | .viu_color_fmt = TVIN_YUV444, |
740 | }, |
741 | { /* VMODE_fhdvga */ |
742 | .name = "fhdvga", |
743 | .mode = VMODE_FHDVGA, |
744 | .width = 1920, |
745 | .height = 1080, |
746 | .field_height = 1080, |
747 | .aspect_ratio_num = 16, |
748 | .aspect_ratio_den = 9, |
749 | .sync_duration_num = 60, |
750 | .sync_duration_den = 1, |
751 | .video_clk = 148500000, |
752 | .viu_color_fmt = TVIN_YUV444, |
753 | }, |
754 | /* VMODE for 3D Frame Packing */ |
755 | { /* VMODE_1080FP60HZ */ |
756 | .name = "1080fp60hz", |
757 | .mode = VMODE_1080FP60HZ, |
758 | .width = 1920, |
759 | .height = 1080 + 1125, |
760 | .field_height = 1080 + 1125, |
761 | .aspect_ratio_num = 16, |
762 | .aspect_ratio_den = 9, |
763 | .sync_duration_num = 60, |
764 | .sync_duration_den = 1, |
765 | .video_clk = 297000000, |
766 | .viu_color_fmt = TVIN_YUV444, |
767 | }, |
768 | { /* VMODE_1080FP50HZ */ |
769 | .name = "1080fp50hz", |
770 | .mode = VMODE_1080FP50HZ, |
771 | .width = 1920, |
772 | .height = 1080 + 1125, |
773 | .field_height = 1080 + 1125, |
774 | .aspect_ratio_num = 16, |
775 | .aspect_ratio_den = 9, |
776 | .sync_duration_num = 50, |
777 | .sync_duration_den = 1, |
778 | .video_clk = 297000000, |
779 | .viu_color_fmt = TVIN_YUV444, |
780 | }, |
781 | { /* VMODE_1080FP30HZ */ |
782 | .name = "1080fp30hz", |
783 | .mode = VMODE_1080FP30HZ, |
784 | .width = 1920, |
785 | .height = 1080 + 1125, |
786 | .field_height = 1080 + 1125, |
787 | .aspect_ratio_num = 16, |
788 | .aspect_ratio_den = 9, |
789 | .sync_duration_num = 30, |
790 | .sync_duration_den = 1, |
791 | .video_clk = 148500000, |
792 | .viu_color_fmt = TVIN_YUV444, |
793 | }, |
794 | { /* VMODE_1080FP25HZ */ |
795 | .name = "1080fp25hz", |
796 | .mode = VMODE_1080FP25HZ, |
797 | .width = 1920, |
798 | .height = 1080 + 1125, |
799 | .field_height = 1080 + 1125, |
800 | .aspect_ratio_num = 16, |
801 | .aspect_ratio_den = 9, |
802 | .sync_duration_num = 25, |
803 | .sync_duration_den = 1, |
804 | .video_clk = 148500000, |
805 | .viu_color_fmt = TVIN_YUV444, |
806 | }, |
807 | { /* VMODE_1080FP24HZ */ |
808 | .name = "1080fp24hz", |
809 | .mode = VMODE_1080FP24HZ, |
810 | .width = 1920, |
811 | .height = 1080 + 1125, |
812 | .field_height = 1080 + 1125, |
813 | .aspect_ratio_num = 16, |
814 | .aspect_ratio_den = 9, |
815 | .sync_duration_num = 24, |
816 | .sync_duration_den = 1, |
817 | .video_clk = 148500000, |
818 | .viu_color_fmt = TVIN_YUV444, |
819 | }, |
820 | { /* VMODE_720FP60HZ */ |
821 | .name = "720fp60hz", |
822 | .mode = VMODE_720FP60HZ, |
823 | .width = 1280, |
824 | .height = 720 + 750, |
825 | .field_height = 720 + 750, |
826 | .aspect_ratio_num = 16, |
827 | .aspect_ratio_den = 9, |
828 | .sync_duration_num = 60, |
829 | .sync_duration_den = 1, |
830 | .video_clk = 148500000, |
831 | .viu_color_fmt = TVIN_YUV444, |
832 | }, |
833 | { /* VMODE_720FP50HZ */ |
834 | .name = "720fp50hz", |
835 | .mode = VMODE_720FP50HZ, |
836 | .width = 1280, |
837 | .height = 720 + 750, |
838 | .field_height = 720 + 750, |
839 | .aspect_ratio_num = 16, |
840 | .aspect_ratio_den = 9, |
841 | .sync_duration_num = 50, |
842 | .sync_duration_den = 1, |
843 | .video_clk = 148500000, |
844 | .viu_color_fmt = TVIN_YUV444, |
845 | }, |
846 | /* VMODE for 3D Frame Packing END */ |
847 | { /* NULL mode, used as temporary witch mode state */ |
848 | .name = "null", |
849 | .mode = VMODE_NULL, |
850 | .width = 1920, |
851 | .height = 1080, |
852 | .field_height = 1080, |
853 | .aspect_ratio_num = 16, |
854 | .aspect_ratio_den = 9, |
855 | .sync_duration_num = 60, |
856 | .sync_duration_den = 1, |
857 | .video_clk = 1485000000, |
858 | .viu_color_fmt = TVIN_YUV444, |
859 | }, |
860 | }; |
861 | |
862 | const struct vinfo_s *get_tv_info(enum vmode_e mode) |
863 | { |
864 | int i = 0; |
865 | for (i = 0; i < ARRAY_SIZE(tv_info); i++) { |
866 | if (mode == tv_info[i].mode) |
867 | return &tv_info[i]; |
868 | } |
869 | return NULL; |
870 | } |
871 | |
872 | /* for hdmi (un)plug during fps automation */ |
873 | int want_hdmi_mode(enum vmode_e mode) |
874 | { |
875 | int ret = 0; |
876 | if ((mode == VMODE_480I) |
877 | || (mode == VMODE_480I_RPT) |
878 | || (mode == VMODE_480P) |
879 | || (mode == VMODE_480P_RPT) |
880 | || (mode == VMODE_576I) |
881 | || (mode == VMODE_576I_RPT) |
882 | || (mode == VMODE_576P) |
883 | || (mode == VMODE_576P_RPT) |
884 | || (mode == VMODE_720P) |
885 | || (mode == VMODE_720P_50HZ) |
886 | || (mode == VMODE_1080I) |
887 | || (mode == VMODE_1080I_50HZ) |
888 | || (mode == VMODE_1080P) |
889 | || (mode == VMODE_1080P_50HZ) |
890 | || (mode == VMODE_1080P_30HZ) |
891 | || (mode == VMODE_1080P_24HZ) |
892 | || (mode == VMODE_4K2K_24HZ) |
893 | || (mode == VMODE_4K2K_25HZ) |
894 | || (mode == VMODE_4K2K_30HZ) |
895 | || (mode == VMODE_4K2K_SMPTE) |
896 | || (mode == VMODE_4K2K_SMPTE_25HZ) |
897 | || (mode == VMODE_4K2K_SMPTE_30HZ) |
898 | || (mode == VMODE_4K2K_SMPTE_50HZ) |
899 | || (mode == VMODE_4K2K_SMPTE_60HZ) |
900 | || (mode == VMODE_4K2K_SMPTE_50HZ_Y420) |
901 | || (mode == VMODE_4K2K_SMPTE_60HZ_Y420) |
902 | || (mode == VMODE_4K2K_FAKE_5G) |
903 | || (mode == VMODE_4K2K_5G) |
904 | || (mode == VMODE_4K2K_50HZ) |
905 | || (mode == VMODE_4K2K_50HZ_Y420) |
906 | || (mode == VMODE_4K2K_60HZ) |
907 | || (mode == VMODE_4K2K_60HZ_Y420) |
908 | ) |
909 | ret = 1; |
910 | return ret; |
911 | } |
912 | |
913 | |
914 | /* |
915 | * NEW ADDED |
916 | */ |
917 | //search |
918 | const struct vinfo_s * findMatchedMode(u32 width, u32 height, u32 refreshrate) { |
919 | int i = 0; |
920 | for (i = 0; i < ARRAY_SIZE(tv_info); i++) { |
921 | if (tv_info[i].width == width && tv_info[i].height == height && |
922 | tv_info[i].field_height == height && tv_info[i].sync_duration_num == refreshrate) { |
923 | return &(tv_info[i]); |
924 | } |
925 | } |
926 | return NULL; |
927 | } |
928 | |
929 |