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