drm/modes: parse_cmdline: Rework drm_mode_parse_cmdline_options()

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
This commit is contained in:
Hans de Goede 2019-11-18 16:51:26 +01:00
parent cfb0881b8f
commit 739b200c2e

View File

@ -1591,23 +1591,21 @@ static int drm_mode_parse_cmdline_int(const char *delim, unsigned int *int_ret)
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_options(const char *str, size_t len,
} else {
return -EINVAL;
}
sep = delim;
}
sep = strchr(delim, ',');
option = sep + 1;
} while (sep);
mode->rotation_reflection = rotation;
@ -1855,9 +1854,7 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,
}
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;