bcm27xx: update patches from RPi foundation
[openwrt/staging/luka.git] / target / linux / bcm27xx / patches-5.4 / 950-0480-drm-modes-parse_cmdline-Rework-drm_mode_parse_cmdlin.patch
diff --git a/target/linux/bcm27xx/patches-5.4/950-0480-drm-modes-parse_cmdline-Rework-drm_mode_parse_cmdlin.patch b/target/linux/bcm27xx/patches-5.4/950-0480-drm-modes-parse_cmdline-Rework-drm_mode_parse_cmdlin.patch
new file mode 100644 (file)
index 0000000..1716ebd
--- /dev/null
@@ -0,0 +1,76 @@
+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;