summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/camera.c
diff options
context:
space:
mode:
authorLaurent Pinchart2016-01-15 00:33:55 +0100
committerGreg Kroah-Hartman2016-01-15 01:53:10 +0100
commit4068487ce3dba22bdc7bf34e7327b474494430b5 (patch)
tree70697a46dca9b2e92c5724f87edd131bca81c070 /drivers/staging/greybus/camera.c
parentgreybus: audio: Enable codec module detection on different slots (diff)
downloadkernel-qcow2-linux-4068487ce3dba22bdc7bf34e7327b474494430b5.tar.gz
kernel-qcow2-linux-4068487ce3dba22bdc7bf34e7327b474494430b5.tar.xz
kernel-qcow2-linux-4068487ce3dba22bdc7bf34e7327b474494430b5.zip
greybus: camera: Return the result flags from the configure_streams response
And return the response num_streams field through a pointer variable instead of using the return value of the function as both an error code and a positive number of streams, it makes the API more consistent. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/camera.c')
-rw-r--r--drivers/staging/greybus/camera.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/staging/greybus/camera.c b/drivers/staging/greybus/camera.c
index a69797b13c84..deb55da9032e 100644
--- a/drivers/staging/greybus/camera.c
+++ b/drivers/staging/greybus/camera.c
@@ -108,13 +108,14 @@ struct ap_csi_config_request {
} __packed;
static int gb_camera_configure_streams(struct gb_camera *gcam,
- unsigned int nstreams,
- unsigned int flags,
+ unsigned int *num_streams,
+ unsigned int *flags,
struct gb_camera_stream_config *streams)
{
struct gb_camera_configure_streams_request *req;
struct gb_camera_configure_streams_response *resp;
struct ap_csi_config_request csi_cfg;
+ unsigned int nstreams = *num_streams;
unsigned int i;
size_t req_size;
size_t resp_size;
@@ -134,7 +135,7 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
}
req->num_streams = nstreams;
- req->flags = flags;
+ req->flags = *flags;
req->padding = 0;
for (i = 0; i < nstreams; ++i) {
@@ -165,6 +166,8 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
goto done;
}
+ *flags = resp->flags;
+
for (i = 0; i < nstreams; ++i) {
struct gb_camera_stream_config_response *cfg = &resp->config[i];
@@ -205,7 +208,8 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
gcam_err(gcam, "failed to %s the CSI transmitter\n",
nstreams ? "start" : "stop");
- ret = resp->num_streams;
+ *num_streams = resp->num_streams;
+ ret = 0;
done:
kfree(req);
@@ -316,6 +320,7 @@ static int gb_camera_op_configure_streams(void *priv, unsigned int nstreams,
{
struct gb_camera *gcam = priv;
struct gb_camera_stream_config *gb_streams;
+ unsigned int flags = 0;
unsigned int i;
int ret;
@@ -333,7 +338,7 @@ static int gb_camera_op_configure_streams(void *priv, unsigned int nstreams,
gb_camera_mbus_to_gb(streams[i].pixel_code);
}
- ret = gb_camera_configure_streams(gcam, nstreams, 0, gb_streams);
+ ret = gb_camera_configure_streams(gcam, &nstreams, &flags, gb_streams);
if (ret < 0)
goto done;
@@ -455,12 +460,11 @@ static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
goto done;
}
- ret = gb_camera_configure_streams(gcam, nstreams, flags, streams);
+ ret = gb_camera_configure_streams(gcam, &nstreams, &flags, streams);
if (ret < 0)
goto done;
- nstreams = ret;
- buffer->length = sprintf(buffer->data, "%u;", nstreams);
+ buffer->length = sprintf(buffer->data, "%u;%u;", nstreams, flags);
for (i = 0; i < nstreams; ++i) {
struct gb_camera_stream_config *stream = &streams[i];