1#ifndef _UAPI_MSM_HDMI_MODES_H__
2#define _UAPI_MSM_HDMI_MODES_H__
3#include <linux/types.h>
4#include <linux/errno.h>
5
6#define MSM_HDMI_RGB_888_24BPP_FORMAT       BIT(0)
7#define MSM_HDMI_YUV_420_12BPP_FORMAT       BIT(1)
8
9enum aspect_ratio {
10	HDMI_RES_AR_INVALID,
11	HDMI_RES_AR_4_3,
12	HDMI_RES_AR_5_4,
13	HDMI_RES_AR_16_9,
14	HDMI_RES_AR_16_10,
15	HDMI_RES_AR_64_27,
16	HDMI_RES_AR_256_135,
17	HDMI_RES_AR_MAX,
18};
19
20enum msm_hdmi_s3d_mode {
21	HDMI_S3D_NONE,
22	HDMI_S3D_SIDE_BY_SIDE,
23	HDMI_S3D_TOP_AND_BOTTOM,
24	HDMI_S3D_FRAME_PACKING,
25	HDMI_S3D_MAX,
26};
27
28struct msm_hdmi_mode_timing_info {
29	uint32_t	video_format;
30	uint32_t	active_h;
31	uint32_t	front_porch_h;
32	uint32_t	pulse_width_h;
33	uint32_t	back_porch_h;
34	uint32_t	active_low_h;
35	uint32_t	active_v;
36	uint32_t	front_porch_v;
37	uint32_t	pulse_width_v;
38	uint32_t	back_porch_v;
39	uint32_t	active_low_v;
40	/* Must divide by 1000 to get the actual frequency in MHZ */
41	uint32_t	pixel_freq;
42	/* Must divide by 1000 to get the actual frequency in HZ */
43	uint32_t	refresh_rate;
44	uint32_t	interlaced;
45	uint32_t	supported;
46	enum aspect_ratio ar;
47	/* Flags indicating support for specific pixel formats */
48	uint32_t        pixel_formats;
49};
50
51#define MSM_HDMI_INIT_RES_PAGE          1
52
53#define MSM_HDMI_MODES_CEA		(1 << 0)
54#define MSM_HDMI_MODES_XTND		(1 << 1)
55#define MSM_HDMI_MODES_DVI		(1 << 2)
56#define MSM_HDMI_MODES_ALL		(MSM_HDMI_MODES_CEA |\
57					 MSM_HDMI_MODES_XTND |\
58					 MSM_HDMI_MODES_DVI)
59
60/* all video formats defined by CEA 861D */
61#define HDMI_VFRMT_UNKNOWN		0
62#define HDMI_VFRMT_640x480p60_4_3	1
63#define HDMI_VFRMT_720x480p60_4_3	2
64#define HDMI_VFRMT_720x480p60_16_9	3
65#define HDMI_VFRMT_1280x720p60_16_9	4
66#define HDMI_VFRMT_1920x1080i60_16_9	5
67#define HDMI_VFRMT_720x480i60_4_3	6
68#define HDMI_VFRMT_1440x480i60_4_3	HDMI_VFRMT_720x480i60_4_3
69#define HDMI_VFRMT_720x480i60_16_9	7
70#define HDMI_VFRMT_1440x480i60_16_9	HDMI_VFRMT_720x480i60_16_9
71#define HDMI_VFRMT_720x240p60_4_3	8
72#define HDMI_VFRMT_1440x240p60_4_3	HDMI_VFRMT_720x240p60_4_3
73#define HDMI_VFRMT_720x240p60_16_9	9
74#define HDMI_VFRMT_1440x240p60_16_9	HDMI_VFRMT_720x240p60_16_9
75#define HDMI_VFRMT_2880x480i60_4_3	10
76#define HDMI_VFRMT_2880x480i60_16_9	11
77#define HDMI_VFRMT_2880x240p60_4_3	12
78#define HDMI_VFRMT_2880x240p60_16_9	13
79#define HDMI_VFRMT_1440x480p60_4_3	14
80#define HDMI_VFRMT_1440x480p60_16_9	15
81#define HDMI_VFRMT_1920x1080p60_16_9	16
82#define HDMI_VFRMT_720x576p50_4_3	17
83#define HDMI_VFRMT_720x576p50_16_9	18
84#define HDMI_VFRMT_1280x720p50_16_9	19
85#define HDMI_VFRMT_1920x1080i50_16_9	20
86#define HDMI_VFRMT_720x576i50_4_3	21
87#define HDMI_VFRMT_1440x576i50_4_3	HDMI_VFRMT_720x576i50_4_3
88#define HDMI_VFRMT_720x576i50_16_9	22
89#define HDMI_VFRMT_1440x576i50_16_9	HDMI_VFRMT_720x576i50_16_9
90#define HDMI_VFRMT_720x288p50_4_3	23
91#define HDMI_VFRMT_1440x288p50_4_3	HDMI_VFRMT_720x288p50_4_3
92#define HDMI_VFRMT_720x288p50_16_9	24
93#define HDMI_VFRMT_1440x288p50_16_9	HDMI_VFRMT_720x288p50_16_9
94#define HDMI_VFRMT_2880x576i50_4_3	25
95#define HDMI_VFRMT_2880x576i50_16_9	26
96#define HDMI_VFRMT_2880x288p50_4_3	27
97#define HDMI_VFRMT_2880x288p50_16_9	28
98#define HDMI_VFRMT_1440x576p50_4_3	29
99#define HDMI_VFRMT_1440x576p50_16_9	30
100#define HDMI_VFRMT_1920x1080p50_16_9	31
101#define HDMI_VFRMT_1920x1080p24_16_9	32
102#define HDMI_VFRMT_1920x1080p25_16_9	33
103#define HDMI_VFRMT_1920x1080p30_16_9	34
104#define HDMI_VFRMT_2880x480p60_4_3	35
105#define HDMI_VFRMT_2880x480p60_16_9	36
106#define HDMI_VFRMT_2880x576p50_4_3	37
107#define HDMI_VFRMT_2880x576p50_16_9	38
108#define HDMI_VFRMT_1920x1250i50_16_9	39
109#define HDMI_VFRMT_1920x1080i100_16_9	40
110#define HDMI_VFRMT_1280x720p100_16_9	41
111#define HDMI_VFRMT_720x576p100_4_3	42
112#define HDMI_VFRMT_720x576p100_16_9	43
113#define HDMI_VFRMT_720x576i100_4_3	44
114#define HDMI_VFRMT_1440x576i100_4_3	HDMI_VFRMT_720x576i100_4_3
115#define HDMI_VFRMT_720x576i100_16_9	45
116#define HDMI_VFRMT_1440x576i100_16_9	HDMI_VFRMT_720x576i100_16_9
117#define HDMI_VFRMT_1920x1080i120_16_9	46
118#define HDMI_VFRMT_1280x720p120_16_9	47
119#define HDMI_VFRMT_720x480p120_4_3	48
120#define HDMI_VFRMT_720x480p120_16_9	49
121#define HDMI_VFRMT_720x480i120_4_3	50
122#define HDMI_VFRMT_1440x480i120_4_3	HDMI_VFRMT_720x480i120_4_3
123#define HDMI_VFRMT_720x480i120_16_9	51
124#define HDMI_VFRMT_1440x480i120_16_9	HDMI_VFRMT_720x480i120_16_9
125#define HDMI_VFRMT_720x576p200_4_3	52
126#define HDMI_VFRMT_720x576p200_16_9	53
127#define HDMI_VFRMT_720x576i200_4_3	54
128#define HDMI_VFRMT_1440x576i200_4_3	HDMI_VFRMT_720x576i200_4_3
129#define HDMI_VFRMT_720x576i200_16_9	55
130#define HDMI_VFRMT_1440x576i200_16_9	HDMI_VFRMT_720x576i200_16_9
131#define HDMI_VFRMT_720x480p240_4_3	56
132#define HDMI_VFRMT_720x480p240_16_9	57
133#define HDMI_VFRMT_720x480i240_4_3	58
134#define HDMI_VFRMT_1440x480i240_4_3	HDMI_VFRMT_720x480i240_4_3
135#define HDMI_VFRMT_720x480i240_16_9	59
136#define HDMI_VFRMT_1440x480i240_16_9	HDMI_VFRMT_720x480i240_16_9
137#define HDMI_VFRMT_1280x720p24_16_9	60
138#define HDMI_VFRMT_1280x720p25_16_9	61
139#define HDMI_VFRMT_1280x720p30_16_9	62
140#define HDMI_VFRMT_1920x1080p120_16_9	63
141#define HDMI_VFRMT_1920x1080p100_16_9	64
142#define HDMI_VFRMT_1280x720p24_64_27    65
143#define HDMI_VFRMT_1280x720p25_64_27    66
144#define HDMI_VFRMT_1280x720p30_64_27    67
145#define HDMI_VFRMT_1280x720p50_64_27    68
146#define HDMI_VFRMT_1280x720p60_64_27    69
147#define HDMI_VFRMT_1280x720p100_64_27   70
148#define HDMI_VFRMT_1280x720p120_64_27   71
149#define HDMI_VFRMT_1920x1080p24_64_27   72
150#define HDMI_VFRMT_1920x1080p25_64_27   73
151#define HDMI_VFRMT_1920x1080p30_64_27   74
152#define HDMI_VFRMT_1920x1080p50_64_27   75
153#define HDMI_VFRMT_1920x1080p60_64_27   76
154#define HDMI_VFRMT_1920x1080p100_64_27  77
155#define HDMI_VFRMT_1920x1080p120_64_27  78
156#define HDMI_VFRMT_1680x720p24_64_27    79
157#define HDMI_VFRMT_1680x720p25_64_27    80
158#define HDMI_VFRMT_1680x720p30_64_27    81
159#define HDMI_VFRMT_1680x720p50_64_27    82
160#define HDMI_VFRMT_1680x720p60_64_27    83
161#define HDMI_VFRMT_1680x720p100_64_27   84
162#define HDMI_VFRMT_1680x720p120_64_27   85
163#define HDMI_VFRMT_2560x1080p24_64_27   86
164#define HDMI_VFRMT_2560x1080p25_64_27   87
165#define HDMI_VFRMT_2560x1080p30_64_27   88
166#define HDMI_VFRMT_2560x1080p50_64_27   89
167#define HDMI_VFRMT_2560x1080p60_64_27   90
168#define HDMI_VFRMT_2560x1080p100_64_27  91
169#define HDMI_VFRMT_2560x1080p120_64_27  92
170#define HDMI_VFRMT_3840x2160p24_16_9    93
171#define HDMI_VFRMT_3840x2160p25_16_9    94
172#define HDMI_VFRMT_3840x2160p30_16_9    95
173#define HDMI_VFRMT_3840x2160p50_16_9    96
174#define HDMI_VFRMT_3840x2160p60_16_9    97
175#define HDMI_VFRMT_4096x2160p24_256_135 98
176#define HDMI_VFRMT_4096x2160p25_256_135 99
177#define HDMI_VFRMT_4096x2160p30_256_135 100
178#define HDMI_VFRMT_4096x2160p50_256_135 101
179#define HDMI_VFRMT_4096x2160p60_256_135 102
180#define HDMI_VFRMT_3840x2160p24_64_27   103
181#define HDMI_VFRMT_3840x2160p25_64_27   104
182#define HDMI_VFRMT_3840x2160p30_64_27   105
183#define HDMI_VFRMT_3840x2160p50_64_27   106
184#define HDMI_VFRMT_3840x2160p60_64_27   107
185
186/* Video Identification Codes from 107-127 are reserved for the future */
187#define HDMI_VFRMT_END			127
188
189#define EVFRMT_OFF(x)			(HDMI_VFRMT_END + x)
190
191/* extended video formats */
192#define HDMI_EVFRMT_3840x2160p30_16_9	EVFRMT_OFF(1)
193#define HDMI_EVFRMT_3840x2160p25_16_9	EVFRMT_OFF(2)
194#define HDMI_EVFRMT_3840x2160p24_16_9	EVFRMT_OFF(3)
195#define HDMI_EVFRMT_4096x2160p24_16_9	EVFRMT_OFF(4)
196#define HDMI_EVFRMT_END			HDMI_EVFRMT_4096x2160p24_16_9
197
198#define WQXGA_OFF(x)			(HDMI_EVFRMT_END + x)
199
200/* WQXGA */
201#define HDMI_VFRMT_2560x1600p60_16_9	WQXGA_OFF(1)
202#define HDMI_WQXGAFRMT_END		HDMI_VFRMT_2560x1600p60_16_9
203
204#define WXGA_OFF(x)			(HDMI_WQXGAFRMT_END + x)
205
206/* WXGA */
207#define HDMI_VFRMT_1280x800p60_16_10	WXGA_OFF(1)
208#define HDMI_VFRMT_1366x768p60_16_10	WXGA_OFF(2)
209#define HDMI_WXGAFRMT_END		HDMI_VFRMT_1366x768p60_16_10
210
211#define ETI_OFF(x)			(HDMI_WXGAFRMT_END + x)
212
213/* ESTABLISHED TIMINGS I */
214#define HDMI_VFRMT_800x600p60_4_3	ETI_OFF(1)
215#define ETI_VFRMT_END			HDMI_VFRMT_800x600p60_4_3
216
217#define ETII_OFF(x)			(ETI_VFRMT_END + x)
218
219/* ESTABLISHED TIMINGS II */
220#define HDMI_VFRMT_1024x768p60_4_3	ETII_OFF(1)
221#define HDMI_VFRMT_1280x1024p60_5_4	ETII_OFF(2)
222#define ETII_VFRMT_END			HDMI_VFRMT_1280x1024p60_5_4
223
224#define ETIII_OFF(x)			(ETII_VFRMT_END + x)
225
226/* ESTABLISHED TIMINGS III */
227#define HDMI_VFRMT_848x480p60_16_9	ETIII_OFF(1)
228#define HDMI_VFRMT_1280x960p60_4_3	ETIII_OFF(2)
229#define HDMI_VFRMT_1360x768p60_16_9	ETIII_OFF(3)
230#define HDMI_VFRMT_1440x900p60_16_10	ETIII_OFF(4)
231#define HDMI_VFRMT_1400x1050p60_4_3	ETIII_OFF(5)
232#define HDMI_VFRMT_1680x1050p60_16_10	ETIII_OFF(6)
233#define HDMI_VFRMT_1600x1200p60_4_3	ETIII_OFF(7)
234#define HDMI_VFRMT_1920x1200p60_16_10	ETIII_OFF(8)
235#define ETIII_VFRMT_END			HDMI_VFRMT_1920x1200p60_16_10
236
237#define RESERVE_OFF(x)			(ETIII_VFRMT_END + x)
238
239#define HDMI_VFRMT_RESERVE1		RESERVE_OFF(1)
240#define HDMI_VFRMT_RESERVE2		RESERVE_OFF(2)
241#define HDMI_VFRMT_RESERVE3		RESERVE_OFF(3)
242#define HDMI_VFRMT_RESERVE4		RESERVE_OFF(4)
243#define HDMI_VFRMT_RESERVE5		RESERVE_OFF(5)
244#define HDMI_VFRMT_RESERVE6		RESERVE_OFF(6)
245#define HDMI_VFRMT_RESERVE7		RESERVE_OFF(7)
246#define HDMI_VFRMT_RESERVE8		RESERVE_OFF(8)
247#define RESERVE_VFRMT_END		HDMI_VFRMT_RESERVE8
248
249#define HDMI_VFRMT_MAX			(RESERVE_VFRMT_END + 1)
250
251/* Timing information for supported modes */
252#define VFRMT_NOT_SUPPORTED(VFRMT) \
253	{VFRMT, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false,		\
254		HDMI_RES_AR_INVALID}
255
256#define HDMI_VFRMT_640x480p60_4_3_TIMING				\
257	{HDMI_VFRMT_640x480p60_4_3, 640, 16, 96, 48, true,		\
258	 480, 10, 2, 33, true, 25200, 60000, false, true, HDMI_RES_AR_4_3, 0}
259#define HDMI_VFRMT_720x480p60_4_3_TIMING				\
260	{HDMI_VFRMT_720x480p60_4_3, 720, 16, 62, 60, true,		\
261	 480, 9, 6, 30, true, 27027, 60000, false, true, HDMI_RES_AR_4_3, 0}
262#define HDMI_VFRMT_720x480p60_16_9_TIMING				\
263	{HDMI_VFRMT_720x480p60_16_9, 720, 16, 62, 60, true,		\
264	 480, 9, 6, 30, true, 27027, 60000, false, true, HDMI_RES_AR_16_9, 0}
265#define HDMI_VFRMT_1280x720p60_16_9_TIMING				\
266	{HDMI_VFRMT_1280x720p60_16_9, 1280, 110, 40, 220, false,	\
267	 720, 5, 5, 20, false, 74250, 60000, false, true, HDMI_RES_AR_16_9, 0}
268#define HDMI_VFRMT_1920x1080i60_16_9_TIMING				\
269	{HDMI_VFRMT_1920x1080i60_16_9, 1920, 88, 44, 148, false,	\
270	 540, 2, 5, 5, false, 74250, 60000, false, true, HDMI_RES_AR_16_9, 0}
271#define HDMI_VFRMT_1440x480i60_4_3_TIMING				\
272	{HDMI_VFRMT_1440x480i60_4_3, 1440, 38, 124, 114, true,		\
273	 240, 4, 3, 15, true, 27000, 60000, true, true, HDMI_RES_AR_4_3, 0}
274#define HDMI_VFRMT_1440x480i60_16_9_TIMING				\
275	{HDMI_VFRMT_1440x480i60_16_9, 1440, 38, 124, 114, true,		\
276	 240, 4, 3, 15, true, 27000, 60000, true, true, HDMI_RES_AR_16_9, 0}
277#define HDMI_VFRMT_1920x1080p60_16_9_TIMING				\
278	{HDMI_VFRMT_1920x1080p60_16_9, 1920, 88, 44, 148, false,	\
279	 1080, 4, 5, 36, false, 148500, 60000, false, true, HDMI_RES_AR_16_9, 0}
280#define HDMI_VFRMT_720x576p50_4_3_TIMING				\
281	{HDMI_VFRMT_720x576p50_4_3, 720, 12, 64, 68, true,		\
282	 576,  5, 5, 39, true, 27000, 50000, false, true, HDMI_RES_AR_4_3, 0}
283#define HDMI_VFRMT_720x576p50_16_9_TIMING				\
284	{HDMI_VFRMT_720x576p50_16_9, 720, 12, 64, 68, true,		\
285	 576,  5, 5, 39, true, 27000, 50000, false, true, HDMI_RES_AR_16_9, 0}
286#define HDMI_VFRMT_1280x720p50_16_9_TIMING				\
287	{HDMI_VFRMT_1280x720p50_16_9, 1280, 440, 40, 220, false,	\
288	 720,  5, 5, 20, false, 74250, 50000, false, true, HDMI_RES_AR_16_9, 0}
289#define HDMI_VFRMT_1440x576i50_4_3_TIMING				\
290	{HDMI_VFRMT_1440x576i50_4_3, 1440, 24, 126, 138, true,		\
291	 288,  2, 3, 19, true, 27000, 50000, true, true, HDMI_RES_AR_4_3, 0}
292#define HDMI_VFRMT_1440x576i50_16_9_TIMING				\
293	{HDMI_VFRMT_1440x576i50_16_9, 1440, 24, 126, 138, true,		\
294	 288,  2, 3, 19, true, 27000, 50000, true, true, HDMI_RES_AR_16_9, 0}
295#define HDMI_VFRMT_1920x1080p50_16_9_TIMING				\
296	{HDMI_VFRMT_1920x1080p50_16_9, 1920, 528, 44, 148, false,	\
297	 1080, 4, 5, 36, false, 148500, 50000, false, true, HDMI_RES_AR_16_9, 0}
298#define HDMI_VFRMT_1920x1080p24_16_9_TIMING				\
299	{HDMI_VFRMT_1920x1080p24_16_9, 1920, 638, 44, 148, false,	\
300	 1080, 4, 5, 36, false, 74250, 24000, false, true, HDMI_RES_AR_16_9, 0}
301#define HDMI_VFRMT_1920x1080p25_16_9_TIMING				\
302	{HDMI_VFRMT_1920x1080p25_16_9, 1920, 528, 44, 148, false,	\
303	 1080, 4, 5, 36, false, 74250, 25000, false, true, HDMI_RES_AR_16_9, 0}
304#define HDMI_VFRMT_1920x1080p30_16_9_TIMING				\
305	{HDMI_VFRMT_1920x1080p30_16_9, 1920, 88, 44, 148, false,	\
306	 1080, 4, 5, 36, false, 74250, 30000, false, true, HDMI_RES_AR_16_9, 0}
307#define HDMI_VFRMT_1024x768p60_4_3_TIMING                               \
308	{HDMI_VFRMT_1024x768p60_4_3, 1024, 24, 136, 160, false,         \
309	768, 2, 6, 29, false, 65000, 60000, false, true, HDMI_RES_AR_4_3, 0}
310#define HDMI_VFRMT_1280x1024p60_5_4_TIMING				\
311	{HDMI_VFRMT_1280x1024p60_5_4, 1280, 48, 112, 248, false,	\
312	1024, 1, 3, 38, false, 108000, 60000, false, true, HDMI_RES_AR_5_4, 0}
313#define HDMI_VFRMT_2560x1600p60_16_9_TIMING				\
314	{HDMI_VFRMT_2560x1600p60_16_9, 2560, 48, 32, 80, false,		\
315	 1600, 3, 6, 37, false, 268500, 60000, false, true, HDMI_RES_AR_16_9, 0}
316#define HDMI_EVFRMT_3840x2160p30_16_9_TIMING				\
317	{HDMI_EVFRMT_3840x2160p30_16_9, 3840, 176, 88, 296, false,	\
318	 2160, 8, 10, 72, false, 297000, 30000, false, true, \
319		HDMI_RES_AR_16_9, 0}
320#define HDMI_EVFRMT_3840x2160p25_16_9_TIMING				\
321	{HDMI_EVFRMT_3840x2160p25_16_9, 3840, 1056, 88, 296, false,	\
322	 2160, 8, 10, 72, false, 297000, 25000, false, true, \
323		HDMI_RES_AR_16_9, 0}
324#define HDMI_EVFRMT_3840x2160p24_16_9_TIMING				\
325	{HDMI_EVFRMT_3840x2160p24_16_9, 3840, 1276, 88, 296, false,	\
326	 2160, 8, 10, 72, false, 297000, 24000, false, true, \
327		HDMI_RES_AR_16_9, 0}
328#define HDMI_EVFRMT_4096x2160p24_16_9_TIMING				\
329	{HDMI_EVFRMT_4096x2160p24_16_9, 4096, 1020, 88, 296, false,	\
330	 2160, 8, 10, 72, false, 297000, 24000, false, true, \
331		HDMI_RES_AR_16_9, 0}
332
333#define HDMI_VFRMT_800x600p60_4_3_TIMING				\
334	{HDMI_VFRMT_800x600p60_4_3, 800, 40, 128, 88, false,	\
335	 600, 1, 4, 23, false, 40000, 60000, false, true, HDMI_RES_AR_4_3, 0}
336#define HDMI_VFRMT_848x480p60_16_9_TIMING				\
337	{HDMI_VFRMT_848x480p60_16_9, 848, 16, 112, 112, false,	\
338	 480, 6, 8, 23, false, 33750, 60000, false, true, HDMI_RES_AR_16_9, 0}
339#define HDMI_VFRMT_1280x960p60_4_3_TIMING\
340	{HDMI_VFRMT_1280x960p60_4_3, 1280, 96, 112, 312, false,	\
341	 960, 1, 3, 36, false, 108000, 60000, false, true, HDMI_RES_AR_4_3, 0}
342#define HDMI_VFRMT_1360x768p60_16_9_TIMING\
343	{HDMI_VFRMT_1360x768p60_16_9, 1360, 64, 112, 256, false,	\
344	 768, 3, 6, 18, false, 85500, 60000, false, true, HDMI_RES_AR_16_9, 0}
345#define HDMI_VFRMT_1440x900p60_16_10_TIMING\
346	{HDMI_VFRMT_1440x900p60_16_10, 1440, 48, 32, 80, false,	\
347	 900, 3, 6, 17, true, 88750, 60000, false, true, HDMI_RES_AR_16_10, 0}
348#define HDMI_VFRMT_1400x1050p60_4_3_TIMING\
349	{HDMI_VFRMT_1400x1050p60_4_3, 1400, 48, 32, 80, false,	\
350	 1050, 3, 4, 23, true, 101000, 60000, false, true, HDMI_RES_AR_4_3, 0}
351#define HDMI_VFRMT_1680x1050p60_16_10_TIMING\
352	{HDMI_VFRMT_1680x1050p60_16_10, 1680, 48, 32, 80, false,	\
353	 1050, 3, 6, 21, true, 119000, 60000, false, true, HDMI_RES_AR_16_10, 0}
354#define HDMI_VFRMT_1600x1200p60_4_3_TIMING\
355	{HDMI_VFRMT_1600x1200p60_4_3, 1600, 64, 192, 304, false,	\
356	 1200, 1, 3, 46, false, 162000, 60000, false, true, HDMI_RES_AR_4_3, 0}
357#define HDMI_VFRMT_1920x1200p60_16_10_TIMING\
358	{HDMI_VFRMT_1920x1200p60_16_10, 1920, 48, 32, 80, false,\
359	 1200, 3, 6, 26, true, 154000, 60000, false, true, HDMI_RES_AR_16_10, 0}
360#define HDMI_VFRMT_1366x768p60_16_10_TIMING\
361	{HDMI_VFRMT_1366x768p60_16_10, 1366, 70, 143, 213, false,\
362	 768, 3, 3, 24, false, 85500, 60000, false, true, HDMI_RES_AR_16_10, 0}
363#define HDMI_VFRMT_1280x800p60_16_10_TIMING\
364	{HDMI_VFRMT_1280x800p60_16_10, 1280, 72, 128, 200, true,\
365	 800, 3, 6, 22, false, 83500, 60000, false, true, HDMI_RES_AR_16_10, 0}
366#define HDMI_VFRMT_3840x2160p24_16_9_TIMING                             \
367	{HDMI_VFRMT_3840x2160p24_16_9, 3840, 1276, 88, 296, false,      \
368	 2160, 8, 10, 72, false, 297000, 24000, false, true, \
369		HDMI_RES_AR_16_9, 0}
370#define HDMI_VFRMT_3840x2160p25_16_9_TIMING                             \
371	{HDMI_VFRMT_3840x2160p25_16_9, 3840, 1056, 88, 296, false,      \
372	 2160, 8, 10, 72, false, 297000, 25000, false, true, \
373		HDMI_RES_AR_16_9, 0}
374#define HDMI_VFRMT_3840x2160p30_16_9_TIMING                             \
375	{HDMI_VFRMT_3840x2160p30_16_9, 3840, 176, 88, 296, false,       \
376	 2160, 8, 10, 72, false, 297000, 30000, false, true, \
377		HDMI_RES_AR_16_9, 0}
378#define HDMI_VFRMT_3840x2160p50_16_9_TIMING                             \
379	{HDMI_VFRMT_3840x2160p50_16_9, 3840, 1056, 88, 296, false,      \
380	 2160, 8, 10, 72, false, 594000, 50000, false, true, \
381		HDMI_RES_AR_16_9, 0}
382#define HDMI_VFRMT_3840x2160p60_16_9_TIMING                             \
383	{HDMI_VFRMT_3840x2160p60_16_9, 3840, 176, 88, 296, false,       \
384	 2160, 8, 10, 72, false, 594000, 60000, false, true, \
385		HDMI_RES_AR_16_9, 0}
386
387#define HDMI_VFRMT_4096x2160p24_256_135_TIMING                          \
388	{HDMI_VFRMT_4096x2160p24_256_135, 4096, 1020, 88, 296, false,   \
389	 2160, 8, 10, 72, false, 297000, 24000, false, true, \
390		HDMI_RES_AR_256_135, 0}
391#define HDMI_VFRMT_4096x2160p25_256_135_TIMING                          \
392	{HDMI_VFRMT_4096x2160p25_256_135, 4096, 968, 88, 128, false,    \
393	 2160, 8, 10, 72, false, 297000, 25000, false, true, \
394		HDMI_RES_AR_256_135, 0}
395#define HDMI_VFRMT_4096x2160p30_256_135_TIMING                          \
396	{HDMI_VFRMT_4096x2160p30_256_135, 4096, 88, 88, 128, false,     \
397	 2160, 8, 10, 72, false, 297000, 30000, false, true, \
398		HDMI_RES_AR_256_135, 0}
399#define HDMI_VFRMT_4096x2160p50_256_135_TIMING                          \
400	{HDMI_VFRMT_4096x2160p50_256_135, 4096, 968, 88, 128, false,    \
401	 2160, 8, 10, 72, false, 594000, 50000, false, true, \
402		HDMI_RES_AR_256_135, 0}
403#define HDMI_VFRMT_4096x2160p60_256_135_TIMING                          \
404	{HDMI_VFRMT_4096x2160p60_256_135, 4096, 88, 88, 128, false,     \
405	 2160, 8, 10, 72, false, 594000, 60000, false, true, \
406		HDMI_RES_AR_256_135, 0}
407
408#define HDMI_VFRMT_3840x2160p24_64_27_TIMING                             \
409	{HDMI_VFRMT_3840x2160p24_64_27, 3840, 1276, 88, 296, false,      \
410	 2160, 8, 10, 72, false, 297000, 24000, false, true, \
411		HDMI_RES_AR_64_27, 0}
412#define HDMI_VFRMT_3840x2160p25_64_27_TIMING                             \
413	{HDMI_VFRMT_3840x2160p25_64_27, 3840, 1056, 88, 296, false,      \
414	 2160, 8, 10, 72, false, 297000, 25000, false, true, \
415		HDMI_RES_AR_64_27, 0}
416#define HDMI_VFRMT_3840x2160p30_64_27_TIMING                             \
417	{HDMI_VFRMT_3840x2160p30_64_27, 3840, 176, 88, 296, false,       \
418	 2160, 8, 10, 72, false, 297000, 30000, false, true, \
419		HDMI_RES_AR_64_27, 0}
420#define HDMI_VFRMT_3840x2160p50_64_27_TIMING                             \
421	{HDMI_VFRMT_3840x2160p50_64_27, 3840, 1056, 88, 296, false,      \
422	 2160, 8, 10, 72, false, 594000, 50000, false, true, \
423		HDMI_RES_AR_64_27, 0}
424#define HDMI_VFRMT_3840x2160p60_64_27_TIMING                             \
425	{HDMI_VFRMT_3840x2160p60_64_27, 3840, 176, 88, 296, false,       \
426	 2160, 8, 10, 72, false, 594000, 60000, false, true, \
427		HDMI_RES_AR_64_27, 0}
428
429#define MSM_HDMI_MODES_SET_TIMING(LUT, MODE) do {		\
430	struct msm_hdmi_mode_timing_info mode = MODE##_TIMING;	\
431	LUT[MODE] = mode;\
432	} while (0)
433
434#define MSM_HDMI_MODES_INIT_TIMINGS(__lut)	\
435do {	\
436	unsigned int i;	\
437	for (i = 0; i < HDMI_VFRMT_MAX; i++) {	\
438		struct msm_hdmi_mode_timing_info mode =	\
439			VFRMT_NOT_SUPPORTED(i);	\
440		(__lut)[i] = mode;	\
441	}	\
442} while (0)
443
444#define MSM_HDMI_MODES_SET_SUPP_TIMINGS(__lut, __type)	\
445do {	\
446	if (__type & MSM_HDMI_MODES_CEA) {	\
447		MSM_HDMI_MODES_SET_TIMING(__lut,	\
448			HDMI_VFRMT_640x480p60_4_3);	\
449		MSM_HDMI_MODES_SET_TIMING(__lut,	\
450			HDMI_VFRMT_720x480p60_4_3);	\
451		MSM_HDMI_MODES_SET_TIMING(__lut,	\
452			HDMI_VFRMT_720x480p60_16_9);	\
453		MSM_HDMI_MODES_SET_TIMING(__lut,	\
454			HDMI_VFRMT_1280x720p60_16_9);	\
455		MSM_HDMI_MODES_SET_TIMING(__lut,	\
456			HDMI_VFRMT_1920x1080i60_16_9);	\
457		MSM_HDMI_MODES_SET_TIMING(__lut,	\
458			HDMI_VFRMT_1440x480i60_4_3);	\
459		MSM_HDMI_MODES_SET_TIMING(__lut,	\
460			HDMI_VFRMT_1440x480i60_16_9);	\
461		MSM_HDMI_MODES_SET_TIMING(__lut,	\
462			HDMI_VFRMT_1920x1080p60_16_9);	\
463		MSM_HDMI_MODES_SET_TIMING(__lut,	\
464			HDMI_VFRMT_720x576p50_4_3);	\
465		MSM_HDMI_MODES_SET_TIMING(__lut,	\
466			HDMI_VFRMT_720x576p50_16_9);	\
467		MSM_HDMI_MODES_SET_TIMING(__lut,	\
468			HDMI_VFRMT_1280x720p50_16_9);	\
469		MSM_HDMI_MODES_SET_TIMING(__lut,	\
470			HDMI_VFRMT_1440x576i50_4_3);	\
471		MSM_HDMI_MODES_SET_TIMING(__lut,	\
472			HDMI_VFRMT_1440x576i50_16_9);	\
473		MSM_HDMI_MODES_SET_TIMING(__lut,	\
474			HDMI_VFRMT_1920x1080p50_16_9);	\
475		MSM_HDMI_MODES_SET_TIMING(__lut,	\
476			HDMI_VFRMT_1920x1080p24_16_9);	\
477		MSM_HDMI_MODES_SET_TIMING(__lut,	\
478			HDMI_VFRMT_1920x1080p25_16_9);	\
479		MSM_HDMI_MODES_SET_TIMING(__lut,	\
480			HDMI_VFRMT_1920x1080p30_16_9);	\
481		MSM_HDMI_MODES_SET_TIMING(__lut,	\
482			HDMI_VFRMT_3840x2160p24_16_9);  \
483		MSM_HDMI_MODES_SET_TIMING(__lut,	\
484			HDMI_VFRMT_3840x2160p25_16_9);  \
485		MSM_HDMI_MODES_SET_TIMING(__lut,	\
486			HDMI_VFRMT_3840x2160p30_16_9);  \
487		MSM_HDMI_MODES_SET_TIMING(__lut,	\
488			HDMI_VFRMT_3840x2160p50_16_9);  \
489		MSM_HDMI_MODES_SET_TIMING(__lut,	\
490			HDMI_VFRMT_3840x2160p60_16_9);  \
491		MSM_HDMI_MODES_SET_TIMING(__lut,	\
492			HDMI_VFRMT_4096x2160p24_256_135);\
493		MSM_HDMI_MODES_SET_TIMING(__lut,	\
494			HDMI_VFRMT_4096x2160p25_256_135);\
495		MSM_HDMI_MODES_SET_TIMING(__lut,	\
496			HDMI_VFRMT_4096x2160p30_256_135);\
497		MSM_HDMI_MODES_SET_TIMING(__lut,	\
498			HDMI_VFRMT_4096x2160p50_256_135);\
499		MSM_HDMI_MODES_SET_TIMING(__lut,	\
500			HDMI_VFRMT_4096x2160p60_256_135);\
501		MSM_HDMI_MODES_SET_TIMING(__lut,	\
502			HDMI_VFRMT_3840x2160p24_64_27); \
503		MSM_HDMI_MODES_SET_TIMING(__lut,	\
504			HDMI_VFRMT_3840x2160p25_64_27); \
505		MSM_HDMI_MODES_SET_TIMING(__lut,	\
506			HDMI_VFRMT_3840x2160p30_64_27); \
507		MSM_HDMI_MODES_SET_TIMING(__lut,	\
508			HDMI_VFRMT_3840x2160p50_64_27); \
509		MSM_HDMI_MODES_SET_TIMING(__lut,	\
510			HDMI_VFRMT_3840x2160p60_64_27); \
511	}	\
512	if (__type & MSM_HDMI_MODES_XTND) {	\
513		MSM_HDMI_MODES_SET_TIMING(__lut,	\
514			HDMI_EVFRMT_3840x2160p30_16_9);	\
515		MSM_HDMI_MODES_SET_TIMING(__lut,	\
516			HDMI_EVFRMT_3840x2160p25_16_9);	\
517		MSM_HDMI_MODES_SET_TIMING(__lut,	\
518			HDMI_EVFRMT_3840x2160p24_16_9);	\
519		MSM_HDMI_MODES_SET_TIMING(__lut,	\
520			HDMI_EVFRMT_4096x2160p24_16_9);	\
521	}	\
522	if (__type & MSM_HDMI_MODES_DVI) {	\
523		MSM_HDMI_MODES_SET_TIMING(__lut,	\
524			HDMI_VFRMT_1024x768p60_4_3);	\
525		MSM_HDMI_MODES_SET_TIMING(__lut,	\
526			HDMI_VFRMT_1280x1024p60_5_4);	\
527		MSM_HDMI_MODES_SET_TIMING(__lut,	\
528			HDMI_VFRMT_2560x1600p60_16_9);	\
529		MSM_HDMI_MODES_SET_TIMING(__lut,	\
530			HDMI_VFRMT_800x600p60_4_3);	\
531		MSM_HDMI_MODES_SET_TIMING(__lut,	\
532			HDMI_VFRMT_848x480p60_16_9);	\
533		MSM_HDMI_MODES_SET_TIMING(__lut,	\
534			HDMI_VFRMT_1280x960p60_4_3);	\
535		MSM_HDMI_MODES_SET_TIMING(__lut,	\
536			HDMI_VFRMT_1360x768p60_16_9);	\
537		MSM_HDMI_MODES_SET_TIMING(__lut,	\
538			HDMI_VFRMT_1440x900p60_16_10);	\
539		MSM_HDMI_MODES_SET_TIMING(__lut,	\
540			HDMI_VFRMT_1400x1050p60_4_3);	\
541		MSM_HDMI_MODES_SET_TIMING(__lut,	\
542			HDMI_VFRMT_1680x1050p60_16_10);	\
543		MSM_HDMI_MODES_SET_TIMING(__lut,	\
544			HDMI_VFRMT_1600x1200p60_4_3);	\
545		MSM_HDMI_MODES_SET_TIMING(__lut,	\
546			HDMI_VFRMT_1920x1200p60_16_10);	\
547		MSM_HDMI_MODES_SET_TIMING(__lut,	\
548			HDMI_VFRMT_1366x768p60_16_10);	\
549		MSM_HDMI_MODES_SET_TIMING(__lut,	\
550			HDMI_VFRMT_1280x800p60_16_10);	\
551	}	\
552} while (0)
553
554#define MSM_HDMI_MODES_GET_DETAILS(mode, MODE) do {		\
555	struct msm_hdmi_mode_timing_info info = MODE##_TIMING;	\
556	*mode = info;						\
557	} while (0)
558
559#endif /* _UAPI_MSM_HDMI_MODES_H__ */
560