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.
167 lines
5.3 KiB
Diff
167 lines
5.3 KiB
Diff
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);
|