xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2019 Bootlin
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #define pr_fmt(fmt) "drm_cmdline: " fmt
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/kernel.h>
9*4882a593Smuzhiyun #include <linux/module.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <drm/drm_connector.h>
12*4882a593Smuzhiyun #include <drm/drm_modes.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define TESTS "drm_cmdline_selftests.h"
15*4882a593Smuzhiyun #include "drm_selftest.h"
16*4882a593Smuzhiyun #include "test-drm_modeset_common.h"
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun static const struct drm_connector no_connector = {};
19*4882a593Smuzhiyun 
drm_cmdline_test_force_e_only(void * ignored)20*4882a593Smuzhiyun static int drm_cmdline_test_force_e_only(void *ignored)
21*4882a593Smuzhiyun {
22*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("e",
25*4882a593Smuzhiyun 							   &no_connector,
26*4882a593Smuzhiyun 							   &mode));
27*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
28*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
29*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
32*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
33*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
34*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
35*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun 	return 0;
38*4882a593Smuzhiyun }
39*4882a593Smuzhiyun 
drm_cmdline_test_force_D_only_not_digital(void * ignored)40*4882a593Smuzhiyun static int drm_cmdline_test_force_D_only_not_digital(void *ignored)
41*4882a593Smuzhiyun {
42*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
45*4882a593Smuzhiyun 							   &no_connector,
46*4882a593Smuzhiyun 							   &mode));
47*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
48*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
49*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
52*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
53*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
54*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
55*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun 	return 0;
58*4882a593Smuzhiyun }
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun static const struct drm_connector connector_hdmi = {
61*4882a593Smuzhiyun 	.connector_type	= DRM_MODE_CONNECTOR_HDMIB,
62*4882a593Smuzhiyun };
63*4882a593Smuzhiyun 
drm_cmdline_test_force_D_only_hdmi(void * ignored)64*4882a593Smuzhiyun static int drm_cmdline_test_force_D_only_hdmi(void *ignored)
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
69*4882a593Smuzhiyun 							   &connector_hdmi,
70*4882a593Smuzhiyun 							   &mode));
71*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
72*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
73*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
76*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
77*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
78*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
79*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun 	return 0;
82*4882a593Smuzhiyun }
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun static const struct drm_connector connector_dvi = {
85*4882a593Smuzhiyun 	.connector_type	= DRM_MODE_CONNECTOR_DVII,
86*4882a593Smuzhiyun };
87*4882a593Smuzhiyun 
drm_cmdline_test_force_D_only_dvi(void * ignored)88*4882a593Smuzhiyun static int drm_cmdline_test_force_D_only_dvi(void *ignored)
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
93*4882a593Smuzhiyun 							   &connector_dvi,
94*4882a593Smuzhiyun 							   &mode));
95*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
96*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
97*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
100*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
101*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
102*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
103*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun 	return 0;
106*4882a593Smuzhiyun }
107*4882a593Smuzhiyun 
drm_cmdline_test_force_d_only(void * ignored)108*4882a593Smuzhiyun static int drm_cmdline_test_force_d_only(void *ignored)
109*4882a593Smuzhiyun {
110*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("d",
113*4882a593Smuzhiyun 							   &no_connector,
114*4882a593Smuzhiyun 							   &mode));
115*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
116*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
117*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
120*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
121*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
122*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
123*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_OFF);
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun 	return 0;
126*4882a593Smuzhiyun }
127*4882a593Smuzhiyun 
drm_cmdline_test_margin_only(void * ignored)128*4882a593Smuzhiyun static int drm_cmdline_test_margin_only(void *ignored)
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("m",
133*4882a593Smuzhiyun 							  &no_connector,
134*4882a593Smuzhiyun 							  &mode));
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun 	return 0;
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun 
drm_cmdline_test_interlace_only(void * ignored)139*4882a593Smuzhiyun static int drm_cmdline_test_interlace_only(void *ignored)
140*4882a593Smuzhiyun {
141*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("i",
144*4882a593Smuzhiyun 							  &no_connector,
145*4882a593Smuzhiyun 							  &mode));
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 	return 0;
148*4882a593Smuzhiyun }
149*4882a593Smuzhiyun 
drm_cmdline_test_res(void * ignored)150*4882a593Smuzhiyun static int drm_cmdline_test_res(void *ignored)
151*4882a593Smuzhiyun {
152*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480",
155*4882a593Smuzhiyun 							   &no_connector,
156*4882a593Smuzhiyun 							   &mode));
157*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
158*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
159*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
166*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
167*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
168*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
169*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun 	return 0;
172*4882a593Smuzhiyun }
173*4882a593Smuzhiyun 
drm_cmdline_test_res_missing_x(void * ignored)174*4882a593Smuzhiyun static int drm_cmdline_test_res_missing_x(void *ignored)
175*4882a593Smuzhiyun {
176*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("x480",
179*4882a593Smuzhiyun 							  &no_connector,
180*4882a593Smuzhiyun 							  &mode));
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun 	return 0;
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun 
drm_cmdline_test_res_missing_y(void * ignored)185*4882a593Smuzhiyun static int drm_cmdline_test_res_missing_y(void *ignored)
186*4882a593Smuzhiyun {
187*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("1024x",
190*4882a593Smuzhiyun 							  &no_connector,
191*4882a593Smuzhiyun 							  &mode));
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun 	return 0;
194*4882a593Smuzhiyun }
195*4882a593Smuzhiyun 
drm_cmdline_test_res_bad_y(void * ignored)196*4882a593Smuzhiyun static int drm_cmdline_test_res_bad_y(void *ignored)
197*4882a593Smuzhiyun {
198*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("1024xtest",
201*4882a593Smuzhiyun 							  &no_connector,
202*4882a593Smuzhiyun 							  &mode));
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun 	return 0;
205*4882a593Smuzhiyun }
206*4882a593Smuzhiyun 
drm_cmdline_test_res_missing_y_bpp(void * ignored)207*4882a593Smuzhiyun static int drm_cmdline_test_res_missing_y_bpp(void *ignored)
208*4882a593Smuzhiyun {
209*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("1024x-24",
212*4882a593Smuzhiyun 							  &no_connector,
213*4882a593Smuzhiyun 							  &mode));
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun 	return 0;
216*4882a593Smuzhiyun }
217*4882a593Smuzhiyun 
drm_cmdline_test_res_vesa(void * ignored)218*4882a593Smuzhiyun static int drm_cmdline_test_res_vesa(void *ignored)
219*4882a593Smuzhiyun {
220*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480M",
223*4882a593Smuzhiyun 							   &no_connector,
224*4882a593Smuzhiyun 							   &mode));
225*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
226*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
227*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
234*4882a593Smuzhiyun 	FAIL_ON(!mode.cvt);
235*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
236*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
237*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun 	return 0;
240*4882a593Smuzhiyun }
241*4882a593Smuzhiyun 
drm_cmdline_test_res_vesa_rblank(void * ignored)242*4882a593Smuzhiyun static int drm_cmdline_test_res_vesa_rblank(void *ignored)
243*4882a593Smuzhiyun {
244*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480MR",
247*4882a593Smuzhiyun 							   &no_connector,
248*4882a593Smuzhiyun 							   &mode));
249*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
250*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
251*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun 	FAIL_ON(!mode.rb);
258*4882a593Smuzhiyun 	FAIL_ON(!mode.cvt);
259*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
260*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
261*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun 	return 0;
264*4882a593Smuzhiyun }
265*4882a593Smuzhiyun 
drm_cmdline_test_res_rblank(void * ignored)266*4882a593Smuzhiyun static int drm_cmdline_test_res_rblank(void *ignored)
267*4882a593Smuzhiyun {
268*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480R",
271*4882a593Smuzhiyun 							   &no_connector,
272*4882a593Smuzhiyun 							   &mode));
273*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
274*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
275*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun 	FAIL_ON(!mode.rb);
282*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
283*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
284*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
285*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun 	return 0;
288*4882a593Smuzhiyun }
289*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp(void * ignored)290*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp(void *ignored)
291*4882a593Smuzhiyun {
292*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24",
295*4882a593Smuzhiyun 							   &no_connector,
296*4882a593Smuzhiyun 							   &mode));
297*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
298*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
299*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
304*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
307*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
308*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
309*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
310*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun 	return 0;
313*4882a593Smuzhiyun }
314*4882a593Smuzhiyun 
drm_cmdline_test_res_bad_bpp(void * ignored)315*4882a593Smuzhiyun static int drm_cmdline_test_res_bad_bpp(void *ignored)
316*4882a593Smuzhiyun {
317*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480-test",
320*4882a593Smuzhiyun 							  &no_connector,
321*4882a593Smuzhiyun 							  &mode));
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun 	return 0;
324*4882a593Smuzhiyun }
325*4882a593Smuzhiyun 
drm_cmdline_test_res_refresh(void * ignored)326*4882a593Smuzhiyun static int drm_cmdline_test_res_refresh(void *ignored)
327*4882a593Smuzhiyun {
328*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480@60",
331*4882a593Smuzhiyun 							   &no_connector,
332*4882a593Smuzhiyun 							   &mode));
333*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
334*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
335*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
338*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
343*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
344*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
345*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
346*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun 	return 0;
349*4882a593Smuzhiyun }
350*4882a593Smuzhiyun 
drm_cmdline_test_res_bad_refresh(void * ignored)351*4882a593Smuzhiyun static int drm_cmdline_test_res_bad_refresh(void *ignored)
352*4882a593Smuzhiyun {
353*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480@refresh",
356*4882a593Smuzhiyun 							  &no_connector,
357*4882a593Smuzhiyun 							  &mode));
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun 	return 0;
360*4882a593Smuzhiyun }
361*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh(void * ignored)362*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh(void *ignored)
363*4882a593Smuzhiyun {
364*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60",
367*4882a593Smuzhiyun 							   &no_connector,
368*4882a593Smuzhiyun 							   &mode));
369*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
370*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
371*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
374*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
377*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
380*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
381*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
382*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
383*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun 	return 0;
386*4882a593Smuzhiyun }
387*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_interlaced(void * ignored)388*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_interlaced(void *ignored)
389*4882a593Smuzhiyun {
390*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60i",
393*4882a593Smuzhiyun 							   &no_connector,
394*4882a593Smuzhiyun 							   &mode));
395*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
396*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
397*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
400*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
403*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
406*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
407*4882a593Smuzhiyun 	FAIL_ON(!mode.interlace);
408*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
409*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun 	return 0;
412*4882a593Smuzhiyun }
413*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_margins(void * ignored)414*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_margins(void *ignored)
415*4882a593Smuzhiyun {
416*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60m",
419*4882a593Smuzhiyun 							   &no_connector,
420*4882a593Smuzhiyun 							   &mode));
421*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
422*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
423*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
426*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
429*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
432*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
433*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
434*4882a593Smuzhiyun 	FAIL_ON(!mode.margins);
435*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun 	return 0;
438*4882a593Smuzhiyun }
439*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_force_off(void * ignored)440*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_force_off(void *ignored)
441*4882a593Smuzhiyun {
442*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60d",
445*4882a593Smuzhiyun 							   &no_connector,
446*4882a593Smuzhiyun 							   &mode));
447*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
448*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
449*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
450*4882a593Smuzhiyun 
451*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
452*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
455*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
458*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
459*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
460*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
461*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_OFF);
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun 	return 0;
464*4882a593Smuzhiyun }
465*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_force_on_off(void * ignored)466*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_force_on_off(void *ignored)
467*4882a593Smuzhiyun {
468*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
469*4882a593Smuzhiyun 
470*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480-24@60de",
471*4882a593Smuzhiyun 							  &no_connector,
472*4882a593Smuzhiyun 							  &mode));
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun 	return 0;
475*4882a593Smuzhiyun }
476*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_force_on(void * ignored)477*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_force_on(void *ignored)
478*4882a593Smuzhiyun {
479*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60e",
482*4882a593Smuzhiyun 							   &no_connector,
483*4882a593Smuzhiyun 							   &mode));
484*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
485*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
486*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
489*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
490*4882a593Smuzhiyun 
491*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
492*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
495*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
496*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
497*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
498*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun 	return 0;
501*4882a593Smuzhiyun }
502*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_force_on_analog(void * ignored)503*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_force_on_analog(void *ignored)
504*4882a593Smuzhiyun {
505*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
506*4882a593Smuzhiyun 
507*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60D",
508*4882a593Smuzhiyun 							   &no_connector,
509*4882a593Smuzhiyun 							   &mode));
510*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
511*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
512*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
515*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
518*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
521*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
522*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
523*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
524*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
525*4882a593Smuzhiyun 
526*4882a593Smuzhiyun 	return 0;
527*4882a593Smuzhiyun }
528*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_force_on_digital(void * ignored)529*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_force_on_digital(void *ignored)
530*4882a593Smuzhiyun {
531*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
532*4882a593Smuzhiyun 	static const struct drm_connector connector = {
533*4882a593Smuzhiyun 		.connector_type = DRM_MODE_CONNECTOR_DVII,
534*4882a593Smuzhiyun 	};
535*4882a593Smuzhiyun 
536*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60D",
537*4882a593Smuzhiyun 							   &connector,
538*4882a593Smuzhiyun 							   &mode));
539*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
540*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
541*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
544*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
547*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
550*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
551*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
552*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
553*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun 	return 0;
556*4882a593Smuzhiyun }
557*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_refresh_interlaced_margins_force_on(void * ignored)558*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_refresh_interlaced_margins_force_on(void *ignored)
559*4882a593Smuzhiyun {
560*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60ime",
563*4882a593Smuzhiyun 							   &no_connector,
564*4882a593Smuzhiyun 							   &mode));
565*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
566*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
567*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
568*4882a593Smuzhiyun 
569*4882a593Smuzhiyun 	FAIL_ON(!mode.refresh_specified);
570*4882a593Smuzhiyun 	FAIL_ON(mode.refresh != 60);
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
573*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
576*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
577*4882a593Smuzhiyun 	FAIL_ON(!mode.interlace);
578*4882a593Smuzhiyun 	FAIL_ON(!mode.margins);
579*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun 	return 0;
582*4882a593Smuzhiyun }
583*4882a593Smuzhiyun 
drm_cmdline_test_res_margins_force_on(void * ignored)584*4882a593Smuzhiyun static int drm_cmdline_test_res_margins_force_on(void *ignored)
585*4882a593Smuzhiyun {
586*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
587*4882a593Smuzhiyun 
588*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480me",
589*4882a593Smuzhiyun 							   &no_connector,
590*4882a593Smuzhiyun 							   &mode));
591*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
592*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
593*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
598*4882a593Smuzhiyun 
599*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
600*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
601*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
602*4882a593Smuzhiyun 	FAIL_ON(!mode.margins);
603*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
604*4882a593Smuzhiyun 
605*4882a593Smuzhiyun 	return 0;
606*4882a593Smuzhiyun }
607*4882a593Smuzhiyun 
drm_cmdline_test_res_vesa_margins(void * ignored)608*4882a593Smuzhiyun static int drm_cmdline_test_res_vesa_margins(void *ignored)
609*4882a593Smuzhiyun {
610*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480Mm",
613*4882a593Smuzhiyun 							   &no_connector,
614*4882a593Smuzhiyun 							   &mode));
615*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
616*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
617*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
624*4882a593Smuzhiyun 	FAIL_ON(!mode.cvt);
625*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
626*4882a593Smuzhiyun 	FAIL_ON(!mode.margins);
627*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun 	return 0;
630*4882a593Smuzhiyun }
631*4882a593Smuzhiyun 
drm_cmdline_test_res_invalid_mode(void * ignored)632*4882a593Smuzhiyun static int drm_cmdline_test_res_invalid_mode(void *ignored)
633*4882a593Smuzhiyun {
634*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
635*4882a593Smuzhiyun 
636*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480f",
637*4882a593Smuzhiyun 							  &no_connector,
638*4882a593Smuzhiyun 							  &mode));
639*4882a593Smuzhiyun 
640*4882a593Smuzhiyun 	return 0;
641*4882a593Smuzhiyun }
642*4882a593Smuzhiyun 
drm_cmdline_test_res_bpp_wrong_place_mode(void * ignored)643*4882a593Smuzhiyun static int drm_cmdline_test_res_bpp_wrong_place_mode(void *ignored)
644*4882a593Smuzhiyun {
645*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
646*4882a593Smuzhiyun 
647*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480e-24",
648*4882a593Smuzhiyun 							  &no_connector,
649*4882a593Smuzhiyun 							  &mode));
650*4882a593Smuzhiyun 
651*4882a593Smuzhiyun 	return 0;
652*4882a593Smuzhiyun }
653*4882a593Smuzhiyun 
drm_cmdline_test_name(void * ignored)654*4882a593Smuzhiyun static int drm_cmdline_test_name(void *ignored)
655*4882a593Smuzhiyun {
656*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
657*4882a593Smuzhiyun 
658*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC",
659*4882a593Smuzhiyun 							   &no_connector,
660*4882a593Smuzhiyun 							   &mode));
661*4882a593Smuzhiyun 	FAIL_ON(strcmp(mode.name, "NTSC"));
662*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
663*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun 	return 0;
666*4882a593Smuzhiyun }
667*4882a593Smuzhiyun 
drm_cmdline_test_name_bpp(void * ignored)668*4882a593Smuzhiyun static int drm_cmdline_test_name_bpp(void *ignored)
669*4882a593Smuzhiyun {
670*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
671*4882a593Smuzhiyun 
672*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC-24",
673*4882a593Smuzhiyun 							   &no_connector,
674*4882a593Smuzhiyun 							   &mode));
675*4882a593Smuzhiyun 	FAIL_ON(strcmp(mode.name, "NTSC"));
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
678*4882a593Smuzhiyun 
679*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
680*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun 	return 0;
683*4882a593Smuzhiyun }
684*4882a593Smuzhiyun 
drm_cmdline_test_name_bpp_refresh(void * ignored)685*4882a593Smuzhiyun static int drm_cmdline_test_name_bpp_refresh(void *ignored)
686*4882a593Smuzhiyun {
687*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
688*4882a593Smuzhiyun 
689*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC-24@60",
690*4882a593Smuzhiyun 							  &no_connector,
691*4882a593Smuzhiyun 							  &mode));
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun 	return 0;
694*4882a593Smuzhiyun }
695*4882a593Smuzhiyun 
drm_cmdline_test_name_refresh(void * ignored)696*4882a593Smuzhiyun static int drm_cmdline_test_name_refresh(void *ignored)
697*4882a593Smuzhiyun {
698*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
699*4882a593Smuzhiyun 
700*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60",
701*4882a593Smuzhiyun 							  &no_connector,
702*4882a593Smuzhiyun 							  &mode));
703*4882a593Smuzhiyun 
704*4882a593Smuzhiyun 	return 0;
705*4882a593Smuzhiyun }
706*4882a593Smuzhiyun 
drm_cmdline_test_name_refresh_wrong_mode(void * ignored)707*4882a593Smuzhiyun static int drm_cmdline_test_name_refresh_wrong_mode(void *ignored)
708*4882a593Smuzhiyun {
709*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
710*4882a593Smuzhiyun 
711*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60m",
712*4882a593Smuzhiyun 							  &no_connector,
713*4882a593Smuzhiyun 							  &mode));
714*4882a593Smuzhiyun 
715*4882a593Smuzhiyun 	return 0;
716*4882a593Smuzhiyun }
717*4882a593Smuzhiyun 
drm_cmdline_test_name_refresh_invalid_mode(void * ignored)718*4882a593Smuzhiyun static int drm_cmdline_test_name_refresh_invalid_mode(void *ignored)
719*4882a593Smuzhiyun {
720*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
721*4882a593Smuzhiyun 
722*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60f",
723*4882a593Smuzhiyun 							  &no_connector,
724*4882a593Smuzhiyun 							  &mode));
725*4882a593Smuzhiyun 
726*4882a593Smuzhiyun 	return 0;
727*4882a593Smuzhiyun }
728*4882a593Smuzhiyun 
drm_cmdline_test_name_option(void * ignored)729*4882a593Smuzhiyun static int drm_cmdline_test_name_option(void *ignored)
730*4882a593Smuzhiyun {
731*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC,rotate=180",
734*4882a593Smuzhiyun 							   &no_connector,
735*4882a593Smuzhiyun 							   &mode));
736*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
737*4882a593Smuzhiyun 	FAIL_ON(strcmp(mode.name, "NTSC"));
738*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
739*4882a593Smuzhiyun 
740*4882a593Smuzhiyun 	return 0;
741*4882a593Smuzhiyun }
742*4882a593Smuzhiyun 
drm_cmdline_test_name_bpp_option(void * ignored)743*4882a593Smuzhiyun static int drm_cmdline_test_name_bpp_option(void *ignored)
744*4882a593Smuzhiyun {
745*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
746*4882a593Smuzhiyun 
747*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC-24,rotate=180",
748*4882a593Smuzhiyun 							   &no_connector,
749*4882a593Smuzhiyun 							   &mode));
750*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
751*4882a593Smuzhiyun 	FAIL_ON(strcmp(mode.name, "NTSC"));
752*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
753*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
754*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
755*4882a593Smuzhiyun 
756*4882a593Smuzhiyun 	return 0;
757*4882a593Smuzhiyun }
758*4882a593Smuzhiyun 
drm_cmdline_test_rotate_0(void * ignored)759*4882a593Smuzhiyun static int drm_cmdline_test_rotate_0(void *ignored)
760*4882a593Smuzhiyun {
761*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
762*4882a593Smuzhiyun 
763*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=0",
764*4882a593Smuzhiyun 							   &no_connector,
765*4882a593Smuzhiyun 							   &mode));
766*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
767*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
768*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
769*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_0);
770*4882a593Smuzhiyun 
771*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
772*4882a593Smuzhiyun 
773*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
774*4882a593Smuzhiyun 
775*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
776*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
777*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
778*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
779*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun 	return 0;
782*4882a593Smuzhiyun }
783*4882a593Smuzhiyun 
drm_cmdline_test_rotate_90(void * ignored)784*4882a593Smuzhiyun static int drm_cmdline_test_rotate_90(void *ignored)
785*4882a593Smuzhiyun {
786*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
787*4882a593Smuzhiyun 
788*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=90",
789*4882a593Smuzhiyun 							   &no_connector,
790*4882a593Smuzhiyun 							   &mode));
791*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
792*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
793*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
794*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_90);
795*4882a593Smuzhiyun 
796*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
797*4882a593Smuzhiyun 
798*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
799*4882a593Smuzhiyun 
800*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
801*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
802*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
803*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
804*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
805*4882a593Smuzhiyun 
806*4882a593Smuzhiyun 	return 0;
807*4882a593Smuzhiyun }
808*4882a593Smuzhiyun 
drm_cmdline_test_rotate_180(void * ignored)809*4882a593Smuzhiyun static int drm_cmdline_test_rotate_180(void *ignored)
810*4882a593Smuzhiyun {
811*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
812*4882a593Smuzhiyun 
813*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=180",
814*4882a593Smuzhiyun 							   &no_connector,
815*4882a593Smuzhiyun 							   &mode));
816*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
817*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
818*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
819*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
820*4882a593Smuzhiyun 
821*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
824*4882a593Smuzhiyun 
825*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
826*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
827*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
828*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
829*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
830*4882a593Smuzhiyun 
831*4882a593Smuzhiyun 	return 0;
832*4882a593Smuzhiyun }
833*4882a593Smuzhiyun 
drm_cmdline_test_rotate_270(void * ignored)834*4882a593Smuzhiyun static int drm_cmdline_test_rotate_270(void *ignored)
835*4882a593Smuzhiyun {
836*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=270",
839*4882a593Smuzhiyun 							   &no_connector,
840*4882a593Smuzhiyun 							   &mode));
841*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
842*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
843*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
844*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_270);
845*4882a593Smuzhiyun 
846*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
847*4882a593Smuzhiyun 
848*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
849*4882a593Smuzhiyun 
850*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
851*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
852*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
853*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
854*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
855*4882a593Smuzhiyun 
856*4882a593Smuzhiyun 	return 0;
857*4882a593Smuzhiyun }
858*4882a593Smuzhiyun 
drm_cmdline_test_rotate_multiple(void * ignored)859*4882a593Smuzhiyun static int drm_cmdline_test_rotate_multiple(void *ignored)
860*4882a593Smuzhiyun {
861*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
862*4882a593Smuzhiyun 
863*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=0,rotate=90",
864*4882a593Smuzhiyun 							  &no_connector,
865*4882a593Smuzhiyun 							  &mode));
866*4882a593Smuzhiyun 
867*4882a593Smuzhiyun 	return 0;
868*4882a593Smuzhiyun }
869*4882a593Smuzhiyun 
drm_cmdline_test_rotate_invalid_val(void * ignored)870*4882a593Smuzhiyun static int drm_cmdline_test_rotate_invalid_val(void *ignored)
871*4882a593Smuzhiyun {
872*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
873*4882a593Smuzhiyun 
874*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=42",
875*4882a593Smuzhiyun 							  &no_connector,
876*4882a593Smuzhiyun 							  &mode));
877*4882a593Smuzhiyun 
878*4882a593Smuzhiyun 	return 0;
879*4882a593Smuzhiyun }
880*4882a593Smuzhiyun 
drm_cmdline_test_rotate_truncated(void * ignored)881*4882a593Smuzhiyun static int drm_cmdline_test_rotate_truncated(void *ignored)
882*4882a593Smuzhiyun {
883*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
884*4882a593Smuzhiyun 
885*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=",
886*4882a593Smuzhiyun 							  &no_connector,
887*4882a593Smuzhiyun 							  &mode));
888*4882a593Smuzhiyun 
889*4882a593Smuzhiyun 	return 0;
890*4882a593Smuzhiyun }
891*4882a593Smuzhiyun 
drm_cmdline_test_hmirror(void * ignored)892*4882a593Smuzhiyun static int drm_cmdline_test_hmirror(void *ignored)
893*4882a593Smuzhiyun {
894*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
895*4882a593Smuzhiyun 
896*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,reflect_x",
897*4882a593Smuzhiyun 							   &no_connector,
898*4882a593Smuzhiyun 							   &mode));
899*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
900*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
901*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
902*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X));
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
907*4882a593Smuzhiyun 
908*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
909*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
910*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
911*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
912*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
913*4882a593Smuzhiyun 
914*4882a593Smuzhiyun 	return 0;
915*4882a593Smuzhiyun }
916*4882a593Smuzhiyun 
drm_cmdline_test_vmirror(void * ignored)917*4882a593Smuzhiyun static int drm_cmdline_test_vmirror(void *ignored)
918*4882a593Smuzhiyun {
919*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
920*4882a593Smuzhiyun 
921*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,reflect_y",
922*4882a593Smuzhiyun 							   &no_connector,
923*4882a593Smuzhiyun 							   &mode));
924*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
925*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
926*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
927*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y));
928*4882a593Smuzhiyun 
929*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
930*4882a593Smuzhiyun 
931*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
932*4882a593Smuzhiyun 
933*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
934*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
935*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
936*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
937*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
938*4882a593Smuzhiyun 
939*4882a593Smuzhiyun 	return 0;
940*4882a593Smuzhiyun }
941*4882a593Smuzhiyun 
drm_cmdline_test_margin_options(void * ignored)942*4882a593Smuzhiyun static int drm_cmdline_test_margin_options(void *ignored)
943*4882a593Smuzhiyun {
944*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
945*4882a593Smuzhiyun 
946*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
947*4882a593Smuzhiyun 							   &no_connector,
948*4882a593Smuzhiyun 							   &mode));
949*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
950*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
951*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
952*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.right != 14);
953*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.left != 24);
954*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.bottom != 36);
955*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.top != 42);
956*4882a593Smuzhiyun 
957*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
958*4882a593Smuzhiyun 
959*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
960*4882a593Smuzhiyun 
961*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
962*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
963*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
964*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
965*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
966*4882a593Smuzhiyun 
967*4882a593Smuzhiyun 	return 0;
968*4882a593Smuzhiyun }
969*4882a593Smuzhiyun 
drm_cmdline_test_multiple_options(void * ignored)970*4882a593Smuzhiyun static int drm_cmdline_test_multiple_options(void *ignored)
971*4882a593Smuzhiyun {
972*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
973*4882a593Smuzhiyun 
974*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=270,reflect_x",
975*4882a593Smuzhiyun 							   &no_connector,
976*4882a593Smuzhiyun 							   &mode));
977*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
978*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
979*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
980*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != (DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X));
981*4882a593Smuzhiyun 
982*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
983*4882a593Smuzhiyun 
984*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
985*4882a593Smuzhiyun 
986*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
987*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
988*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
989*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
990*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
991*4882a593Smuzhiyun 
992*4882a593Smuzhiyun 	return 0;
993*4882a593Smuzhiyun }
994*4882a593Smuzhiyun 
drm_cmdline_test_invalid_option(void * ignored)995*4882a593Smuzhiyun static int drm_cmdline_test_invalid_option(void *ignored)
996*4882a593Smuzhiyun {
997*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
998*4882a593Smuzhiyun 
999*4882a593Smuzhiyun 	FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,test=42",
1000*4882a593Smuzhiyun 							  &no_connector,
1001*4882a593Smuzhiyun 							  &mode));
1002*4882a593Smuzhiyun 
1003*4882a593Smuzhiyun 	return 0;
1004*4882a593Smuzhiyun }
1005*4882a593Smuzhiyun 
drm_cmdline_test_bpp_extra_and_option(void * ignored)1006*4882a593Smuzhiyun static int drm_cmdline_test_bpp_extra_and_option(void *ignored)
1007*4882a593Smuzhiyun {
1008*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
1009*4882a593Smuzhiyun 
1010*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24e,rotate=180",
1011*4882a593Smuzhiyun 							   &no_connector,
1012*4882a593Smuzhiyun 							   &mode));
1013*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
1014*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
1015*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
1016*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
1017*4882a593Smuzhiyun 
1018*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
1019*4882a593Smuzhiyun 
1020*4882a593Smuzhiyun 	FAIL_ON(!mode.bpp_specified);
1021*4882a593Smuzhiyun 	FAIL_ON(mode.bpp != 24);
1022*4882a593Smuzhiyun 
1023*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
1024*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
1025*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
1026*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
1027*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
1028*4882a593Smuzhiyun 
1029*4882a593Smuzhiyun 	return 0;
1030*4882a593Smuzhiyun }
1031*4882a593Smuzhiyun 
drm_cmdline_test_extra_and_option(void * ignored)1032*4882a593Smuzhiyun static int drm_cmdline_test_extra_and_option(void *ignored)
1033*4882a593Smuzhiyun {
1034*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
1035*4882a593Smuzhiyun 
1036*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480e,rotate=180",
1037*4882a593Smuzhiyun 							   &no_connector,
1038*4882a593Smuzhiyun 							   &mode));
1039*4882a593Smuzhiyun 	FAIL_ON(!mode.specified);
1040*4882a593Smuzhiyun 	FAIL_ON(mode.xres != 720);
1041*4882a593Smuzhiyun 	FAIL_ON(mode.yres != 480);
1042*4882a593Smuzhiyun 	FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
1043*4882a593Smuzhiyun 
1044*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
1045*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
1046*4882a593Smuzhiyun 
1047*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
1048*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
1049*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
1050*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
1051*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
1052*4882a593Smuzhiyun 
1053*4882a593Smuzhiyun 	return 0;
1054*4882a593Smuzhiyun }
1055*4882a593Smuzhiyun 
drm_cmdline_test_freestanding_options(void * ignored)1056*4882a593Smuzhiyun static int drm_cmdline_test_freestanding_options(void *ignored)
1057*4882a593Smuzhiyun {
1058*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
1059*4882a593Smuzhiyun 
1060*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
1061*4882a593Smuzhiyun 							   &no_connector,
1062*4882a593Smuzhiyun 							   &mode));
1063*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
1064*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
1065*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
1066*4882a593Smuzhiyun 
1067*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.right != 14);
1068*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.left != 24);
1069*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.bottom != 36);
1070*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.top != 42);
1071*4882a593Smuzhiyun 
1072*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
1073*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
1074*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
1075*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
1076*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
1077*4882a593Smuzhiyun 
1078*4882a593Smuzhiyun 	return 0;
1079*4882a593Smuzhiyun }
1080*4882a593Smuzhiyun 
drm_cmdline_test_freestanding_force_e_and_options(void * ignored)1081*4882a593Smuzhiyun static int drm_cmdline_test_freestanding_force_e_and_options(void *ignored)
1082*4882a593Smuzhiyun {
1083*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
1084*4882a593Smuzhiyun 
1085*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("e,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
1086*4882a593Smuzhiyun 							   &no_connector,
1087*4882a593Smuzhiyun 							   &mode));
1088*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
1089*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
1090*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
1091*4882a593Smuzhiyun 
1092*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.right != 14);
1093*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.left != 24);
1094*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.bottom != 36);
1095*4882a593Smuzhiyun 	FAIL_ON(mode.tv_margins.top != 42);
1096*4882a593Smuzhiyun 
1097*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
1098*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
1099*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
1100*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
1101*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_ON);
1102*4882a593Smuzhiyun 
1103*4882a593Smuzhiyun 	return 0;
1104*4882a593Smuzhiyun }
1105*4882a593Smuzhiyun 
drm_cmdline_test_panel_orientation(void * ignored)1106*4882a593Smuzhiyun static int drm_cmdline_test_panel_orientation(void *ignored)
1107*4882a593Smuzhiyun {
1108*4882a593Smuzhiyun 	struct drm_cmdline_mode mode = { };
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun 	FAIL_ON(!drm_mode_parse_command_line_for_connector("panel_orientation=upside_down",
1111*4882a593Smuzhiyun 							   &no_connector,
1112*4882a593Smuzhiyun 							   &mode));
1113*4882a593Smuzhiyun 	FAIL_ON(mode.specified);
1114*4882a593Smuzhiyun 	FAIL_ON(mode.refresh_specified);
1115*4882a593Smuzhiyun 	FAIL_ON(mode.bpp_specified);
1116*4882a593Smuzhiyun 
1117*4882a593Smuzhiyun 	FAIL_ON(mode.panel_orientation != DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP);
1118*4882a593Smuzhiyun 
1119*4882a593Smuzhiyun 	FAIL_ON(mode.rb);
1120*4882a593Smuzhiyun 	FAIL_ON(mode.cvt);
1121*4882a593Smuzhiyun 	FAIL_ON(mode.interlace);
1122*4882a593Smuzhiyun 	FAIL_ON(mode.margins);
1123*4882a593Smuzhiyun 	FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
1124*4882a593Smuzhiyun 
1125*4882a593Smuzhiyun 	return 0;
1126*4882a593Smuzhiyun }
1127*4882a593Smuzhiyun 
1128*4882a593Smuzhiyun #include "drm_selftest.c"
1129*4882a593Smuzhiyun 
test_drm_cmdline_init(void)1130*4882a593Smuzhiyun static int __init test_drm_cmdline_init(void)
1131*4882a593Smuzhiyun {
1132*4882a593Smuzhiyun 	int err;
1133*4882a593Smuzhiyun 
1134*4882a593Smuzhiyun 	err = run_selftests(selftests, ARRAY_SIZE(selftests), NULL);
1135*4882a593Smuzhiyun 
1136*4882a593Smuzhiyun 	return err > 0 ? 0 : err;
1137*4882a593Smuzhiyun }
1138*4882a593Smuzhiyun module_init(test_drm_cmdline_init);
1139*4882a593Smuzhiyun 
1140*4882a593Smuzhiyun MODULE_AUTHOR("Maxime Ripard <maxime.ripard@bootlin.com>");
1141*4882a593Smuzhiyun MODULE_LICENSE("GPL");
1142