summaryrefslogtreecommitdiff
path: root/hwc2/common/utils/AmVinfo.cpp (plain)
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
31struct vmode_match_s {
32 char *name;
33 enum vmode_e mode;
34};
35
36static 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*/
89enum 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
110const 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*/
129static 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
862const 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 */
873int 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
918const 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