diff options
author | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2018-05-25 16:31:33 +0100 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-05-26 18:33:26 +0300 |
commit | 7f04878e79b173dbaca546a283850f44188d8840 (patch) | |
tree | 59fa5c5e5dea60b4d7e9a0dbd64907c735b33708 /configfs.c | |
parent | 83fa2cb53742f43c3a254d0453bd96048ee29a82 (diff) |
configfs: Handle interface numbers
Store the function configuration pointer in the uvc_device, and use it
to identify and store the interface numbers from configfs.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'configfs.c')
-rw-r--r-- | configfs.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -199,6 +199,9 @@ static char *udc_find_video_device(const char *udc, const char *function) */ static const struct uvc_function_config g_webcam_config = { + .control_interface = 0, + .streaming_interface = 1, + .streaming_interval = 1, .streaming_maxburst = 0, .streaming_maxpacket = 1024, @@ -266,6 +269,26 @@ void configfs_free_uvc_function(struct uvc_function_config *fc) free(fc); } +static int configfs_parse_interfaces(const char *fpath, + struct uvc_function_config *fc) +{ + int ret; + + ret = attribute_read_uint(fpath, "control/bInterfaceNumber", + &fc->control_interface); + + ret = ret ? : attribute_read_uint(fpath, "streaming/bInterfaceNumber", + &fc->streaming_interface); + + if (ret) { + printf("Failed to obtain interface numbers, using defaults\n"); + fc->control_interface = 0; + fc->streaming_interface = 1; + } + + return 0; +} + /* * configfs_parse_uvc_function - Parse a UVC function configuration in ConfigFS * @function: The function name @@ -323,6 +346,9 @@ struct uvc_function_config *configfs_parse_uvc_function(const char *function) if (!fc->video) ret = -ENODEV; + /* Identify interface numbers, or fall back to defaults. */ + configfs_parse_interfaces(fpath, fc); + ret = ret ? : attribute_read_uint(fpath, "streaming_interval", &fc->streaming_interval); |