Lines Matching full:chain

499 	struct uvc_video_chain *chain, struct uvc_control *ctrl)  in uvc_ctrl_filter_plf_mapping()  argument
512 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
513 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
522 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
523 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
529 if (chain->dev->uvc_version < 0x150) in uvc_ctrl_filter_plf_mapping()
534 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
535 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
543 uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
544 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
980 static struct uvc_control *uvc_find_control(struct uvc_video_chain *chain, in uvc_find_control() argument
993 list_for_each_entry(entity, &chain->entities, chain) { in uvc_find_control()
1000 uvc_dbg(chain->dev, CONTROL, "Control 0x%08x not found\n", in uvc_find_control()
1006 static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain, in uvc_ctrl_populate_cache() argument
1012 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id, in uvc_ctrl_populate_cache()
1013 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1021 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id, in uvc_ctrl_populate_cache()
1022 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1029 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id, in uvc_ctrl_populate_cache()
1030 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1037 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id, in uvc_ctrl_populate_cache()
1038 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1051 uvc_warn_once(chain->dev, UVC_WARN_XU_GET_RES, in uvc_ctrl_populate_cache()
1089 static int __uvc_ctrl_load_cur(struct uvc_video_chain *chain, in __uvc_ctrl_load_cur() argument
1108 ret = ctrl->entity->get_cur(chain->dev, ctrl->entity, in __uvc_ctrl_load_cur()
1112 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, in __uvc_ctrl_load_cur()
1113 ctrl->entity->id, chain->dev->intfnum, in __uvc_ctrl_load_cur()
1125 static int __uvc_ctrl_get(struct uvc_video_chain *chain, in __uvc_ctrl_get() argument
1135 ret = __uvc_ctrl_load_cur(chain, ctrl); in __uvc_ctrl_get()
1145 static int __uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id, in __uvc_query_v4l2_class() argument
1154 if (!(chain->ctrl_class_bitmap & BIT(i))) in __uvc_query_v4l2_class()
1169 static int uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id, in uvc_query_v4l2_class() argument
1174 idx = __uvc_query_v4l2_class(chain, req_id, found_id); in uvc_query_v4l2_class()
1198 int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id, in uvc_ctrl_is_accessible() argument
1211 if (__uvc_query_v4l2_class(chain, v4l2_id, 0) >= 0) in uvc_ctrl_is_accessible()
1214 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1243 ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val); in uvc_ctrl_is_accessible()
1283 static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in __uvc_query_v4l2_ctrl() argument
1309 int ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val); in __uvc_query_v4l2_ctrl()
1318 int ret = uvc_ctrl_populate_cache(chain, ctrl); in __uvc_query_v4l2_ctrl()
1387 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in uvc_query_v4l2_ctrl() argument
1394 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1400 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, 0, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1405 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1417 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id, in uvc_query_v4l2_ctrl()
1423 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1425 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1438 int uvc_query_v4l2_menu(struct uvc_video_chain *chain, in uvc_query_v4l2_menu() argument
1455 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1459 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1474 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_query_v4l2_menu()
1500 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1508 static void uvc_ctrl_fill_event(struct uvc_video_chain *chain, in uvc_ctrl_fill_event() argument
1516 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1538 static void uvc_ctrl_send_event(struct uvc_video_chain *chain, in uvc_ctrl_send_event() argument
1549 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1564 static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain, in uvc_ctrl_send_slave_event() argument
1576 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1579 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1585 lockdep_assert_held(&handle->chain->ctrl_mutex); in uvc_ctrl_set_handle()
1616 void uvc_ctrl_status_event(struct uvc_video_chain *chain, in uvc_ctrl_status_event() argument
1623 mutex_lock(&chain->ctrl_mutex); in uvc_ctrl_status_event()
1643 uvc_ctrl_send_slave_event(chain, handle, ctrl, in uvc_ctrl_status_event()
1647 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
1651 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_status_event()
1661 uvc_ctrl_status_event(w->chain, w->ctrl, w->data); in uvc_ctrl_status_event_work()
1675 bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain, in uvc_ctrl_status_event_async() argument
1678 struct uvc_device *dev = chain->dev; in uvc_ctrl_status_event_async()
1686 w->chain = chain; in uvc_ctrl_status_event_async()
1718 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
1737 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl, in uvc_ctrl_send_events()
1750 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
1762 ret = mutex_lock_interruptible(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
1766 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0) { in uvc_ctrl_add_event()
1771 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
1783 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
1786 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
1797 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
1805 mutex_lock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
1806 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0) in uvc_ctrl_del_event()
1810 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
1844 int uvc_ctrl_begin(struct uvc_video_chain *chain) in uvc_ctrl_begin() argument
1846 return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0; in uvc_ctrl_begin()
1934 struct uvc_video_chain *chain = handle->chain; in __uvc_ctrl_commit() local
1940 list_for_each_entry(entity, &chain->entities, chain) { in __uvc_ctrl_commit()
1941 ret = uvc_ctrl_commit_entity(chain->dev, handle, entity, in __uvc_ctrl_commit()
1955 mutex_unlock(&chain->ctrl_mutex); in __uvc_ctrl_commit()
1959 int uvc_ctrl_get(struct uvc_video_chain *chain, in uvc_ctrl_get() argument
1965 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0) in uvc_ctrl_get()
1968 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
1972 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_get()
1978 struct uvc_video_chain *chain = handle->chain; in uvc_ctrl_set() local
1987 lockdep_assert_held(&chain->ctrl_mutex); in uvc_ctrl_set()
1989 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0) in uvc_ctrl_set()
1992 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
2002 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
2027 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
2057 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
2079 ret = __uvc_ctrl_load_cur(chain, ctrl); in uvc_ctrl_set()
2263 int uvc_xu_ctrl_query(struct uvc_video_chain *chain, in uvc_xu_ctrl_query() argument
2277 list_for_each_entry(iter, &chain->entities, chain) { in uvc_xu_ctrl_query()
2286 uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n", in uvc_xu_ctrl_query()
2302 uvc_dbg(chain->dev, CONTROL, "Control %pUl/%u not found\n", in uvc_xu_ctrl_query()
2307 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_xu_ctrl_query()
2310 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl); in uvc_xu_ctrl_query()
2372 ret = uvc_query_ctrl(chain->dev, xqry->query, xqry->unit, in uvc_xu_ctrl_query()
2373 chain->dev->intfnum, xqry->selector, data, size); in uvc_xu_ctrl_query()
2382 mutex_unlock(&chain->ctrl_mutex); in uvc_xu_ctrl_query()
2461 static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, in __uvc_ctrl_add_mapping() argument
2515 chain->ctrl_class_bitmap |= BIT(i); in __uvc_ctrl_add_mapping()
2521 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n", in __uvc_ctrl_add_mapping()
2535 int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, in uvc_ctrl_add_mapping() argument
2538 struct uvc_device *dev = chain->dev; in uvc_ctrl_add_mapping()
2552 /* Search for the matching (GUID/CS) control on the current chain */ in uvc_ctrl_add_mapping()
2553 list_for_each_entry(entity, &chain->entities, chain) { in uvc_ctrl_add_mapping()
2574 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_ctrl_add_mapping()
2611 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
2616 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_add_mapping()
2687 static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain, in uvc_ctrl_init_ctrl() argument
2706 uvc_ctrl_add_info(chain->dev, ctrl, info); in uvc_ctrl_init_ctrl()
2713 uvc_ctrl_get_flags(chain->dev, ctrl, &ctrl->info); in uvc_ctrl_init_ctrl()
2731 mapping = mapping->filter_mapping(chain, ctrl); in uvc_ctrl_init_ctrl()
2736 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2743 static int uvc_ctrl_init_chain(struct uvc_video_chain *chain) in uvc_ctrl_init_chain() argument
2749 list_for_each_entry(entity, &chain->entities, chain) { in uvc_ctrl_init_chain()
2769 uvc_ctrl_prune_entity(chain->dev, entity); in uvc_ctrl_init_chain()
2791 uvc_ctrl_init_ctrl(chain, ctrl); in uvc_ctrl_init_chain()
2801 struct uvc_video_chain *chain; in uvc_ctrl_init_device() local
2806 list_for_each_entry(chain, &dev->chains, list) { in uvc_ctrl_init_device()
2807 ret = uvc_ctrl_init_chain(chain); in uvc_ctrl_init_device()
2819 guard(mutex)(&handle->chain->ctrl_mutex); in uvc_ctrl_cleanup_fh()
2824 list_for_each_entry(entity, &handle->chain->dev->entities, list) { in uvc_ctrl_cleanup_fh()