From 90c258ba4a36f610302cdea6ff3b4e1a0811f50e Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Thu, 29 Sep 2022 18:31:06 +0200 Subject: [PATCH] drm/modes: Only consider bpp and refresh before options 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 Link: https://lore.kernel.org/r/20220728-rpi-analog-tv-properties-v4-12-60d38873f782@cerno.tech Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_modes.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 304004fb80aa..e0221183135b 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -1801,19 +1801,21 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option, name = mode_option; - /* Try to locate the bpp and refresh specifiers, if any */ - bpp_ptr = strchr(name, '-'); - if (bpp_ptr) - bpp_off = bpp_ptr - name; - - refresh_ptr = strchr(name, '@'); - 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; + else + options_off = strlen(name); + + /* Try to locate the bpp and refresh specifiers, if any */ + bpp_ptr = strnchr(name, options_off, '-'); + if (bpp_ptr) + bpp_off = bpp_ptr - name; + + refresh_ptr = strnchr(name, options_off, '@'); + if (refresh_ptr) + refresh_off = refresh_ptr - name; /* Locate the end of the name / resolution, and parse it */ if (bpp_ptr) {