You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openwrt/target/linux/bcm27xx/patches-5.4/950-0192-staging-bcm2835-co...

60 lines
2.0 KiB
Diff

From ee61cd0a1cd42707812e3662c1896f8e0c1155df 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;
}