brcm2708: organize kernel patches
[openwrt/staging/wigyori.git] / target / linux / brcm2708 / patches-4.19 / 950-0336-staging-bcm2835-codec-NULL-component-handle-on-queue.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0336-staging-bcm2835-codec-NULL-component-handle-on-queue.patch b/target/linux/brcm2708/patches-4.19/950-0336-staging-bcm2835-codec-NULL-component-handle-on-queue.patch
new file mode 100644 (file)
index 0000000..ee5d01d
--- /dev/null
@@ -0,0 +1,59 @@
+From 140c118a9886b0386d748e6aa7cbd8ba9f9b0ede Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+Date: Tue, 19 Mar 2019 17:55:09 +0000
+Subject: [PATCH] staging: bcm2835-codec: NULL component handle on
+ queue_setup failure
+
+queue_setup tries creating the relevant MMAL component and configures
+the input and output ports as we're expecting to start streaming.
+If the port configuration failed then it destroyed the component,
+but failed to clear the component handle, therefore release tried
+destroying the component again.
+Adds some logging should the port config fail as well.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
+---
+ .../bcm2835-codec/bcm2835-v4l2-codec.c            | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
++++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
+@@ -1776,13 +1776,21 @@ static int bcm2835_codec_create_componen
+       ret = vchiq_mmal_port_set_format(dev->instance,
+                                        &ctx->component->input[0]);
+-      if (ret < 0)
++      if (ret < 0) {
++              v4l2_dbg(1, debug, &dev->v4l2_dev,
++                       "%s: vchiq_mmal_port_set_format ip port failed\n",
++                       __func__);
+               goto destroy_component;
++      }
+       ret = vchiq_mmal_port_set_format(dev->instance,
+                                        &ctx->component->output[0]);
+-      if (ret < 0)
++      if (ret < 0) {
++              v4l2_dbg(1, debug, &dev->v4l2_dev,
++                       "%s: vchiq_mmal_port_set_format op port failed\n",
++                       __func__);
+               goto destroy_component;
++      }
+       if (dev->role == ENCODE) {
+               u32 param = 1;
+@@ -1812,11 +1820,14 @@ static int bcm2835_codec_create_componen
+                                ctx->q_data[V4L2_M2M_DST].sizeimage,
+                                ctx->component->output[0].minimum_buffer.size);
+       }
++      v4l2_dbg(2, debug, &dev->v4l2_dev, "%s: component created as %s\n",
++               __func__, components[dev->role]);
+       return 0;
+ destroy_component:
+       vchiq_mmal_component_finalise(ctx->dev->instance, ctx->component);
++      ctx->component = NULL;
+       return ret;
+ }