aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-4.19/950-0205-staging-bcm2835-camera-Provide-more-specific-probe-e.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-4.19/950-0205-staging-bcm2835-camera-Provide-more-specific-probe-e.patch')
-rw-r--r--target/linux/bcm27xx/patches-4.19/950-0205-staging-bcm2835-camera-Provide-more-specific-probe-e.patch166
1 files changed, 166 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-4.19/950-0205-staging-bcm2835-camera-Provide-more-specific-probe-e.patch b/target/linux/bcm27xx/patches-4.19/950-0205-staging-bcm2835-camera-Provide-more-specific-probe-e.patch
new file mode 100644
index 0000000000..e7566d182d
--- /dev/null
+++ b/target/linux/bcm27xx/patches-4.19/950-0205-staging-bcm2835-camera-Provide-more-specific-probe-e.patch
@@ -0,0 +1,166 @@
+From 94a174095f29c77574548eea17aacaed5c540757 Mon Sep 17 00:00:00 2001
+From: Stefan Wahren <stefan.wahren@i2se.com>
+Date: Sun, 21 Oct 2018 18:40:07 +0200
+Subject: [PATCH] staging: bcm2835-camera: Provide more specific probe
+ error messages
+
+Currently there is only a catch-all info message which print the
+relevant error code without any context. So add more specific error
+messages in order to narrow down possible issues.
+
+Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
+---
+ .../bcm2835-camera/bcm2835-camera.c | 58 +++++++++++++------
+ 1 file changed, 39 insertions(+), 19 deletions(-)
+
+--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
++++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
+@@ -1552,8 +1552,11 @@ static int mmal_init(struct bm2835_mmal_
+ struct vchiq_mmal_component *camera;
+
+ ret = vchiq_mmal_init(&dev->instance);
+- if (ret < 0)
++ if (ret < 0) {
++ v4l2_err(&dev->v4l2_dev, "%s: vchiq mmal init failed %d\n",
++ __func__, ret);
+ return ret;
++ }
+
+ /* get the camera component ready */
+ ret = vchiq_mmal_component_init(dev->instance, "ril.camera",
+@@ -1562,7 +1565,9 @@ static int mmal_init(struct bm2835_mmal_
+ goto unreg_mmal;
+
+ camera = dev->component[MMAL_COMPONENT_CAMERA];
+- if (camera->outputs < MMAL_CAMERA_PORT_COUNT) {
++ if (camera->outputs < MMAL_CAMERA_PORT_COUNT) {
++ v4l2_err(&dev->v4l2_dev, "%s: too few camera outputs %d needed %d\n",
++ __func__, camera->outputs, MMAL_CAMERA_PORT_COUNT);
+ ret = -EINVAL;
+ goto unreg_camera;
+ }
+@@ -1570,8 +1575,11 @@ static int mmal_init(struct bm2835_mmal_
+ ret = set_camera_parameters(dev->instance,
+ camera,
+ dev);
+- if (ret < 0)
++ if (ret < 0) {
++ v4l2_err(&dev->v4l2_dev, "%s: unable to set camera parameters: %d\n",
++ __func__, ret);
+ goto unreg_camera;
++ }
+
+ /* There was an error in the firmware that meant the camera component
+ * produced BGR instead of RGB.
+@@ -1660,8 +1668,8 @@ static int mmal_init(struct bm2835_mmal_
+
+ if (dev->component[MMAL_COMPONENT_PREVIEW]->inputs < 1) {
+ ret = -EINVAL;
+- pr_debug("too few input ports %d needed %d\n",
+- dev->component[MMAL_COMPONENT_PREVIEW]->inputs, 1);
++ v4l2_err(&dev->v4l2_dev, "%s: too few input ports %d needed %d\n",
++ __func__, dev->component[MMAL_COMPONENT_PREVIEW]->inputs, 1);
+ goto unreg_preview;
+ }
+
+@@ -1674,8 +1682,8 @@ static int mmal_init(struct bm2835_mmal_
+
+ if (dev->component[MMAL_COMPONENT_IMAGE_ENCODE]->inputs < 1) {
+ ret = -EINVAL;
+- v4l2_err(&dev->v4l2_dev, "too few input ports %d needed %d\n",
+- dev->component[MMAL_COMPONENT_IMAGE_ENCODE]->inputs,
++ v4l2_err(&dev->v4l2_dev, "%s: too few input ports %d needed %d\n",
++ __func__, dev->component[MMAL_COMPONENT_IMAGE_ENCODE]->inputs,
+ 1);
+ goto unreg_image_encoder;
+ }
+@@ -1689,8 +1697,8 @@ static int mmal_init(struct bm2835_mmal_
+
+ if (dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->inputs < 1) {
+ ret = -EINVAL;
+- v4l2_err(&dev->v4l2_dev, "too few input ports %d needed %d\n",
+- dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->inputs,
++ v4l2_err(&dev->v4l2_dev, "%s: too few input ports %d needed %d\n",
++ __func__, dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->inputs,
+ 1);
+ goto unreg_vid_encoder;
+ }
+@@ -1719,8 +1727,11 @@ static int mmal_init(struct bm2835_mmal_
+ sizeof(enable));
+ }
+ ret = bm2835_mmal_set_all_camera_controls(dev);
+- if (ret < 0)
++ if (ret < 0) {
++ v4l2_err(&dev->v4l2_dev, "%s: failed to set all camera controls: %d\n",
++ __func__, ret);
+ goto unreg_vid_encoder;
++ }
+
+ return 0;
+
+@@ -1886,21 +1897,29 @@ static int bcm2835_mmal_probe(struct pla
+ snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name),
+ "%s", BM2835_MMAL_MODULE_NAME);
+ ret = v4l2_device_register(NULL, &dev->v4l2_dev);
+- if (ret)
++ if (ret) {
++ dev_err(&pdev->dev, "%s: could not register V4L2 device: %d\n",
++ __func__, ret);
+ goto free_dev;
++ }
+
+ /* setup v4l controls */
+ ret = bm2835_mmal_init_controls(dev, &dev->ctrl_handler);
+- if (ret < 0)
++ if (ret < 0) {
++ v4l2_err(&dev->v4l2_dev, "%s: could not init controls: %d\n",
++ __func__, ret);
+ goto unreg_dev;
++ }
+ dev->v4l2_dev.ctrl_handler = &dev->ctrl_handler;
+
+ /* mmal init */
+ dev->instance = instance;
+ ret = mmal_init(dev);
+- if (ret < 0)
++ if (ret < 0) {
++ v4l2_err(&dev->v4l2_dev, "%s: mmal init failed: %d\n",
++ __func__, ret);
+ goto unreg_dev;
+-
++ }
+ /* initialize queue */
+ q = &dev->capture.vb_vidq;
+ memset(q, 0, sizeof(*q));
+@@ -1918,16 +1937,19 @@ static int bcm2835_mmal_probe(struct pla
+
+ /* initialise video devices */
+ ret = bm2835_mmal_init_device(dev, &dev->vdev);
+- if (ret < 0)
++ if (ret < 0) {
++ v4l2_err(&dev->v4l2_dev, "%s: could not init device: %d\n",
++ __func__, ret);
+ goto unreg_dev;
++ }
+
+ /* Really want to call vidioc_s_fmt_vid_cap with the default
+ * format, but currently the APIs don't join up.
+ */
+ ret = mmal_setup_components(dev, &default_v4l2_format);
+ if (ret < 0) {
+- v4l2_err(&dev->v4l2_dev,
+- "%s: could not setup components\n", __func__);
++ v4l2_err(&dev->v4l2_dev, "%s: could not setup components: %d\n",
++ __func__, ret);
+ goto unreg_dev;
+ }
+
+@@ -1951,8 +1973,6 @@ cleanup_gdev:
+ bcm2835_cleanup_instance(gdev[i]);
+ gdev[i] = NULL;
+ }
+- pr_info("%s: error %d while loading driver\n",
+- BM2835_MMAL_MODULE_NAME, ret);
+
+ cleanup_mmal:
+ vchiq_mmal_finalise(instance);