You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.2 KiB
Diff
77 lines
2.2 KiB
Diff
From 5b6257773b43e7a7b28f86359d2e9ebe15346b78 Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Mon, 18 Nov 2019 16:51:26 +0100
|
|
Subject: [PATCH] drm/modes: parse_cmdline: Rework
|
|
drm_mode_parse_cmdline_options()
|
|
|
|
Commit 739b200c2edcaaa7a86f37b0c11db57956433dfb upstream.
|
|
|
|
Refactor drm_mode_parse_cmdline_options() so that it takes a pointer
|
|
to the first option, rather then a pointer to the ',' before the first
|
|
option.
|
|
|
|
This is a preparation patch for allowing parsing of stand-alone options
|
|
without a mode before them, e.g.: video=HDMI-1:margin_right=14,...
|
|
|
|
Acked-by: Maxime Ripard <mripard@kernel.org>
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-5-hdegoede@redhat.com
|
|
---
|
|
drivers/gpu/drm/drm_modes.c | 21 +++++++++------------
|
|
1 file changed, 9 insertions(+), 12 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/drm_modes.c
|
|
+++ b/drivers/gpu/drm/drm_modes.c
|
|
@@ -1591,23 +1591,21 @@ static int drm_mode_parse_cmdline_int(co
|
|
return 0;
|
|
}
|
|
|
|
-static int drm_mode_parse_cmdline_options(const char *str, size_t len,
|
|
+static int drm_mode_parse_cmdline_options(const char *str,
|
|
const struct drm_connector *connector,
|
|
struct drm_cmdline_mode *mode)
|
|
{
|
|
unsigned int deg, margin, rotation = 0;
|
|
- const char *sep = str;
|
|
+ const char *delim, *option, *sep;
|
|
|
|
- while ((sep = strchr(sep, ','))) {
|
|
- const char *delim, *option;
|
|
-
|
|
- option = sep + 1;
|
|
+ option = str;
|
|
+ do {
|
|
delim = strchr(option, '=');
|
|
if (!delim) {
|
|
delim = strchr(option, ',');
|
|
|
|
if (!delim)
|
|
- delim = str + len;
|
|
+ delim = option + strlen(option);
|
|
}
|
|
|
|
if (!strncmp(option, "rotate", delim - option)) {
|
|
@@ -1661,8 +1659,9 @@ static int drm_mode_parse_cmdline_option
|
|
} else {
|
|
return -EINVAL;
|
|
}
|
|
- sep = delim;
|
|
- }
|
|
+ sep = strchr(delim, ',');
|
|
+ option = sep + 1;
|
|
+ } while (sep);
|
|
|
|
if (!(rotation & DRM_MODE_ROTATE_MASK))
|
|
rotation |= DRM_MODE_ROTATE_0;
|
|
@@ -1862,9 +1861,7 @@ bool drm_mode_parse_command_line_for_con
|
|
}
|
|
|
|
if (options_ptr) {
|
|
- int len = strlen(name) - (options_ptr - name);
|
|
-
|
|
- ret = drm_mode_parse_cmdline_options(options_ptr, len,
|
|
+ ret = drm_mode_parse_cmdline_options(options_ptr + 1,
|
|
connector, mode);
|
|
if (ret)
|
|
return false;
|