summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/camera.c
diff options
context:
space:
mode:
authorJacopo Mondi2016-01-08 17:13:20 +0100
committerGreg Kroah-Hartman2016-01-09 07:47:07 +0100
commitb787d413e0d99ae74e21cdab600ea3c5b0886ec2 (patch)
tree3eebc001d8bae281cd283d688d827eefaa6994a8 /drivers/staging/greybus/camera.c
parentgreybus: svc: Replace link config hack with standard operation (diff)
downloadkernel-qcow2-linux-b787d413e0d99ae74e21cdab600ea3c5b0886ec2.tar.gz
kernel-qcow2-linux-b787d413e0d99ae74e21cdab600ea3c5b0886ec2.tar.xz
kernel-qcow2-linux-b787d413e0d99ae74e21cdab600ea3c5b0886ec2.zip
greybus: camera: Add support for flags to stream_configure
Add support for the flags field of the stream configure request that was recently added to the camera protocol and update the debugfs arguments parsing accordingly. The stream configure response layout is also updated to the latest protocol specification. Signed-off-by: Jacopo Mondi <jacopo.mondi@linaro.org> 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.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/staging/greybus/camera.c b/drivers/staging/greybus/camera.c
index 4e96e1fcfcdf..06ea5293d389 100644
--- a/drivers/staging/greybus/camera.c
+++ b/drivers/staging/greybus/camera.c
@@ -76,6 +76,7 @@ struct gb_camera_stream_config {
static int gb_camera_configure_streams(struct gb_camera *gcam,
unsigned int nstreams,
+ unsigned int flags,
struct gb_camera_stream_config *streams)
{
struct gb_camera_configure_streams_request *req;
@@ -99,7 +100,8 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
goto done;
}
- req->num_streams = cpu_to_le16(nstreams);
+ req->num_streams = nstreams;
+ req->flags = flags;
req->padding = 0;
for (i = 0; i < nstreams; ++i) {
@@ -117,9 +119,9 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
if (ret < 0)
goto done;
- if (le16_to_cpu(resp->num_streams) > nstreams) {
+ if (resp->num_streams > nstreams) {
gcam_dbg(gcam, "got #streams %u > request %u\n",
- le16_to_cpu(resp->num_streams), nstreams);
+ resp->num_streams, nstreams);
ret = -EIO;
goto done;
}
@@ -169,7 +171,7 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
gcam_err(gcam, "failed to %s the CSI transmitter\n",
nstreams ? "start" : "stop");
- ret = le16_to_cpu(resp->num_streams);
+ ret = resp->num_streams;
done:
kfree(req);
@@ -266,13 +268,13 @@ static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
&gcam->debugfs.buffers[GB_CAMERA_DEBUGFS_BUFFER_STREAMS];
struct gb_camera_stream_config *streams;
unsigned int nstreams;
- const char *sep = ";";
+ unsigned int flags;
unsigned int i;
char *token;
int ret;
/* Retrieve number of streams to configure */
- token = strsep(&buf, sep);
+ token = strsep(&buf, ";");
if (token == NULL)
return -EINVAL;
@@ -283,6 +285,14 @@ static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
if (nstreams > GB_CAMERA_MAX_STREAMS)
return -EINVAL;
+ token = strsep(&buf, ";");
+ if (token == NULL)
+ return -EINVAL;
+
+ ret = kstrtouint(token, 10, &flags);
+ if (ret < 0)
+ return ret;
+
/* For each stream to configure parse width, height and format */
streams = kzalloc(nstreams * sizeof(*streams), GFP_KERNEL);
if (!streams)
@@ -320,7 +330,7 @@ static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
goto done;
}
- ret = gb_camera_configure_streams(gcam, nstreams, streams);
+ ret = gb_camera_configure_streams(gcam, nstreams, flags, streams);
if (ret < 0)
goto done;