Lines Matching refs:chain

933 static struct uvc_control *uvc_find_control(struct uvc_video_chain *chain,
946 list_for_each_entry(entity, &chain->entities, chain) {
953 uvc_dbg(chain->dev, CONTROL, "Control 0x%08x not found\n",
959 static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain,
965 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id,
966 chain->dev->intfnum, ctrl->info.selector,
974 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id,
975 chain->dev->intfnum, ctrl->info.selector,
982 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id,
983 chain->dev->intfnum, ctrl->info.selector,
990 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id,
991 chain->dev->intfnum, ctrl->info.selector,
1004 uvc_warn_once(chain->dev, UVC_WARN_XU_GET_RES,
1042 static int __uvc_ctrl_load_cur(struct uvc_video_chain *chain,
1061 ret = ctrl->entity->get_cur(chain->dev, ctrl->entity,
1065 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR,
1066 ctrl->entity->id, chain->dev->intfnum,
1078 static int __uvc_ctrl_get(struct uvc_video_chain *chain,
1088 ret = __uvc_ctrl_load_cur(chain, ctrl);
1098 static int __uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id,
1107 if (!(chain->ctrl_class_bitmap & BIT(i)))
1122 static int uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id,
1127 idx = __uvc_query_v4l2_class(chain, req_id, found_id);
1151 int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id,
1164 if (__uvc_query_v4l2_class(chain, v4l2_id, 0) >= 0)
1167 ctrl = uvc_find_control(chain, v4l2_id, &mapping);
1196 ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val);
1236 static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
1262 int ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val);
1271 int ret = uvc_ctrl_populate_cache(chain, ctrl);
1340 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
1347 ret = mutex_lock_interruptible(&chain->ctrl_mutex);
1353 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, 0, v4l2_ctrl);
1358 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping);
1370 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id,
1376 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl);
1378 mutex_unlock(&chain->ctrl_mutex);
1391 int uvc_query_v4l2_menu(struct uvc_video_chain *chain,
1408 ret = mutex_lock_interruptible(&chain->ctrl_mutex);
1412 ctrl = uvc_find_control(chain, query_menu->id, &mapping);
1427 ret = uvc_ctrl_populate_cache(chain, ctrl);
1453 mutex_unlock(&chain->ctrl_mutex);
1461 static void uvc_ctrl_fill_event(struct uvc_video_chain *chain,
1469 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
1491 static void uvc_ctrl_send_event(struct uvc_video_chain *chain,
1502 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes);
1517 static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain,
1529 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0)
1532 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes);
1535 void uvc_ctrl_status_event(struct uvc_video_chain *chain,
1542 mutex_lock(&chain->ctrl_mutex);
1558 uvc_ctrl_send_slave_event(chain, handle, ctrl,
1562 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value,
1566 mutex_unlock(&chain->ctrl_mutex);
1576 uvc_ctrl_status_event(w->chain, w->ctrl, w->data);
1590 bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain,
1593 struct uvc_device *dev = chain->dev;
1603 w->chain = chain;
1634 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
1654 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl,
1667 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping,
1679 ret = mutex_lock_interruptible(&handle->chain->ctrl_mutex);
1683 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0) {
1688 ctrl = uvc_find_control(handle->chain, sev->id, &mapping);
1700 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
1703 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val,
1714 mutex_unlock(&handle->chain->ctrl_mutex);
1722 mutex_lock(&handle->chain->ctrl_mutex);
1723 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0)
1727 mutex_unlock(&handle->chain->ctrl_mutex);
1761 int uvc_ctrl_begin(struct uvc_video_chain *chain)
1763 return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0;
1844 struct uvc_video_chain *chain = handle->chain;
1850 list_for_each_entry(entity, &chain->entities, chain) {
1851 ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback,
1863 mutex_unlock(&chain->ctrl_mutex);
1867 int uvc_ctrl_get(struct uvc_video_chain *chain,
1873 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0)
1876 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1880 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
1886 struct uvc_video_chain *chain = handle->chain;
1895 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0)
1898 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1908 ret = uvc_ctrl_populate_cache(chain, ctrl);
1933 ret = uvc_ctrl_populate_cache(chain, ctrl);
1963 ret = uvc_ctrl_populate_cache(chain, ctrl);
1985 ret = __uvc_ctrl_load_cur(chain, ctrl);
2165 int uvc_xu_ctrl_query(struct uvc_video_chain *chain,
2179 list_for_each_entry(entity, &chain->entities, chain) {
2188 uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n",
2204 uvc_dbg(chain->dev, CONTROL, "Control %pUl/%u not found\n",
2209 if (mutex_lock_interruptible(&chain->ctrl_mutex))
2212 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl);
2274 ret = uvc_query_ctrl(chain->dev, xqry->query, xqry->unit,
2275 chain->dev->intfnum, xqry->selector, data, size);
2284 mutex_unlock(&chain->ctrl_mutex);
2363 static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
2417 chain->ctrl_class_bitmap |= BIT(i);
2423 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n",
2437 int uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
2440 struct uvc_device *dev = chain->dev;
2454 /* Search for the matching (GUID/CS) control on the current chain */
2455 list_for_each_entry(entity, &chain->entities, chain) {
2476 if (mutex_lock_interruptible(&chain->ctrl_mutex))
2513 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2518 mutex_unlock(&chain->ctrl_mutex);
2589 static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
2609 uvc_ctrl_add_info(chain->dev, ctrl, info);
2616 uvc_ctrl_get_flags(chain->dev, ctrl, &ctrl->info);
2631 if (chain->dev->info->mappings) {
2634 for (i = 0; chain->dev->info->mappings[i]; ++i) {
2636 chain->dev->info->mappings[i];
2640 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2655 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2659 mappings = chain->dev->uvc_version < 0x0150
2667 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2674 static int uvc_ctrl_init_chain(struct uvc_video_chain *chain)
2680 list_for_each_entry(entity, &chain->entities, chain) {
2700 uvc_ctrl_prune_entity(chain->dev, entity);
2722 uvc_ctrl_init_ctrl(chain, ctrl);
2732 struct uvc_video_chain *chain;
2737 list_for_each_entry(chain, &dev->chains, list) {
2738 ret = uvc_ctrl_init_chain(chain);