Commit 739b200c authored by Hans de Goede's avatar Hans de Goede
Browse files

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: default avatarMaxime Ripard <mripard@kernel.org>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-5-hdegoede@redhat.com
parent cfb0881b
Loading
Loading
Loading
Loading
+9 −12
Original line number Diff line number Diff line
@@ -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;