drm/connector: Add pixel clock to cmdline mode
authorMaxime Ripard <maxime@cerno.tech>
Mon, 14 Nov 2022 13:00:31 +0000 (14:00 +0100)
committerMaxime Ripard <maxime@cerno.tech>
Tue, 15 Nov 2022 09:10:24 +0000 (10:10 +0100)
We'll need to get the pixel clock to generate proper display modes for
all the current named modes. Let's add it to struct drm_cmdline_mode and
fill it when parsing the named mode.

Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
Tested-by: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>
Link: https://lore.kernel.org/r/20220728-rpi-analog-tv-properties-v9-12-24b168e5bcd5@cerno.tech
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drivers/gpu/drm/drm_modes.c
include/drm/drm_connector.h

index 17b7829..3c8034a 100644 (file)
@@ -1752,22 +1752,24 @@ static int drm_mode_parse_cmdline_options(const char *str,
 
 struct drm_named_mode {
        const char *name;
+       unsigned int pixel_clock_khz;
        unsigned int xres;
        unsigned int yres;
        unsigned int flags;
 };
 
-#define NAMED_MODE(_name, _x, _y, _flags)              \
+#define NAMED_MODE(_name, _pclk, _x, _y, _flags)       \
        {                                               \
                .name = _name,                          \
+               .pixel_clock_khz = _pclk,               \
                .xres = _x,                             \
                .yres = _y,                             \
                .flags = _flags,                        \
        }
 
 static const struct drm_named_mode drm_named_modes[] = {
-       NAMED_MODE("NTSC", 720, 480, DRM_MODE_FLAG_INTERLACE),
-       NAMED_MODE("PAL", 720, 576, DRM_MODE_FLAG_INTERLACE),
+       NAMED_MODE("NTSC", 13500, 720, 480, DRM_MODE_FLAG_INTERLACE),
+       NAMED_MODE("PAL", 13500, 720, 576, DRM_MODE_FLAG_INTERLACE),
 };
 
 static int drm_mode_parse_cmdline_named_mode(const char *name,
@@ -1808,6 +1810,7 @@ static int drm_mode_parse_cmdline_named_mode(const char *name,
                        continue;
 
                strcpy(cmdline_mode->name, mode->name);
+               cmdline_mode->pixel_clock = mode->pixel_clock_khz;
                cmdline_mode->xres = mode->xres;
                cmdline_mode->yres = mode->yres;
                cmdline_mode->interlace = !!(mode->flags & DRM_MODE_FLAG_INTERLACE);
index e641a47..f1cba18 100644 (file)
@@ -1213,6 +1213,13 @@ struct drm_cmdline_mode {
        bool bpp_specified;
 
        /**
+        * @pixel_clock:
+        *
+        * Pixel Clock in kHz. Optional.
+        */
+       unsigned int pixel_clock;
+
+       /**
         * @xres:
         *
         * Active resolution on the X axis, in pixels.