xref: /openbmc/linux/drivers/gpu/drm/tests/drm_connector_test.c (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1*d4613e3eSMaxime Ripard // SPDX-License-Identifier: GPL-2.0
2*d4613e3eSMaxime Ripard /*
3*d4613e3eSMaxime Ripard  * Kunit test for drm_modes functions
4*d4613e3eSMaxime Ripard  */
5*d4613e3eSMaxime Ripard 
6*d4613e3eSMaxime Ripard #include <drm/drm_connector.h>
7*d4613e3eSMaxime Ripard 
8*d4613e3eSMaxime Ripard #include <kunit/test.h>
9*d4613e3eSMaxime Ripard 
10*d4613e3eSMaxime Ripard struct drm_get_tv_mode_from_name_test {
11*d4613e3eSMaxime Ripard 	const char *name;
12*d4613e3eSMaxime Ripard 	enum drm_connector_tv_mode expected_mode;
13*d4613e3eSMaxime Ripard };
14*d4613e3eSMaxime Ripard 
15*d4613e3eSMaxime Ripard #define TV_MODE_NAME(_name, _mode)		\
16*d4613e3eSMaxime Ripard 	{					\
17*d4613e3eSMaxime Ripard 		.name = _name,			\
18*d4613e3eSMaxime Ripard 		.expected_mode = _mode,		\
19*d4613e3eSMaxime Ripard 	}
20*d4613e3eSMaxime Ripard 
drm_test_get_tv_mode_from_name_valid(struct kunit * test)21*d4613e3eSMaxime Ripard static void drm_test_get_tv_mode_from_name_valid(struct kunit *test)
22*d4613e3eSMaxime Ripard {
23*d4613e3eSMaxime Ripard 	const struct drm_get_tv_mode_from_name_test *params = test->param_value;
24*d4613e3eSMaxime Ripard 
25*d4613e3eSMaxime Ripard 	KUNIT_EXPECT_EQ(test,
26*d4613e3eSMaxime Ripard 			drm_get_tv_mode_from_name(params->name, strlen(params->name)),
27*d4613e3eSMaxime Ripard 			params->expected_mode);
28*d4613e3eSMaxime Ripard }
29*d4613e3eSMaxime Ripard 
30*d4613e3eSMaxime Ripard static const
31*d4613e3eSMaxime Ripard struct drm_get_tv_mode_from_name_test drm_get_tv_mode_from_name_valid_tests[] = {
32*d4613e3eSMaxime Ripard 	TV_MODE_NAME("NTSC", DRM_MODE_TV_MODE_NTSC),
33*d4613e3eSMaxime Ripard 	TV_MODE_NAME("NTSC-443", DRM_MODE_TV_MODE_NTSC_443),
34*d4613e3eSMaxime Ripard 	TV_MODE_NAME("NTSC-J", DRM_MODE_TV_MODE_NTSC_J),
35*d4613e3eSMaxime Ripard 	TV_MODE_NAME("PAL", DRM_MODE_TV_MODE_PAL),
36*d4613e3eSMaxime Ripard 	TV_MODE_NAME("PAL-M", DRM_MODE_TV_MODE_PAL_M),
37*d4613e3eSMaxime Ripard 	TV_MODE_NAME("PAL-N", DRM_MODE_TV_MODE_PAL_N),
38*d4613e3eSMaxime Ripard 	TV_MODE_NAME("SECAM", DRM_MODE_TV_MODE_SECAM),
39*d4613e3eSMaxime Ripard };
40*d4613e3eSMaxime Ripard 
41*d4613e3eSMaxime Ripard static void
drm_get_tv_mode_from_name_valid_desc(const struct drm_get_tv_mode_from_name_test * t,char * desc)42*d4613e3eSMaxime Ripard drm_get_tv_mode_from_name_valid_desc(const struct drm_get_tv_mode_from_name_test *t,
43*d4613e3eSMaxime Ripard 				     char *desc)
44*d4613e3eSMaxime Ripard {
45*d4613e3eSMaxime Ripard 	sprintf(desc, "%s", t->name);
46*d4613e3eSMaxime Ripard }
47*d4613e3eSMaxime Ripard 
48*d4613e3eSMaxime Ripard KUNIT_ARRAY_PARAM(drm_get_tv_mode_from_name_valid,
49*d4613e3eSMaxime Ripard 		  drm_get_tv_mode_from_name_valid_tests,
50*d4613e3eSMaxime Ripard 		  drm_get_tv_mode_from_name_valid_desc);
51*d4613e3eSMaxime Ripard 
drm_test_get_tv_mode_from_name_truncated(struct kunit * test)52*d4613e3eSMaxime Ripard static void drm_test_get_tv_mode_from_name_truncated(struct kunit *test)
53*d4613e3eSMaxime Ripard {
54*d4613e3eSMaxime Ripard 	const char *name = "NTS";
55*d4613e3eSMaxime Ripard 	int ret;
56*d4613e3eSMaxime Ripard 
57*d4613e3eSMaxime Ripard 	ret = drm_get_tv_mode_from_name(name, strlen(name));
58*d4613e3eSMaxime Ripard 	KUNIT_EXPECT_LT(test, ret, 0);
59*d4613e3eSMaxime Ripard };
60*d4613e3eSMaxime Ripard 
61*d4613e3eSMaxime Ripard static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
62*d4613e3eSMaxime Ripard 	KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
63*d4613e3eSMaxime Ripard 			 drm_get_tv_mode_from_name_valid_gen_params),
64*d4613e3eSMaxime Ripard 	KUNIT_CASE(drm_test_get_tv_mode_from_name_truncated),
65*d4613e3eSMaxime Ripard 	{ }
66*d4613e3eSMaxime Ripard };
67*d4613e3eSMaxime Ripard 
68*d4613e3eSMaxime Ripard static struct kunit_suite drm_get_tv_mode_from_name_test_suite = {
69*d4613e3eSMaxime Ripard 	.name = "drm_get_tv_mode_from_name",
70*d4613e3eSMaxime Ripard 	.test_cases = drm_get_tv_mode_from_name_tests,
71*d4613e3eSMaxime Ripard };
72*d4613e3eSMaxime Ripard 
73*d4613e3eSMaxime Ripard kunit_test_suite(drm_get_tv_mode_from_name_test_suite);
74*d4613e3eSMaxime Ripard 
75*d4613e3eSMaxime Ripard MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
76*d4613e3eSMaxime Ripard MODULE_LICENSE("GPL");
77