Author | Tokens | Token Proportion | Commits | Commit Proportion |
---|---|---|---|---|
Maxime Ripard | 3259 | 51.81% | 4 | 19.05% |
Maíra Canal | 2046 | 32.53% | 2 | 9.52% |
Michał Winiarski | 532 | 8.46% | 2 | 9.52% |
Hans de Goede | 315 | 5.01% | 4 | 19.05% |
Arnd Bergmann | 63 | 1.00% | 1 | 4.76% |
Dave Stevenson | 44 | 0.70% | 1 | 4.76% |
Stephan Gerhold | 15 | 0.24% | 1 | 4.76% |
Dave Airlie | 8 | 0.13% | 3 | 14.29% |
Jeff Johnson | 5 | 0.08% | 1 | 4.76% |
Daniel Vetter | 2 | 0.03% | 1 | 4.76% |
Ville Syrjälä | 1 | 0.02% | 1 | 4.76% |
Total | 6290 | 21 |
// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2019 Bootlin * Copyright (c) 2022 Maíra Canal <mairacanal@riseup.net> */ #include <kunit/test.h> #include <drm/drm_connector.h> #include <drm/drm_modes.h> static const struct drm_connector no_connector = {}; static void drm_test_cmdline_force_e_only(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "e"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_force_D_only_not_digital(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "D"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static const struct drm_connector connector_hdmi = { .connector_type = DRM_MODE_CONNECTOR_HDMIB, }; static void drm_test_cmdline_force_D_only_hdmi(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "D"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &connector_hdmi, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL); } static const struct drm_connector connector_dvi = { .connector_type = DRM_MODE_CONNECTOR_DVII, }; static void drm_test_cmdline_force_D_only_dvi(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "D"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &connector_dvi, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL); } static void drm_test_cmdline_force_d_only(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "d"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF); } static void drm_test_cmdline_res(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_vesa(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480M"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_TRUE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_vesa_rblank(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480MR"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_TRUE(test, mode.rb); KUNIT_EXPECT_TRUE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_rblank(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480R"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_TRUE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_bpp(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_refresh(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480@60"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_bpp_refresh(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_bpp_refresh_interlaced(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60i"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_TRUE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_bpp_refresh_margins(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60m"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_TRUE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_res_bpp_refresh_force_off(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60d"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF); } static void drm_test_cmdline_res_bpp_refresh_force_on(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60e"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_res_bpp_refresh_force_on_analog(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60D"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_res_bpp_refresh_force_on_digital(struct kunit *test) { struct drm_cmdline_mode mode = { }; static const struct drm_connector connector = { .connector_type = DRM_MODE_CONNECTOR_DVII, }; const char *cmdline = "720x480-24@60D"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL); } static void drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24@60ime"; KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_TRUE(test, mode.refresh_specified); KUNIT_EXPECT_EQ(test, mode.refresh, 60); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_TRUE(test, mode.interlace); KUNIT_EXPECT_TRUE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_res_margins_force_on(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480me"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_TRUE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_res_vesa_margins(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480Mm"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_TRUE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_TRUE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_name(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "NTSC"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); } static void drm_test_cmdline_name_bpp(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "NTSC-24"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); } static void drm_test_cmdline_name_option(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "NTSC,rotate=180"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); } static void drm_test_cmdline_name_bpp_option(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "NTSC-24,rotate=180"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); } static void drm_test_cmdline_rotate_0(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,rotate=0"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_0); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_rotate_90(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,rotate=90"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_90); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_rotate_180(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,rotate=180"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_rotate_270(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,rotate=270"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_270); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_hmirror(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,reflect_x"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X)); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_vmirror(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,reflect_y"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y)); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_margin_options(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14); KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24); KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36); KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_multiple_options(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480,rotate=270,reflect_x"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X)); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_bpp_extra_and_option(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480-24e,rotate=180"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_TRUE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.bpp, 24); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_extra_and_option(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "720x480e,rotate=180"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, 720); KUNIT_EXPECT_EQ(test, mode.yres, 480); KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_freestanding_options(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "margin_right=14,margin_left=24,margin_bottom=36,margin_top=42"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14); KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24); KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36); KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } static void drm_test_cmdline_freestanding_force_e_and_options(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "e,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14); KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24); KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36); KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); } static void drm_test_cmdline_panel_orientation(struct kunit *test) { struct drm_cmdline_mode mode = { }; const char *cmdline = "panel_orientation=upside_down"; KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, &no_connector, &mode)); KUNIT_EXPECT_FALSE(test, mode.specified); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_EQ(test, mode.panel_orientation, DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_FALSE(test, mode.interlace); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } struct drm_cmdline_invalid_test { const char *name; const char *cmdline; }; static void drm_test_cmdline_invalid(struct kunit *test) { const struct drm_cmdline_invalid_test *params = test->param_value; struct drm_cmdline_mode mode = { }; KUNIT_EXPECT_FALSE(test, drm_mode_parse_command_line_for_connector(params->cmdline, &no_connector, &mode)); } static const struct drm_cmdline_invalid_test drm_cmdline_invalid_tests[] = { { .name = "margin_only", .cmdline = "m", }, { .name = "interlace_only", .cmdline = "i", }, { .name = "res_missing_x", .cmdline = "x480", }, { .name = "res_missing_y", .cmdline = "1024x", }, { .name = "res_bad_y", .cmdline = "1024xtest", }, { .name = "res_missing_y_bpp", .cmdline = "1024x-24", }, { .name = "res_bad_bpp", .cmdline = "720x480-test", }, { .name = "res_bad_refresh", .cmdline = "720x480@refresh", }, { .name = "res_bpp_refresh_force_on_off", .cmdline = "720x480-24@60de", }, { .name = "res_invalid_mode", .cmdline = "720x480f", }, { .name = "res_bpp_wrong_place_mode", .cmdline = "720x480e-24", }, { .name = "name_bpp_refresh", .cmdline = "NTSC-24@60", }, { .name = "name_refresh", .cmdline = "NTSC@60", }, { .name = "name_refresh_wrong_mode", .cmdline = "NTSC@60m", }, { .name = "name_refresh_invalid_mode", .cmdline = "NTSC@60f", }, { .name = "rotate_multiple", .cmdline = "720x480,rotate=0,rotate=90", }, { .name = "rotate_invalid_val", .cmdline = "720x480,rotate=42", }, { .name = "rotate_truncated", .cmdline = "720x480,rotate=", }, { .name = "invalid_option", .cmdline = "720x480,test=42", }, { .name = "invalid_tv_option", .cmdline = "720x480i,tv_mode=invalid", }, { .name = "truncated_tv_option", .cmdline = "720x480i,tv_mode=NTS", }, }; static void drm_cmdline_invalid_desc(const struct drm_cmdline_invalid_test *t, char *desc) { sprintf(desc, "%s", t->name); } KUNIT_ARRAY_PARAM(drm_cmdline_invalid, drm_cmdline_invalid_tests, drm_cmdline_invalid_desc); struct drm_cmdline_tv_option_test { const char *name; const char *cmdline; struct drm_display_mode *(*mode_fn)(struct drm_device *dev); enum drm_connector_tv_mode tv_mode; }; static void drm_test_cmdline_tv_options(struct kunit *test) { const struct drm_cmdline_tv_option_test *params = test->param_value; const struct drm_display_mode *expected_mode = params->mode_fn(NULL); struct drm_cmdline_mode mode = { }; KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(params->cmdline, &no_connector, &mode)); KUNIT_EXPECT_TRUE(test, mode.specified); KUNIT_EXPECT_EQ(test, mode.xres, expected_mode->hdisplay); KUNIT_EXPECT_EQ(test, mode.yres, expected_mode->vdisplay); KUNIT_EXPECT_EQ(test, mode.tv_mode, params->tv_mode); KUNIT_EXPECT_FALSE(test, mode.refresh_specified); KUNIT_EXPECT_FALSE(test, mode.bpp_specified); KUNIT_EXPECT_FALSE(test, mode.rb); KUNIT_EXPECT_FALSE(test, mode.cvt); KUNIT_EXPECT_EQ(test, mode.interlace, !!(expected_mode->flags & DRM_MODE_FLAG_INTERLACE)); KUNIT_EXPECT_FALSE(test, mode.margins); KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); } #define TV_OPT_TEST(_opt, _cmdline, _mode_fn) \ { \ .name = #_opt, \ .cmdline = _cmdline, \ .mode_fn = _mode_fn, \ .tv_mode = DRM_MODE_TV_MODE_ ## _opt, \ } 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), { .name = "MONO_525", .cmdline = "720x480i,tv_mode=Mono", .mode_fn = drm_mode_analog_ntsc_480i, .tv_mode = DRM_MODE_TV_MODE_MONOCHROME, }, { .name = "MONO_625", .cmdline = "720x576i,tv_mode=Mono", .mode_fn = drm_mode_analog_pal_576i, .tv_mode = DRM_MODE_TV_MODE_MONOCHROME, }, }; static void drm_cmdline_tv_option_desc(const struct drm_cmdline_tv_option_test *t, char *desc) { sprintf(desc, "%s", t->name); } KUNIT_ARRAY_PARAM(drm_cmdline_tv_option, drm_cmdline_tv_option_tests, drm_cmdline_tv_option_desc); static struct kunit_case drm_cmdline_parser_tests[] = { KUNIT_CASE(drm_test_cmdline_force_d_only), KUNIT_CASE(drm_test_cmdline_force_D_only_dvi), KUNIT_CASE(drm_test_cmdline_force_D_only_hdmi), KUNIT_CASE(drm_test_cmdline_force_D_only_not_digital), KUNIT_CASE(drm_test_cmdline_force_e_only), KUNIT_CASE(drm_test_cmdline_res), KUNIT_CASE(drm_test_cmdline_res_vesa), KUNIT_CASE(drm_test_cmdline_res_vesa_rblank), KUNIT_CASE(drm_test_cmdline_res_rblank), KUNIT_CASE(drm_test_cmdline_res_bpp), KUNIT_CASE(drm_test_cmdline_res_refresh), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_interlaced), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_margins), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_off), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on_analog), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on_digital), KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on), KUNIT_CASE(drm_test_cmdline_res_margins_force_on), KUNIT_CASE(drm_test_cmdline_res_vesa_margins), KUNIT_CASE(drm_test_cmdline_name), KUNIT_CASE(drm_test_cmdline_name_bpp), KUNIT_CASE(drm_test_cmdline_name_option), KUNIT_CASE(drm_test_cmdline_name_bpp_option), KUNIT_CASE(drm_test_cmdline_rotate_0), KUNIT_CASE(drm_test_cmdline_rotate_90), KUNIT_CASE(drm_test_cmdline_rotate_180), KUNIT_CASE(drm_test_cmdline_rotate_270), KUNIT_CASE(drm_test_cmdline_hmirror), KUNIT_CASE(drm_test_cmdline_vmirror), KUNIT_CASE(drm_test_cmdline_margin_options), KUNIT_CASE(drm_test_cmdline_multiple_options), KUNIT_CASE(drm_test_cmdline_bpp_extra_and_option), KUNIT_CASE(drm_test_cmdline_extra_and_option), KUNIT_CASE(drm_test_cmdline_freestanding_options), KUNIT_CASE(drm_test_cmdline_freestanding_force_e_and_options), KUNIT_CASE(drm_test_cmdline_panel_orientation), KUNIT_CASE_PARAM(drm_test_cmdline_invalid, drm_cmdline_invalid_gen_params), KUNIT_CASE_PARAM(drm_test_cmdline_tv_options, drm_cmdline_tv_option_gen_params), {} }; static struct kunit_suite drm_cmdline_parser_test_suite = { .name = "drm_cmdline_parser", .test_cases = drm_cmdline_parser_tests }; kunit_test_suite(drm_cmdline_parser_test_suite); MODULE_AUTHOR("Maxime Ripard <maxime.ripard@bootlin.com>"); MODULE_DESCRIPTION("Kunit test for drm_cmdline_parser functions"); MODULE_LICENSE("GPL");
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with Cregit http://github.com/cregit/cregit
Version 2.0-RC1