greybus: camera: Return the result flags from the configure_streams response
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Thu, 14 Jan 2016 23:33:55 +0000 (01:33 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 15 Jan 2016 00:53:10 +0000 (16:53 -0800)
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>
drivers/staging/greybus/camera.c

index a69797b13c845357d00ebee593586108b7d5a504..deb55da9032e8b317c924f7fa1375cf3a3c661a4 100644 (file)
@@ -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];