|
@@ -899,6 +899,44 @@ static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int __uvc_ctrl_get(struct uvc_video_chain *chain,
|
|
|
+ struct uvc_control *ctrl, struct uvc_control_mapping *mapping,
|
|
|
+ s32 *value)
|
|
|
+{
|
|
|
+ struct uvc_menu_info *menu;
|
|
|
+ unsigned int i;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (!ctrl->loaded) {
|
|
|
+ ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id,
|
|
|
+ chain->dev->intfnum, ctrl->info.selector,
|
|
|
+ uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
|
|
|
+ ctrl->info.size);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ ctrl->loaded = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ *value = mapping->get(mapping, UVC_GET_CUR,
|
|
|
+ uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT));
|
|
|
+
|
|
|
+ if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
|
|
|
+ menu = mapping->menu_info;
|
|
|
+ for (i = 0; i < mapping->menu_count; ++i, ++menu) {
|
|
|
+ if (menu->value == *value) {
|
|
|
+ *value = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
|
|
|
struct uvc_control *ctrl,
|
|
|
struct uvc_control_mapping *mapping,
|
|
@@ -1158,44 +1196,6 @@ done:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int __uvc_ctrl_get(struct uvc_video_chain *chain,
|
|
|
- struct uvc_control *ctrl, struct uvc_control_mapping *mapping,
|
|
|
- s32 *value)
|
|
|
-{
|
|
|
- struct uvc_menu_info *menu;
|
|
|
- unsigned int i;
|
|
|
- int ret;
|
|
|
-
|
|
|
- if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- if (!ctrl->loaded) {
|
|
|
- ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id,
|
|
|
- chain->dev->intfnum, ctrl->info.selector,
|
|
|
- uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
|
|
|
- ctrl->info.size);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
- ctrl->loaded = 1;
|
|
|
- }
|
|
|
-
|
|
|
- *value = mapping->get(mapping, UVC_GET_CUR,
|
|
|
- uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT));
|
|
|
-
|
|
|
- if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
|
|
|
- menu = mapping->menu_info;
|
|
|
- for (i = 0; i < mapping->menu_count; ++i, ++menu) {
|
|
|
- if (menu->value == *value) {
|
|
|
- *value = i;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
int uvc_ctrl_get(struct uvc_video_chain *chain,
|
|
|
struct v4l2_ext_control *xctrl)
|
|
|
{
|