brcm2708: update to latest patches from RPi foundation
[openwrt/staging/chunkeey.git] / target / linux / brcm2708 / patches-4.19 / 950-0735-media-bcm2835-unicam-Replace-hard-coded-loop-limit-w.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0735-media-bcm2835-unicam-Replace-hard-coded-loop-limit-w.patch b/target/linux/brcm2708/patches-4.19/950-0735-media-bcm2835-unicam-Replace-hard-coded-loop-limit-w.patch
new file mode 100644 (file)
index 0000000..cb9a82b
--- /dev/null
@@ -0,0 +1,44 @@
+From 1a013467030ffd6f1958b8a4db1b5312213fb9bd Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+Date: Thu, 17 Oct 2019 10:16:16 +0100
+Subject: [PATCH] media: bcm2835-unicam: Replace hard coded loop limit
+ with a define
+
+In order to protect against a dodgy sensor driver never returning
+an error from enum_mbus_code there was a hardcoded value of 128
+that aborted the loop.
+There is a need to call enum_mbus_code from elsewhere, so move that
+number to a define so it is common across calls.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
+---
+ drivers/media/platform/bcm2835/bcm2835-unicam.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- a/drivers/media/platform/bcm2835/bcm2835-unicam.c
++++ b/drivers/media/platform/bcm2835/bcm2835-unicam.c
+@@ -97,6 +97,11 @@ MODULE_PARM_DESC(debug, "Debug level 0-3
+ #define unicam_err(dev, fmt, arg...)  \
+               v4l2_err(&(dev)->v4l2_dev, fmt, ##arg)
++/* To protect against a dodgy sensor driver never returning an error from
++ * enum_mbus_code, set a maximum index value to be used.
++ */
++#define MAX_ENUM_MBUS_CODE    128
++
+ /*
+  * Stride is a 16 bit register, but also has to be a multiple of 16.
+  */
+@@ -738,11 +743,7 @@ static int unicam_enum_fmt_vid_cap(struc
+       int ret = 0;
+       int i;
+-      /* Loop whilst the sensor driver says it has more formats, but add a
+-       * failsafe against a dodgy driver at 128 (more than any sensor will
+-       * ever sensibly advertise)
+-       */
+-      for (i = 0; !ret && i < 128 ; i++) {
++      for (i = 0; !ret && i < MAX_ENUM_MBUS_CODE; i++) {
+               memset(&mbus_code, 0, sizeof(mbus_code));
+               mbus_code.index = i;