Adds test for the cmdline parser, connector property, and
drm_analog_tv_mode to ensure the behaviour of the new value is
correct.

Signed-off-by: Dave Stevenson <dave.steven...@raspberrypi.com>
---
 .../gpu/drm/tests/drm_cmdline_parser_test.c   | 20 ++++++------
 drivers/gpu/drm/tests/drm_connector_test.c    |  1 +
 drivers/gpu/drm/tests/drm_modes_test.c        | 31 +++++++++++++++++++
 3 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/tests/drm_cmdline_parser_test.c 
b/drivers/gpu/drm/tests/drm_cmdline_parser_test.c
index 6f1457bd21d9..95fb379c69eb 100644
--- a/drivers/gpu/drm/tests/drm_cmdline_parser_test.c
+++ b/drivers/gpu/drm/tests/drm_cmdline_parser_test.c
@@ -976,22 +976,24 @@ static void drm_test_cmdline_tv_options(struct kunit 
*test)
        KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
 }
 
-#define TV_OPT_TEST(_opt, _cmdline, _mode_fn)          \
+#define TV_OPT_TEST(_opt, _cmdline, _mode_fn, _tvmode)         \
        {                                               \
                .name = #_opt,                          \
                .cmdline = _cmdline,                    \
                .mode_fn = _mode_fn,                    \
-               .tv_mode = DRM_MODE_TV_MODE_ ## _opt,   \
+               .tv_mode = DRM_MODE_TV_MODE_ ## _tvmode,        \
        }
 
 static const struct drm_cmdline_tv_option_test drm_cmdline_tv_option_tests[] = 
{
-       TV_OPT_TEST(NTSC, "720x480i,tv_mode=NTSC", drm_mode_analog_ntsc_480i),
-       TV_OPT_TEST(NTSC_443, "720x480i,tv_mode=NTSC-443", 
drm_mode_analog_ntsc_480i),
-       TV_OPT_TEST(NTSC_J, "720x480i,tv_mode=NTSC-J", 
drm_mode_analog_ntsc_480i),
-       TV_OPT_TEST(PAL, "720x576i,tv_mode=PAL", drm_mode_analog_pal_576i),
-       TV_OPT_TEST(PAL_M, "720x480i,tv_mode=PAL-M", drm_mode_analog_ntsc_480i),
-       TV_OPT_TEST(PAL_N, "720x576i,tv_mode=PAL-N", drm_mode_analog_pal_576i),
-       TV_OPT_TEST(SECAM, "720x576i,tv_mode=SECAM", drm_mode_analog_pal_576i),
+       TV_OPT_TEST(NTSC, "720x480i,tv_mode=NTSC", drm_mode_analog_ntsc_480i, 
NTSC),
+       TV_OPT_TEST(NTSC_443, "720x480i,tv_mode=NTSC-443", 
drm_mode_analog_ntsc_480i, NTSC_443),
+       TV_OPT_TEST(NTSC_J, "720x480i,tv_mode=NTSC-J", 
drm_mode_analog_ntsc_480i, NTSC_J),
+       TV_OPT_TEST(PAL, "720x576i,tv_mode=PAL", drm_mode_analog_pal_576i, PAL),
+       TV_OPT_TEST(PAL_M, "720x480i,tv_mode=PAL-M", drm_mode_analog_ntsc_480i, 
PAL_M),
+       TV_OPT_TEST(PAL_N, "720x576i,tv_mode=PAL-N", drm_mode_analog_pal_576i, 
PAL_N),
+       TV_OPT_TEST(SECAM, "720x576i,tv_mode=SECAM", drm_mode_analog_pal_576i, 
SECAM),
+       TV_OPT_TEST(MONO_525, "720x480i,tv_mode=Mono", 
drm_mode_analog_ntsc_480i, MONOCHROME),
+       TV_OPT_TEST(MONO_625, "720x576i,tv_mode=Mono", 
drm_mode_analog_pal_576i, MONOCHROME),
 };
 
 static void drm_cmdline_tv_option_desc(const struct drm_cmdline_tv_option_test 
*t,
diff --git a/drivers/gpu/drm/tests/drm_connector_test.c 
b/drivers/gpu/drm/tests/drm_connector_test.c
index 2812b123a79c..15e36a8db685 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -777,6 +777,7 @@ struct drm_get_tv_mode_from_name_test 
drm_get_tv_mode_from_name_valid_tests[] =
        TV_MODE_NAME("PAL-M", DRM_MODE_TV_MODE_PAL_M),
        TV_MODE_NAME("PAL-N", DRM_MODE_TV_MODE_PAL_N),
        TV_MODE_NAME("SECAM", DRM_MODE_TV_MODE_SECAM),
+       TV_MODE_NAME("Mono", DRM_MODE_TV_MODE_MONOCHROME),
 };
 
 static void
diff --git a/drivers/gpu/drm/tests/drm_modes_test.c 
b/drivers/gpu/drm/tests/drm_modes_test.c
index 7029f7a2eb4d..066a08a38ca3 100644
--- a/drivers/gpu/drm/tests/drm_modes_test.c
+++ b/drivers/gpu/drm/tests/drm_modes_test.c
@@ -130,11 +130,42 @@ static void 
drm_test_modes_analog_tv_pal_576i_inlined(struct kunit *test)
        KUNIT_EXPECT_TRUE(test, drm_mode_equal(expected, mode));
 }
 
+static void drm_test_modes_analog_tv_mono_576i(struct kunit *test)
+{
+       struct drm_test_modes_priv *priv = test->priv;
+       struct drm_display_mode *mode;
+
+       mode = drm_analog_tv_mode(priv->drm,
+                                 DRM_MODE_TV_MODE_MONOCHROME,
+                                 13500 * HZ_PER_KHZ, 720, 576,
+                                 true);
+       KUNIT_ASSERT_NOT_NULL(test, mode);
+
+       KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 50);
+       KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);
+
+       /* BT.601 defines hsync_start at 732 for 576i */
+       KUNIT_EXPECT_EQ(test, mode->hsync_start, 732);
+
+       /*
+        * The PAL standard expects a line to take 64us. With a pixel
+        * clock of 13.5 MHz, a pixel takes around 74ns, so we need to
+        * have 64000ns / 74ns = 864.
+        *
+        * This is also mandated by BT.601.
+        */
+       KUNIT_EXPECT_EQ(test, mode->htotal, 864);
+
+       KUNIT_EXPECT_EQ(test, mode->vdisplay, 576);
+       KUNIT_EXPECT_EQ(test, mode->vtotal, 625);
+}
+
 static struct kunit_case drm_modes_analog_tv_tests[] = {
        KUNIT_CASE(drm_test_modes_analog_tv_ntsc_480i),
        KUNIT_CASE(drm_test_modes_analog_tv_ntsc_480i_inlined),
        KUNIT_CASE(drm_test_modes_analog_tv_pal_576i),
        KUNIT_CASE(drm_test_modes_analog_tv_pal_576i_inlined),
+       KUNIT_CASE(drm_test_modes_analog_tv_mono_576i),
        { }
 };
 
-- 
2.34.1

Reply via email to