OSDN Git Service

drm/modes: Only consider bpp and refresh before options
authorMaxime Ripard <maxime@cerno.tech>
Thu, 29 Sep 2022 16:31:06 +0000 (18:31 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Mon, 10 Oct 2022 11:58:43 +0000 (13:58 +0200)
Some video= options might have a value that contains a dash. However, the
command line parsing mode considers all dashes as the separator between the
mode and the bpp count.

Let's rework the parsing code a bit to only consider a dash as the bpp
separator if it before a comma, the options separator.

A follow-up patch will add a unit-test for this once such an option is
introduced.

Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20220728-rpi-analog-tv-properties-v4-12-60d38873f782@cerno.tech
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drivers/gpu/drm/drm_modes.c

index 304004f..e022118 100644 (file)
@@ -1801,20 +1801,22 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,
 
        name = mode_option;
 
+       /* Locate the start of named options */
+       options_ptr = strchr(name, ',');
+       if (options_ptr)
+               options_off = options_ptr - name;
+       else
+               options_off = strlen(name);
+
        /* Try to locate the bpp and refresh specifiers, if any */
-       bpp_ptr = strchr(name, '-');
+       bpp_ptr = strnchr(name, options_off, '-');
        if (bpp_ptr)
                bpp_off = bpp_ptr - name;
 
-       refresh_ptr = strchr(name, '@');
+       refresh_ptr = strnchr(name, options_off, '@');
        if (refresh_ptr)
                refresh_off = refresh_ptr - name;
 
-       /* Locate the start of named options */
-       options_ptr = strchr(name, ',');
-       if (options_ptr)
-               options_off = options_ptr - name;
-
        /* Locate the end of the name / resolution, and parse it */
        if (bpp_ptr) {
                mode_end = bpp_off;