a56836685578a7968d91cb04686012477415cebc
[openwrt/staging/stintel.git] /
1 From 94a174095f29c77574548eea17aacaed5c540757 Mon Sep 17 00:00:00 2001
2 From: Stefan Wahren <stefan.wahren@i2se.com>
3 Date: Sun, 21 Oct 2018 18:40:07 +0200
4 Subject: [PATCH] staging: bcm2835-camera: Provide more specific probe
5 error messages
6
7 Currently there is only a catch-all info message which print the
8 relevant error code without any context. So add more specific error
9 messages in order to narrow down possible issues.
10
11 Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
12 ---
13 .../bcm2835-camera/bcm2835-camera.c | 58 +++++++++++++------
14 1 file changed, 39 insertions(+), 19 deletions(-)
15
16 --- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
17 +++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
18 @@ -1552,8 +1552,11 @@ static int mmal_init(struct bm2835_mmal_
19 struct vchiq_mmal_component *camera;
20
21 ret = vchiq_mmal_init(&dev->instance);
22 - if (ret < 0)
23 + if (ret < 0) {
24 + v4l2_err(&dev->v4l2_dev, "%s: vchiq mmal init failed %d\n",
25 + __func__, ret);
26 return ret;
27 + }
28
29 /* get the camera component ready */
30 ret = vchiq_mmal_component_init(dev->instance, "ril.camera",
31 @@ -1562,7 +1565,9 @@ static int mmal_init(struct bm2835_mmal_
32 goto unreg_mmal;
33
34 camera = dev->component[MMAL_COMPONENT_CAMERA];
35 - if (camera->outputs < MMAL_CAMERA_PORT_COUNT) {
36 + if (camera->outputs < MMAL_CAMERA_PORT_COUNT) {
37 + v4l2_err(&dev->v4l2_dev, "%s: too few camera outputs %d needed %d\n",
38 + __func__, camera->outputs, MMAL_CAMERA_PORT_COUNT);
39 ret = -EINVAL;
40 goto unreg_camera;
41 }
42 @@ -1570,8 +1575,11 @@ static int mmal_init(struct bm2835_mmal_
43 ret = set_camera_parameters(dev->instance,
44 camera,
45 dev);
46 - if (ret < 0)
47 + if (ret < 0) {
48 + v4l2_err(&dev->v4l2_dev, "%s: unable to set camera parameters: %d\n",
49 + __func__, ret);
50 goto unreg_camera;
51 + }
52
53 /* There was an error in the firmware that meant the camera component
54 * produced BGR instead of RGB.
55 @@ -1660,8 +1668,8 @@ static int mmal_init(struct bm2835_mmal_
56
57 if (dev->component[MMAL_COMPONENT_PREVIEW]->inputs < 1) {
58 ret = -EINVAL;
59 - pr_debug("too few input ports %d needed %d\n",
60 - dev->component[MMAL_COMPONENT_PREVIEW]->inputs, 1);
61 + v4l2_err(&dev->v4l2_dev, "%s: too few input ports %d needed %d\n",
62 + __func__, dev->component[MMAL_COMPONENT_PREVIEW]->inputs, 1);
63 goto unreg_preview;
64 }
65
66 @@ -1674,8 +1682,8 @@ static int mmal_init(struct bm2835_mmal_
67
68 if (dev->component[MMAL_COMPONENT_IMAGE_ENCODE]->inputs < 1) {
69 ret = -EINVAL;
70 - v4l2_err(&dev->v4l2_dev, "too few input ports %d needed %d\n",
71 - dev->component[MMAL_COMPONENT_IMAGE_ENCODE]->inputs,
72 + v4l2_err(&dev->v4l2_dev, "%s: too few input ports %d needed %d\n",
73 + __func__, dev->component[MMAL_COMPONENT_IMAGE_ENCODE]->inputs,
74 1);
75 goto unreg_image_encoder;
76 }
77 @@ -1689,8 +1697,8 @@ static int mmal_init(struct bm2835_mmal_
78
79 if (dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->inputs < 1) {
80 ret = -EINVAL;
81 - v4l2_err(&dev->v4l2_dev, "too few input ports %d needed %d\n",
82 - dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->inputs,
83 + v4l2_err(&dev->v4l2_dev, "%s: too few input ports %d needed %d\n",
84 + __func__, dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->inputs,
85 1);
86 goto unreg_vid_encoder;
87 }
88 @@ -1719,8 +1727,11 @@ static int mmal_init(struct bm2835_mmal_
89 sizeof(enable));
90 }
91 ret = bm2835_mmal_set_all_camera_controls(dev);
92 - if (ret < 0)
93 + if (ret < 0) {
94 + v4l2_err(&dev->v4l2_dev, "%s: failed to set all camera controls: %d\n",
95 + __func__, ret);
96 goto unreg_vid_encoder;
97 + }
98
99 return 0;
100
101 @@ -1880,21 +1891,29 @@ static int bcm2835_mmal_probe(struct pla
102 snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name),
103 "%s", BM2835_MMAL_MODULE_NAME);
104 ret = v4l2_device_register(NULL, &dev->v4l2_dev);
105 - if (ret)
106 + if (ret) {
107 + dev_err(&pdev->dev, "%s: could not register V4L2 device: %d\n",
108 + __func__, ret);
109 goto free_dev;
110 + }
111
112 /* setup v4l controls */
113 ret = bm2835_mmal_init_controls(dev, &dev->ctrl_handler);
114 - if (ret < 0)
115 + if (ret < 0) {
116 + v4l2_err(&dev->v4l2_dev, "%s: could not init controls: %d\n",
117 + __func__, ret);
118 goto unreg_dev;
119 + }
120 dev->v4l2_dev.ctrl_handler = &dev->ctrl_handler;
121
122 /* mmal init */
123 dev->instance = instance;
124 ret = mmal_init(dev);
125 - if (ret < 0)
126 + if (ret < 0) {
127 + v4l2_err(&dev->v4l2_dev, "%s: mmal init failed: %d\n",
128 + __func__, ret);
129 goto unreg_dev;
130 -
131 + }
132 /* initialize queue */
133 q = &dev->capture.vb_vidq;
134 memset(q, 0, sizeof(*q));
135 @@ -1912,16 +1931,19 @@ static int bcm2835_mmal_probe(struct pla
136
137 /* initialise video devices */
138 ret = bm2835_mmal_init_device(dev, &dev->vdev);
139 - if (ret < 0)
140 + if (ret < 0) {
141 + v4l2_err(&dev->v4l2_dev, "%s: could not init device: %d\n",
142 + __func__, ret);
143 goto unreg_dev;
144 + }
145
146 /* Really want to call vidioc_s_fmt_vid_cap with the default
147 * format, but currently the APIs don't join up.
148 */
149 ret = mmal_setup_components(dev, &default_v4l2_format);
150 if (ret < 0) {
151 - v4l2_err(&dev->v4l2_dev,
152 - "%s: could not setup components\n", __func__);
153 + v4l2_err(&dev->v4l2_dev, "%s: could not setup components: %d\n",
154 + __func__, ret);
155 goto unreg_dev;
156 }
157
158 @@ -1945,8 +1967,6 @@ cleanup_gdev:
159 bcm2835_cleanup_instance(gdev[i]);
160 gdev[i] = NULL;
161 }
162 - pr_info("%s: error %d while loading driver\n",
163 - BM2835_MMAL_MODULE_NAME, ret);
164
165 return ret;
166 }