Commit 54812c77 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

V4L/DVB (8498): uvcvideo: Return sensible min and max values when querying a boolean control.

Although the V4L2 spec states that the minimum and maximum fields may not be
valid for control types other than V4L2_CTRL_TYPE_INTEGER, it makes sense
to set the bounds to 0 and 1 for boolean controls instead of returning
uninitialized values.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@skynet.be>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 90ac5ea3
...@@ -592,6 +592,7 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video, ...@@ -592,6 +592,7 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video,
if (ctrl == NULL) if (ctrl == NULL)
return -EINVAL; return -EINVAL;
memset(v4l2_ctrl, 0, sizeof *v4l2_ctrl);
v4l2_ctrl->id = mapping->id; v4l2_ctrl->id = mapping->id;
v4l2_ctrl->type = mapping->v4l2_type; v4l2_ctrl->type = mapping->v4l2_type;
strncpy(v4l2_ctrl->name, mapping->name, sizeof v4l2_ctrl->name); strncpy(v4l2_ctrl->name, mapping->name, sizeof v4l2_ctrl->name);
...@@ -608,7 +609,8 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video, ...@@ -608,7 +609,8 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video,
v4l2_ctrl->default_value = uvc_get_le_value(data, mapping); v4l2_ctrl->default_value = uvc_get_le_value(data, mapping);
} }
if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) { switch (mapping->v4l2_type) {
case V4L2_CTRL_TYPE_MENU:
v4l2_ctrl->minimum = 0; v4l2_ctrl->minimum = 0;
v4l2_ctrl->maximum = mapping->menu_count - 1; v4l2_ctrl->maximum = mapping->menu_count - 1;
v4l2_ctrl->step = 1; v4l2_ctrl->step = 1;
...@@ -622,6 +624,15 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video, ...@@ -622,6 +624,15 @@ int uvc_query_v4l2_ctrl(struct uvc_video_device *video,
} }
return 0; return 0;
case V4L2_CTRL_TYPE_BOOLEAN:
v4l2_ctrl->minimum = 0;
v4l2_ctrl->maximum = 1;
v4l2_ctrl->step = 1;
return 0;
default:
break;
} }
if (ctrl->info->flags & UVC_CONTROL_GET_MIN) { if (ctrl->info->flags & UVC_CONTROL_GET_MIN) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment