1 /*
2 * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18 #include "drv_hdmi_common.h"
19 #include "drv_hdmi_infoframe.h"
20 #include "hdmi_product_define.h"
21
22 hdmi_video_def g_vesa_video_codes_des[VESA_VIDEO_CODE_MAX] = {
23 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, HDMI_PICTURE_ASPECT_NONE,
24 HDMI_VIDEO_TIMING_UNKNOWN, HDMI_VIDEO_UNKNOWN, "NONE" },
25 { 0, 40000, 60317, 800, 600, 256, 28, 40, 128, 88, 1, 4, 23, HDMI_PICTURE_ASPECT_16_9,
26 HDMI_VIDEO_TIMING_VESA_800X600_60, HDMI_VIDEO_PROGRESSIVE, "VESA800*600p60" },
27 { 0, 33750, 60000, 848, 480, 240, 37, 16, 112, 112, 6, 8, 23, HDMI_PICTURE_ASPECT_16_9,
28 HDMI_VIDEO_TIMING_VESA_848X480_60, HDMI_VIDEO_PROGRESSIVE, "VESA848*480p60" },
29 { 0, 65000, 60004, 1024, 768, 320, 38, 24, 136, 160, 3, 6, 29, HDMI_PICTURE_ASPECT_16_9,
30 HDMI_VIDEO_TIMING_VESA_1024X768_60, HDMI_VIDEO_PROGRESSIVE, "VESA1024*768p60" },
31 { 0, 74250, 60000, 1280, 720, 370, 30, 110, 40, 220, 5, 5, 20, HDMI_PICTURE_ASPECT_16_9,
32 HDMI_VIDEO_TIMING_VESA_1280X720_60, HDMI_VIDEO_PROGRESSIVE, "VESA1280*720p60" },
33 { 0, 68250, 59995, 1280, 768, 160, 22, 48, 32, 80, 3, 7, 12, HDMI_PICTURE_ASPECT_16_9,
34 HDMI_VIDEO_TIMING_VESA_1280X768_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1280*768p60RB" },
35 { 0, 79500, 59870, 1280, 768, 384, 30, 64, 128, 192, 3, 7, 20, HDMI_PICTURE_ASPECT_16_9,
36 HDMI_VIDEO_TIMING_VESA_1280X768_60, HDMI_VIDEO_PROGRESSIVE, "VESA1280*768p60" },
37 { 0, 71001, 59910, 1280, 800, 160, 23, 48, 32, 80, 3, 6, 14, HDMI_PICTURE_ASPECT_16_9,
38 HDMI_VIDEO_TIMING_VESA_1280X800_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1280*800p60RB" },
39 { 0, 83500, 59810, 1280, 800, 400, 31, 72, 128, 200, 3, 6, 22, HDMI_PICTURE_ASPECT_16_9,
40 HDMI_VIDEO_TIMING_VESA_1280X800_60, HDMI_VIDEO_PROGRESSIVE, "VESA1280*800p60" },
41 { 0, 108000, 60000, 1280, 960, 520, 40, 96, 112, 312, 1, 3, 36, HDMI_PICTURE_ASPECT_16_9,
42 HDMI_VIDEO_TIMING_VESA_1280X960_60, HDMI_VIDEO_PROGRESSIVE, "VESA1280*960p60" },
43 { 0, 108000, 60020, 1280, 1024, 408, 42, 48, 112, 248, 1, 3, 38, HDMI_PICTURE_ASPECT_16_9,
44 HDMI_VIDEO_TIMING_VESA_1280X1024_60, HDMI_VIDEO_PROGRESSIVE, "VESA1280*1024p60" },
45 { 0, 85500, 60015, 1360, 768, 432, 27, 64, 112, 256, 3, 6, 18, HDMI_PICTURE_ASPECT_16_9,
46 HDMI_VIDEO_TIMING_VESA_1360X768_60, HDMI_VIDEO_PROGRESSIVE, "VESA1360*768p60" },
47 { 0, 85501, 59790, 1366, 768, 426, 30, 70, 143, 213, 3, 3, 24, HDMI_PICTURE_ASPECT_16_9,
48 HDMI_VIDEO_TIMING_VESA_1366X768_60, HDMI_VIDEO_PROGRESSIVE, "VESA1366*768p60" },
49 { 0, 121749, 59978, 1400, 1050, 464, 39, 88, 144, 232, 3, 4, 32, HDMI_PICTURE_ASPECT_16_9,
50 HDMI_VIDEO_TIMING_VESA_1400X1050_60, HDMI_VIDEO_PROGRESSIVE, "VESA1400*1050p60" },
51 { 0, 88749, 59901, 1440, 900, 160, 26, 48, 32, 80, 3, 6, 17, HDMI_PICTURE_ASPECT_16_9,
52 HDMI_VIDEO_TIMING_VESA_1440X900_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1440*900p60RB" },
53 { 0, 106499, 59887, 1440, 900, 464, 34, 80, 152, 232, 3, 6, 25, HDMI_PICTURE_ASPECT_16_9,
54 HDMI_VIDEO_TIMING_VESA_1440X900_60, HDMI_VIDEO_PROGRESSIVE, "VESA1440*900p60" },
55 { 0, 108000, 60000, 1440, 1050, 144, 49, 12, 64, 68, 3, 6, 25, HDMI_PICTURE_ASPECT_16_9,
56 HDMI_VIDEO_TIMING_VESA_1440X1050_60, HDMI_VIDEO_PROGRESSIVE, "VESA1440*1050p60" },
57 { 0, 108000, 60000, 1440, 1050, 144, 49, 12, 64, 68, 3, 6, 25, HDMI_PICTURE_ASPECT_16_9,
58 HDMI_VIDEO_TIMING_VESA_1440X1050_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1440*1050p60RB" },
59 { 0, 108000, 60000, 1600, 900, 200, 100, 24, 80, 96, 1, 3, 96, HDMI_PICTURE_ASPECT_16_9,
60 HDMI_VIDEO_TIMING_VESA_1600X900_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1600*900p60" },
61 { 0, 162000, 60000, 1600, 1200, 560, 50, 64, 192, 304, 1, 3, 46, HDMI_PICTURE_ASPECT_16_9,
62 HDMI_VIDEO_TIMING_VESA_1600X1200_60, HDMI_VIDEO_PROGRESSIVE, "VESA1600*1200p60" },
63 { 0, 118999, 59883, 1680, 1050, 160, 30, 48, 32, 80, 3, 6, 21, HDMI_PICTURE_ASPECT_16_9,
64 HDMI_VIDEO_TIMING_VESA_1680X1050_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1680*1050p60RB" },
65 { 0, 146249, 59954, 1680, 1050, 560, 39, 104, 176, 280, 3, 6, 30, HDMI_PICTURE_ASPECT_16_9,
66 HDMI_VIDEO_TIMING_VESA_1680X1050_60, HDMI_VIDEO_PROGRESSIVE, "VESA1680*1050p60" },
67 { 0, 204751, 60000, 1792, 1344, 656, 50, 128, 200, 328, 1, 3, 46, HDMI_PICTURE_ASPECT_16_9,
68 HDMI_VIDEO_TIMING_VESA_1792X1344_60, HDMI_VIDEO_PROGRESSIVE, "VESA1792*1344p60" },
69 { 0, 218249, 59995, 1856, 1392, 672, 47, 96, 224, 352, 1, 3, 43, HDMI_PICTURE_ASPECT_16_9,
70 HDMI_VIDEO_TIMING_VESA_1856X1392_60, HDMI_VIDEO_PROGRESSIVE, "VESA1856*1392p60" },
71 { 0, 148500, 60000, 1920, 1080, 280, 45, 88, 44, 148, 4, 5, 36, HDMI_PICTURE_ASPECT_16_9,
72 HDMI_VIDEO_TIMING_VESA_1920X1080_60, HDMI_VIDEO_PROGRESSIVE, "VESA1920*1080p60" },
73 { 0, 154000, 59950, 1920, 1200, 160, 35, 48, 32, 80, 3, 6, 26, HDMI_PICTURE_ASPECT_16_9,
74 HDMI_VIDEO_TIMING_VESA_1920X1200_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA1920*1200p60RB" },
75 { 0, 193251, 59885, 1920, 1200, 672, 45, 136, 200, 336, 3, 6, 36, HDMI_PICTURE_ASPECT_16_9,
76 HDMI_VIDEO_TIMING_VESA_1920X1200_60, HDMI_VIDEO_PROGRESSIVE, "VESA1920*1200p60" },
77 { 0, 234000, 60000, 1920, 1440, 680, 60, 128, 208, 344, 1, 3, 56, HDMI_PICTURE_ASPECT_16_9,
78 HDMI_VIDEO_TIMING_VESA_1920X1440_60, HDMI_VIDEO_PROGRESSIVE, "VESA1920*1440p60" },
79 { 0, 162000, 60000, 2048, 1152, 202, 48, 26, 80, 96, 1, 3, 44, HDMI_PICTURE_ASPECT_16_9,
80 HDMI_VIDEO_TIMING_VESA_2048X1152_60, HDMI_VIDEO_PROGRESSIVE, "VESA2048*1152p60" },
81 { 0, 82500, 50000, 2560, 1440, 520, 30, 260, 40, 220, 3, 3, 24, HDMI_PICTURE_ASPECT_16_9,
82 HDMI_VIDEO_TIMING_VESA_2560X1440_60_RB, HDMI_VIDEO_PROGRESSIVE, "VESA2560*1440p60RB" },
83 { 0, 348502, 59987, 2560, 1600, 944, 58, 192, 280, 472, 3, 6, 49, HDMI_PICTURE_ASPECT_16_9,
84 HDMI_VIDEO_TIMING_VESA_2560X1600_60, HDMI_VIDEO_PROGRESSIVE, "VESA2560*1600p60" }
85 };
86
87 hdmi_video_def g_cea_video_codes_des[CEA_VIDEO_CODE_MAX] = {
88 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89 HDMI_PICTURE_ASPECT_NONE, HDMI_VIDEO_TIMING_UNKNOWN, HDMI_VIDEO_UNKNOWN, "NONE" },
90 { HDMI_640X480P60_4_3, 25175, 59940, 640, 480, 160, 45, 16, 96, 48, 10, 2, 33,
91 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_640X480P_60000, HDMI_VIDEO_PROGRESSIVE, "640*480p60 4:3" },
92 { HDMI_720X480P60_4_3, 27000, 59940, 720, 480, 138, 45, 16, 62, 60, 9, 6, 30,
93 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_720X480P_60000, HDMI_VIDEO_PROGRESSIVE, "720*480p60 4:3" },
94 { HDMI_720X480P60_16_9, 27000, 59940, 720, 480, 138, 45, 16, 62, 60, 9, 6, 30,
95 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_720X480P_60000, HDMI_VIDEO_PROGRESSIVE, "720*480p60 16:9" },
96 { HDMI_1280X720P60_16_9, 74250, 60000, 1280, 720, 370, 30, 110, 40, 220, 5, 5, 20,
97 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1280X720P_60000, HDMI_VIDEO_PROGRESSIVE, "1280*720p60 16:9" },
98 { HDMI_1920X1080I60_16_9, 74250, 60000, 1920, 1080, 280, 22, 88, 44, 148, 2, 5, 15,
99 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080I_60000, HDMI_VIDEO_INTERLACE, "1920*1080i60 16:9" },
100 { HDMI_1440X480I60_4_3, 27000, 59940, 1440, 480, 276, 22, 38, 124, 114, 4, 3, 15,
101 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_1440X480I_60000, HDMI_VIDEO_INTERLACE, "1440*480i60 4:3" },
102 { HDMI_1440X480I60_16_9, 27000, 59940, 1440, 480, 276, 22, 38, 124, 114, 4, 3, 15,
103 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1440X480I_60000, HDMI_VIDEO_INTERLACE, "1440*480i60 16:9" },
104 { HDMI_1440X240P60_4_3, 27000, 60054, 1440, 240, 276, 22, 38, 124, 114, 4, 3, 15,
105 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_1440X240P_60000, HDMI_VIDEO_PROGRESSIVE, "1440*240p60 4:3" },
106 { HDMI_1440X240P60_16_9, 27000, 60054, 1440, 240, 276, 22, 38, 124, 114, 4, 3, 15,
107 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1440X240P_60000, HDMI_VIDEO_PROGRESSIVE, "1440*240p60 16:9" },
108 { HDMI_2880X480I60_4_3, 54000, 59940, 2880, 480, 552, 22, 76, 248, 228, 4, 3, 15,
109 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_2880X480I_60000, HDMI_VIDEO_INTERLACE, "2880*480i60 4:3" },
110 { HDMI_2880X480I60_16_9, 54000, 59940, 2880, 480, 552, 22, 76, 248, 228, 4, 3, 15,
111 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_2880X480I_60000, HDMI_VIDEO_INTERLACE, "2880*480i60 16:9" },
112 { HDMI_2880X240P60_4_3, 54000, 60054, 2880, 240, 552, 22, 76, 248, 228, 4, 3, 15,
113 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_2880X240I_60000, HDMI_VIDEO_PROGRESSIVE, "2880*240i60 4:3" },
114 { HDMI_2880X240P60_16_9, 54000, 60054, 2880, 240, 552, 23, 76, 248, 228, 4, 3, 15,
115 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_2880X240I_60000, HDMI_VIDEO_PROGRESSIVE, "2880*240i60 16:9" },
116 { HDMI_1440X480P60_4_3, 54000, 59940, 1440, 480, 276, 45, 32, 124, 120, 9, 6, 30,
117 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_1440X480P_60000, HDMI_VIDEO_PROGRESSIVE, "1440*480p60 4:3" },
118 { HDMI_1440X480P60_16_9, 54000, 59940, 1440, 480, 276, 45, 32, 124, 120, 9, 6, 30,
119 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1440X480P_60000, HDMI_VIDEO_PROGRESSIVE, "1440*480p60 16:9" },
120 { HDMI_1920X1080P60_16_9, 148500, 60000, 1920, 1080, 280, 45, 88, 44, 148, 4, 5, 36,
121 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080P_60000, HDMI_VIDEO_PROGRESSIVE, "1920*1080p60 16:9" },
122 { HDMI_720X576P50_4_3, 27000, 50000, 720, 576, 144, 49, 12, 64, 68, 5, 5, 39,
123 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_720X576P_50000, HDMI_VIDEO_PROGRESSIVE, "720*576p50 4:3" },
124 { HDMI_720X576P50_16_9, 27000, 50000, 720, 576, 144, 49, 12, 64, 68, 5, 5, 39,
125 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_720X576P_50000, HDMI_VIDEO_PROGRESSIVE, "720*576p50 16:9" },
126 { HDMI_1280X720P50_16_9, 74250, 50000, 1280, 720, 700, 30, 440, 40, 220, 5, 5, 20,
127 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1280X720P_50000, HDMI_VIDEO_PROGRESSIVE, "1280*720p50 16:9" },
128 { HDMI_1920X1080I50_16_9, 74250, 50000, 1920, 1080, 720, 24, 528, 44, 148, 2, 5, 15,
129 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080I_50000, HDMI_VIDEO_INTERLACE, "1920*1080i50 16:9" },
130 { HDMI_1440X576I50_4_3, 27000, 50000, 1440, 576, 288, 24, 24, 126, 138, 2, 3, 19,
131 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_1440X576I_50000, HDMI_VIDEO_INTERLACE, "1440*576i50 4:3" },
132 { HDMI_1440X576I50_16_9, 27000, 50000, 1440, 576, 288, 24, 24, 126, 138, 2, 3, 19,
133 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1440X576I_50000, HDMI_VIDEO_INTERLACE, "1440*576i50 16:9" },
134 { HDMI_1440X576P50_4_3, 54000, 50000, 1440, 576, 288, 49, 24, 128, 136, 5, 5, 39,
135 HDMI_PICTURE_ASPECT_4_3, HDMI_VIDEO_TIMING_1440X576P_50000, HDMI_VIDEO_PROGRESSIVE, "1440*576p50 4:3" },
136 { HDMI_1440X576P50_16_9, 54000, 50000, 1440, 576, 288, 49, 24, 128, 136, 5, 5, 39,
137 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1440X576P_50000, HDMI_VIDEO_PROGRESSIVE, "1440*576p50 16:9" },
138 { HDMI_1920X1080P50_16_9, 148500, 50000, 1920, 1080, 720, 45, 528, 44, 148, 4, 5, 36,
139 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080P_50000, HDMI_VIDEO_PROGRESSIVE, "1920*1080p50 16:9" },
140 { HDMI_1920X1080P24_16_9, 742500, 24000, 1920, 1080, 830, 45, 638, 44, 148, 4, 5, 36,
141 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080P_24000, HDMI_VIDEO_PROGRESSIVE, "1920*1080p24 16:9" },
142 { HDMI_1920X1080P25_16_9, 742500, 25000, 1920, 1080, 720, 45, 528, 44, 148, 4, 5, 36,
143 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080P_25000, HDMI_VIDEO_PROGRESSIVE, "1920*1080p25 16:9" },
144 { HDMI_1920X1080P30_16_9, 742500, 30000, 1920, 1080, 280, 45, 88, 44, 148, 4, 5, 36,
145 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_1920X1080P_30000, HDMI_VIDEO_PROGRESSIVE, "1920*1080p30 16:9" },
146 { HDMI_3840X2160P24_16_9, 297000, 24000, 3840, 2160, 1660, 90, 1276, 88, 296, 8, 10, 72,
147 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_3840X2160P_24000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p24 16:9" },
148 { HDMI_3840X2160P25_16_9, 297000, 25000, 3840, 2160, 1440, 90, 1056, 88, 296, 8, 10, 72,
149 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_3840X2160P_25000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p25 16:9" },
150 { HDMI_3840X2160P30_16_9, 297000, 30000, 3840, 2160, 560, 90, 176, 88, 296, 8, 10, 72,
151 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_3840X2160P_30000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p30 16:9" },
152 { HDMI_3840X2160P50_16_9, 594000, 50000, 3840, 2160, 1440, 90, 1056, 88, 296, 8, 10, 72,
153 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_3840X2160P_50000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p50 16:9" },
154 { HDMI_3840X2160P60_16_9, 594000, 60000, 3840, 2160, 560, 90, 176, 88, 296, 8, 10, 72,
155 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_3840X2160P_60000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p60 16:9" },
156 { HDMI_4096X2160P24_256_135, 297000, 24000, 4096, 2160, 1404, 90, 1020, 88, 296, 8, 10, 72,
157 HDMI_PICTURE_ASPECT_256_135, HDMI_VIDEO_TIMING_4096X2160P_24000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p24 256:135" },
158 { HDMI_4096X2160P25_256_135, 297000, 25000, 4096, 2160, 1184, 90, 968, 88, 128, 8, 10, 72,
159 HDMI_PICTURE_ASPECT_256_135, HDMI_VIDEO_TIMING_4096X2160P_25000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p25 256:135" },
160 { HDMI_4096X2160P30_256_135, 297000, 30000, 4096, 2160, 304, 90, 88, 88, 128, 8, 10, 72,
161 HDMI_PICTURE_ASPECT_256_135, HDMI_VIDEO_TIMING_4096X2160P_30000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p30 256:135" },
162 { HDMI_4096X2160P50_256_135, 594000, 50000, 4096, 2160, 1184, 90, 968, 88, 128, 8, 10, 72,
163 HDMI_PICTURE_ASPECT_256_135, HDMI_VIDEO_TIMING_4096X2160P_50000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p50 256:135" },
164 { HDMI_4096X2160P60_256_135, 594000, 60000, 4096, 2160, 304, 90, 88, 88, 128, 8, 10, 72,
165 HDMI_PICTURE_ASPECT_256_135, HDMI_VIDEO_TIMING_4096X2160P_60000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p60 256:135" },
166 { HDMI_3840X2160P120_16_9, 1188000, 120000, 3840, 2160, 560, 90, 176, 88, 296, 8, 10, 72,
167 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_3840X2160P_120000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p120 16:9" },
168 { HDMI_7680X4320P24_16_9, 1188000, 24000, 7680, 4320, 3320, 180, 2552, 176, 592, 16, 20, 144,
169 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_7680X4320P_24000, HDMI_VIDEO_PROGRESSIVE, "7680*4320p24 16:9" },
170 { HDMI_7680X4320P25_16_9, 1188000, 25000, 7680, 4320, 3120, 80, 2352, 176, 592, 16, 20, 44,
171 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_7680X4320P_25000, HDMI_VIDEO_PROGRESSIVE, "7680*4320p25 16:9" },
172 { HDMI_7680X4320P30_16_9, 1188000, 30000, 7680, 4320, 1320, 80, 552, 176, 592, 16, 20, 44,
173 HDMI_PICTURE_ASPECT_16_9, HDMI_VIDEO_TIMING_7680X4320P_30000, HDMI_VIDEO_PROGRESSIVE, "7680*4320p30 16:9" },
174 { HDMI_4096X2160P120_256_135, 1188000, 120000, 4096, 2160, 304, 90, 88, 88, 128, 8, 10, 72,
175 HDMI_PICTURE_ASPECT_256_135, HDMI_VIDEO_TIMING_4096X2160P_120000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p120 16:9" }
176 };
177
178 // 4k mode
179 hdmi_video_4k_def g_h14b_hdmi_video_codes_4k[CEA861_F_VIDEO_CODES_MAX_4K] = {
180 { 1, HDMI_3840X2160P30_16_9, 296703, 30, 3840, 2160, HDMI_PICTURE_ASPECT_16_9,
181 HDMI_VIDEO_TIMING_3840X2160P_30000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p30 16:9" },
182 { 2, HDMI_3840X2160P25_16_9, 297000, 25, 3840, 2160, HDMI_PICTURE_ASPECT_16_9,
183 HDMI_VIDEO_TIMING_3840X2160P_25000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p25 16:9" },
184 { 3, HDMI_3840X2160P24_16_9, 296703, 24, 3840, 2160, HDMI_PICTURE_ASPECT_16_9,
185 HDMI_VIDEO_TIMING_3840X2160P_24000, HDMI_VIDEO_PROGRESSIVE, "3840*2160p24 16:9" },
186 { 4, HDMI_4096X2160P24_256_135, 297000, 24, 4096, 2160, HDMI_PICTURE_ASPECT_256_135,
187 HDMI_VIDEO_TIMING_4096X2160P_24000, HDMI_VIDEO_PROGRESSIVE, "4096*2160p24 256:135" }
188 };
189
190 /* des: vic search */
drv_hdmi_vic_search(hdmi_video_timing timing,hdmi_picture_aspect aspect,hi_bool _3d_enable)191 hdmi_video_code_vic drv_hdmi_vic_search(hdmi_video_timing timing, hdmi_picture_aspect aspect, hi_bool _3d_enable)
192 {
193 hi_u32 i;
194 hdmi_video_def *video_id = &g_cea_video_codes_des[0];
195 hdmi_video_code_vic vic = 0;
196
197 for (i = 0; i < hdmi_array_size(g_cea_video_codes_des); i++, video_id++) {
198 if ((timing == video_id->timing) && (aspect == video_id->aspect_ratio)) {
199 vic = video_id->video_code;
200 break;
201 }
202 }
203
204 if (_3d_enable == HI_TRUE) {
205 /*
206 * VIC = 0 when the timing is HDMI_3840X2160P24_16_9, HDMI_3840X2160P25_16_9,
207 * HDMI_3840X2160P30_16_9, HDMI_4096X2160P24_256_135 at 2D mode
208 */
209 if (vic == HDMI_3840X2160P24_16_9 || vic == HDMI_3840X2160P25_16_9 ||
210 vic == HDMI_3840X2160P30_16_9 || vic == HDMI_4096X2160P24_256_135) {
211 hdmi_info("4k x 2k 2D vic:%u \n", vic);
212 vic = 0;
213 }
214 }
215
216 return vic;
217 }
218
drv_hdmi_vic_to_index(hi_u32 vic)219 hi_u32 drv_hdmi_vic_to_index(hi_u32 vic)
220 {
221 hi_u32 i;
222 hdmi_video_def *video_id = &g_cea_video_codes_des[0];
223
224 for (i = 0; i < hdmi_array_size(g_cea_video_codes_des); i++, video_id++) {
225 if (vic == video_id->video_code) {
226 break;
227 }
228 }
229
230 return i;
231 }
232
drv_hdmi_video_timing_get(hdmi_video_code_vic vic,hdmi_picture_aspect aspect)233 hdmi_video_timing drv_hdmi_video_timing_get(hdmi_video_code_vic vic, hdmi_picture_aspect aspect)
234 {
235 hi_u32 cnt;
236 hdmi_video_timing video_timing = HDMI_VIDEO_TIMING_UNKNOWN;
237
238 for (cnt = 0; cnt < hdmi_array_size(g_cea_video_codes_des); cnt++) {
239 if (g_cea_video_codes_des[cnt].video_code == vic &&
240 g_cea_video_codes_des[cnt].aspect_ratio == aspect) {
241 video_timing = g_cea_video_codes_des[cnt].timing;
242 break;
243 }
244 }
245
246 return video_timing;
247 }
248
drv_hdmi_vsif_video_timing_get(hdmi_vsif_vic vic)249 hdmi_video_timing drv_hdmi_vsif_video_timing_get(hdmi_vsif_vic vic)
250 {
251 hi_u32 cnt;
252 hdmi_video_timing video_timing = 0;
253
254 for (cnt = 0; cnt < hdmi_array_size(g_h14b_hdmi_video_codes_4k); cnt++) {
255 if (g_h14b_hdmi_video_codes_4k[cnt].hdmi_vic == vic) {
256 video_timing = g_h14b_hdmi_video_codes_4k[cnt].timing;
257 break;
258 }
259 }
260
261 return video_timing;
262 }
263
drv_hdmi_video_codes_4k_get(hi_u32 vic)264 hdmi_video_4k_def *drv_hdmi_video_codes_4k_get(hi_u32 vic)
265 {
266 hi_u32 i;
267 hdmi_video_4k_def *tmp_fmt = HI_NULL;
268
269 for (i = 0, tmp_fmt = &g_h14b_hdmi_video_codes_4k[0];
270 i < hdmi_array_size(g_h14b_hdmi_video_codes_4k);
271 i++, tmp_fmt++) {
272 if (tmp_fmt->hdmi_vic == vic) {
273 return tmp_fmt;
274 }
275 }
276 hdmi_warn("not support vic=%u\n", vic);
277 return HI_NULL;
278 }
279
drv_hdmi_comm_format_param_get(hdmi_video_code_vic vic)280 hdmi_video_def *drv_hdmi_comm_format_param_get(hdmi_video_code_vic vic)
281 {
282 hi_u32 i;
283 hdmi_video_def *tmp_fmt = HI_NULL;
284
285 for (i = 0, tmp_fmt = &g_cea_video_codes_des[0];
286 i < hdmi_array_size(g_cea_video_codes_des);
287 i++, tmp_fmt++) {
288 if (tmp_fmt->video_code == vic) {
289 return tmp_fmt;
290 }
291 }
292 hdmi_warn("not support vic=%u\n", vic);
293 return HI_NULL;
294 }
295
296 #ifdef HDMI_FRL_SUPPORT
drv_hdmi_vesa_format_param_get(hdmi_video_timing timing)297 hdmi_video_def *drv_hdmi_vesa_format_param_get(hdmi_video_timing timing)
298 {
299 hi_u32 i;
300 hdmi_video_def *tmp_fmt = HI_NULL;
301
302 for (i = 0, tmp_fmt = &g_vesa_video_codes_des[0];
303 i < hdmi_array_size(g_vesa_video_codes_des);
304 i++, tmp_fmt++) {
305 if (tmp_fmt->timing == timing) {
306 return tmp_fmt;
307 }
308 }
309 hdmi_warn("not support vic=%u\n", timing);
310
311 return HI_NULL;
312 }
313 #endif
314
hdmi_reg_write(volatile hi_void * reg_addr,hi_u32 value)315 hi_void hdmi_reg_write(volatile hi_void *reg_addr, hi_u32 value)
316 {
317 if (reg_addr != HI_NULL) {
318 *(volatile hi_u32 *)reg_addr = value;
319 }
320 }
321
hdmi_reg_read(volatile hi_void * reg_addr)322 hi_u32 hdmi_reg_read(volatile hi_void *reg_addr)
323 {
324 if (reg_addr == HI_NULL) {
325 return 0;
326 }
327 return *(volatile hi_u32 *)reg_addr;
328 }
329
drv_hdmi_milli_delay(hi_u32 m_sec)330 hi_void drv_hdmi_milli_delay(hi_u32 m_sec)
331 {
332 osal_msleep(m_sec);
333 }
334
335