Lines Matching full:chain

573 	struct uvc_video_chain *chain, struct uvc_control *ctrl)
586 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id,
587 chain->dev->intfnum, ctrl->info.selector,
596 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id,
597 chain->dev->intfnum, ctrl->info.selector,
603 if (chain->dev->uvc_version < 0x150)
608 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id,
609 chain->dev->intfnum, ctrl->info.selector,
617 uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id,
618 chain->dev->intfnum, ctrl->info.selector,
1173 static struct uvc_control *uvc_find_control(struct uvc_video_chain *chain,
1187 list_for_each_entry(entity, &chain->entities, chain) {
1195 uvc_dbg(chain->dev, CONTROL, "Control 0x%08x not found\n",
1201 static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain,
1207 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id,
1208 chain->dev->intfnum, ctrl->info.selector,
1216 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id,
1217 chain->dev->intfnum, ctrl->info.selector,
1224 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id,
1225 chain->dev->intfnum, ctrl->info.selector,
1232 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id,
1233 chain->dev->intfnum, ctrl->info.selector,
1246 uvc_warn_once(chain->dev, UVC_WARN_XU_GET_RES,
1258 static int __uvc_ctrl_load_cur(struct uvc_video_chain *chain,
1277 ret = ctrl->entity->get_cur(chain->dev, ctrl->entity,
1281 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR,
1282 ctrl->entity->id, chain->dev->intfnum,
1294 static int __uvc_ctrl_get(struct uvc_video_chain *chain,
1304 ret = __uvc_ctrl_load_cur(chain, ctrl);
1314 static int __uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id,
1324 if (!(chain->ctrl_class_bitmap & BIT(i)))
1339 static int uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id,
1345 idx = __uvc_query_v4l2_class(chain, req_id, found_id);
1400 int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id,
1412 if (__uvc_query_v4l2_class(chain, v4l2_id, 0) >= 0)
1415 ctrl = uvc_find_control(chain, v4l2_id, &mapping);
1446 ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val);
1492 static int __uvc_queryctrl_boundaries(struct uvc_video_chain *chain,
1502 ret = uvc_ctrl_populate_cache(chain, ctrl);
1577 static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
1613 ret = __uvc_ctrl_get(chain, master_ctrl, master_map,
1622 dev_warn_ratelimited(&chain->dev->udev->dev,
1644 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, v4l2_ctrl);
1646 dev_warn(&chain->dev->udev->dev,
1658 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
1665 ret = mutex_lock_interruptible(&chain->ctrl_mutex);
1671 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, 0, v4l2_ctrl);
1676 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping);
1688 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id,
1694 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl);
1696 mutex_unlock(&chain->ctrl_mutex);
1709 int uvc_query_v4l2_menu(struct uvc_video_chain *chain,
1726 ret = mutex_lock_interruptible(&chain->ctrl_mutex);
1730 ctrl = uvc_find_control(chain, query_menu->id, &mapping);
1745 ret = uvc_ctrl_populate_cache(chain, ctrl);
1771 mutex_unlock(&chain->ctrl_mutex);
1779 static void uvc_ctrl_fill_event(struct uvc_video_chain *chain,
1787 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
1809 static void uvc_ctrl_send_event(struct uvc_video_chain *chain,
1820 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes);
1835 static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain,
1848 __uvc_ctrl_get(chain, ctrl, mapping, &val) == 0)
1851 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes);
1858 lockdep_assert_held(&handle->chain->ctrl_mutex);
1875 ret = uvc_pm_get(handle->chain->dev);
1886 lockdep_assert_held(&ctrl->handle->chain->ctrl_mutex);
1894 uvc_pm_put(ctrl->handle->chain->dev);
1899 void uvc_ctrl_status_event(struct uvc_video_chain *chain,
1906 mutex_lock(&chain->ctrl_mutex);
1931 uvc_ctrl_send_slave_event(chain, handle, ctrl,
1935 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value,
1939 mutex_unlock(&chain->ctrl_mutex);
1949 uvc_ctrl_status_event(w->chain, w->ctrl, w->data);
1963 bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain,
1966 struct uvc_device *dev = chain->dev;
1974 w->chain = chain;
2009 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
2031 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl,
2048 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping,
2060 ret = mutex_lock_interruptible(&handle->chain->ctrl_mutex);
2064 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0) {
2069 ctrl = uvc_find_control(handle->chain, sev->id, &mapping);
2080 ret = uvc_pm_get(handle->chain->dev);
2085 __uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
2088 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val,
2091 uvc_pm_put(handle->chain->dev);
2104 mutex_unlock(&handle->chain->ctrl_mutex);
2112 mutex_lock(&handle->chain->ctrl_mutex);
2113 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0)
2117 mutex_unlock(&handle->chain->ctrl_mutex);
2151 int uvc_ctrl_begin(struct uvc_video_chain *chain)
2153 return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0;
2254 struct uvc_video_chain *chain = handle->chain;
2261 list_for_each_entry(entity, &chain->entities, chain) {
2262 ret = uvc_ctrl_commit_entity(chain->dev, handle, entity,
2284 mutex_unlock(&chain->ctrl_mutex);
2288 static int uvc_mapping_get_xctrl_compound(struct uvc_video_chain *chain,
2332 ret = __uvc_ctrl_load_cur(chain, ctrl);
2334 ret = uvc_ctrl_populate_cache(chain, ctrl);
2351 static int uvc_mapping_get_xctrl_std(struct uvc_video_chain *chain,
2361 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
2370 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qec);
2389 static int uvc_mapping_get_xctrl(struct uvc_video_chain *chain,
2395 return uvc_mapping_get_xctrl_compound(chain, ctrl, mapping,
2397 return uvc_mapping_get_xctrl_std(chain, ctrl, mapping, which, xctrl);
2400 int uvc_ctrl_get(struct uvc_video_chain *chain, u32 which,
2406 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0)
2409 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
2413 return uvc_mapping_get_xctrl(chain, ctrl, mapping, which, xctrl);
2416 static int uvc_ctrl_clamp(struct uvc_video_chain *chain,
2430 ret = uvc_ctrl_populate_cache(chain, ctrl);
2454 ret = uvc_ctrl_populate_cache(chain, ctrl);
2482 ret = uvc_ctrl_populate_cache(chain, ctrl);
2536 struct uvc_video_chain *chain = handle->chain;
2541 lockdep_assert_held(&chain->ctrl_mutex);
2543 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0)
2546 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
2552 ret = uvc_ctrl_clamp(chain, ctrl, mapping, &xctrl->value);
2561 ret = __uvc_ctrl_load_cur(chain, ctrl);
2746 int uvc_xu_ctrl_query(struct uvc_video_chain *chain,
2760 list_for_each_entry(iter, &chain->entities, chain) {
2769 uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n",
2785 uvc_dbg(chain->dev, CONTROL, "Control %pUl/%u not found\n",
2790 if (mutex_lock_interruptible(&chain->ctrl_mutex))
2793 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl);
2855 ret = uvc_query_ctrl(chain->dev, xqry->query, xqry->unit,
2856 chain->dev->intfnum, xqry->selector, data, size);
2865 mutex_unlock(&chain->ctrl_mutex);
2944 static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
3005 chain->ctrl_class_bitmap |= BIT(i);
3011 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n",
3027 int uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
3030 struct uvc_device *dev = chain->dev;
3044 /* Search for the matching (GUID/CS) control on the current chain */
3045 list_for_each_entry(entity, &chain->entities, chain) {
3066 if (mutex_lock_interruptible(&chain->ctrl_mutex))
3103 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping);
3108 mutex_unlock(&chain->ctrl_mutex);
3179 static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
3198 uvc_ctrl_add_info(chain->dev, ctrl, info);
3205 uvc_ctrl_get_flags(chain->dev, ctrl, &ctrl->info);
3223 mapping = mapping->filter_mapping(chain, ctrl);
3228 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
3235 static int uvc_ctrl_init_chain(struct uvc_video_chain *chain)
3241 list_for_each_entry(entity, &chain->entities, chain) {
3261 uvc_ctrl_prune_entity(chain->dev, entity);
3283 uvc_ctrl_init_ctrl(chain, ctrl);
3293 struct uvc_video_chain *chain;
3298 list_for_each_entry(chain, &dev->chains, list) {
3299 ret = uvc_ctrl_init_chain(chain);
3312 guard(mutex)(&handle->chain->ctrl_mutex);
3317 list_for_each_entry(entity, &handle->chain->dev->entities, list) {