Lines Matching full:chain
595 struct uvc_video_chain *chain, struct uvc_control *ctrl) in uvc_ctrl_filter_plf_mapping() argument
608 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
609 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
618 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
619 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
625 if (chain->dev->uvc_version < 0x150) in uvc_ctrl_filter_plf_mapping()
630 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
631 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
639 uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
640 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
1207 static struct uvc_control *uvc_find_control(struct uvc_video_chain *chain, in uvc_find_control() argument
1221 list_for_each_entry(entity, &chain->entities, chain) { in uvc_find_control()
1229 uvc_dbg(chain->dev, CONTROL, "Control 0x%08x not found\n", in uvc_find_control()
1235 static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain, in uvc_ctrl_populate_cache() argument
1241 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id, in uvc_ctrl_populate_cache()
1242 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1250 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id, in uvc_ctrl_populate_cache()
1251 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1258 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id, in uvc_ctrl_populate_cache()
1259 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1266 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id, in uvc_ctrl_populate_cache()
1267 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1280 uvc_warn_once(chain->dev, UVC_WARN_XU_GET_RES, in uvc_ctrl_populate_cache()
1292 static int __uvc_ctrl_load_cur(struct uvc_video_chain *chain, in __uvc_ctrl_load_cur() argument
1311 ret = ctrl->entity->get_cur(chain->dev, ctrl->entity, in __uvc_ctrl_load_cur()
1315 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, in __uvc_ctrl_load_cur()
1316 ctrl->entity->id, chain->dev->intfnum, in __uvc_ctrl_load_cur()
1328 static int __uvc_ctrl_get(struct uvc_video_chain *chain, in __uvc_ctrl_get() argument
1338 ret = __uvc_ctrl_load_cur(chain, ctrl); in __uvc_ctrl_get()
1348 static int __uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id, in __uvc_query_v4l2_class() argument
1358 if (!(chain->ctrl_class_bitmap & BIT(i))) in __uvc_query_v4l2_class()
1373 static int uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id, in uvc_query_v4l2_class() argument
1379 idx = __uvc_query_v4l2_class(chain, req_id, found_id); in uvc_query_v4l2_class()
1434 int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id, in uvc_ctrl_is_accessible() argument
1452 if (__uvc_query_v4l2_class(chain, v4l2_id, 0) >= 0) in uvc_ctrl_is_accessible()
1455 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1490 ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val); in uvc_ctrl_is_accessible()
1547 static int __uvc_queryctrl_boundaries(struct uvc_video_chain *chain, in __uvc_queryctrl_boundaries() argument
1557 ret = uvc_ctrl_populate_cache(chain, ctrl); in __uvc_queryctrl_boundaries()
1646 static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in __uvc_query_v4l2_ctrl() argument
1682 ret = __uvc_ctrl_get(chain, master_ctrl, master_map, in __uvc_query_v4l2_ctrl()
1691 dev_warn_ratelimited(&chain->dev->intf->dev, in __uvc_query_v4l2_ctrl()
1713 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, v4l2_ctrl); in __uvc_query_v4l2_ctrl()
1715 dev_warn(&chain->dev->intf->dev, in __uvc_query_v4l2_ctrl()
1727 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in uvc_query_v4l2_ctrl() argument
1734 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1740 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, 0, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1745 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1757 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id, in uvc_query_v4l2_ctrl()
1763 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1765 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1778 int uvc_query_v4l2_menu(struct uvc_video_chain *chain, in uvc_query_v4l2_menu() argument
1795 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1799 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1814 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_query_v4l2_menu()
1840 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1848 static void uvc_ctrl_fill_event(struct uvc_video_chain *chain, in uvc_ctrl_fill_event() argument
1856 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1878 static void uvc_ctrl_send_event(struct uvc_video_chain *chain, in uvc_ctrl_send_event() argument
1889 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1904 static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain, in uvc_ctrl_send_slave_event() argument
1917 __uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1920 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1927 lockdep_assert_held(&handle->chain->ctrl_mutex); in uvc_ctrl_set_handle()
1944 ret = uvc_pm_get(handle->chain->dev); in uvc_ctrl_set_handle()
1955 lockdep_assert_held(&ctrl->handle->chain->ctrl_mutex); in uvc_ctrl_clear_handle()
1963 uvc_pm_put(ctrl->handle->chain->dev); in uvc_ctrl_clear_handle()
1968 void uvc_ctrl_status_event(struct uvc_video_chain *chain, in uvc_ctrl_status_event() argument
1975 mutex_lock(&chain->ctrl_mutex); in uvc_ctrl_status_event()
2000 uvc_ctrl_send_slave_event(chain, handle, ctrl, in uvc_ctrl_status_event()
2004 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
2008 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_status_event()
2018 uvc_ctrl_status_event(w->chain, w->ctrl, w->data); in uvc_ctrl_status_event_work()
2032 bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain, in uvc_ctrl_status_event_async() argument
2035 struct uvc_device *dev = chain->dev; in uvc_ctrl_status_event_async()
2043 w->chain = chain; in uvc_ctrl_status_event_async()
2078 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
2100 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl, in uvc_ctrl_send_events()
2117 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
2129 ret = mutex_lock_interruptible(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
2133 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0) { in uvc_ctrl_add_event()
2138 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
2149 ret = uvc_pm_get(handle->chain->dev); in uvc_ctrl_add_event()
2154 __uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
2157 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
2160 uvc_pm_put(handle->chain->dev); in uvc_ctrl_add_event()
2173 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
2181 mutex_lock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
2182 if (__uvc_query_v4l2_class(handle->chain, sev->id, 0) >= 0) in uvc_ctrl_del_event()
2186 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
2220 int uvc_ctrl_begin(struct uvc_video_chain *chain) in uvc_ctrl_begin() argument
2222 return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0; in uvc_ctrl_begin()
2323 struct uvc_video_chain *chain = handle->chain; in __uvc_ctrl_commit() local
2330 list_for_each_entry(entity, &chain->entities, chain) { in __uvc_ctrl_commit()
2331 ret = uvc_ctrl_commit_entity(chain->dev, handle, entity, in __uvc_ctrl_commit()
2353 mutex_unlock(&chain->ctrl_mutex); in __uvc_ctrl_commit()
2357 static int uvc_mapping_get_xctrl_compound(struct uvc_video_chain *chain, in uvc_mapping_get_xctrl_compound() argument
2401 ret = __uvc_ctrl_load_cur(chain, ctrl); in uvc_mapping_get_xctrl_compound()
2403 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_mapping_get_xctrl_compound()
2420 static int uvc_mapping_get_xctrl_std(struct uvc_video_chain *chain, in uvc_mapping_get_xctrl_std() argument
2430 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_mapping_get_xctrl_std()
2439 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qec); in uvc_mapping_get_xctrl_std()
2458 static int uvc_mapping_get_xctrl(struct uvc_video_chain *chain, in uvc_mapping_get_xctrl() argument
2464 return uvc_mapping_get_xctrl_compound(chain, ctrl, mapping, in uvc_mapping_get_xctrl()
2466 return uvc_mapping_get_xctrl_std(chain, ctrl, mapping, which, xctrl); in uvc_mapping_get_xctrl()
2469 int uvc_ctrl_get(struct uvc_video_chain *chain, u32 which, in uvc_ctrl_get() argument
2475 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0) in uvc_ctrl_get()
2478 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
2482 return uvc_mapping_get_xctrl(chain, ctrl, mapping, which, xctrl); in uvc_ctrl_get()
2485 static int uvc_ctrl_clamp(struct uvc_video_chain *chain, in uvc_ctrl_clamp() argument
2500 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_clamp()
2538 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_clamp()
2566 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_clamp()
2620 struct uvc_video_chain *chain = handle->chain; in uvc_ctrl_set() local
2625 lockdep_assert_held(&chain->ctrl_mutex); in uvc_ctrl_set()
2627 if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0) in uvc_ctrl_set()
2630 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
2636 ret = uvc_ctrl_clamp(chain, ctrl, xctrl->id, mapping, &xctrl->value); in uvc_ctrl_set()
2645 ret = __uvc_ctrl_load_cur(chain, ctrl); in uvc_ctrl_set()
2830 int uvc_xu_ctrl_query(struct uvc_video_chain *chain, in uvc_xu_ctrl_query() argument
2844 list_for_each_entry(iter, &chain->entities, chain) { in uvc_xu_ctrl_query()
2853 uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n", in uvc_xu_ctrl_query()
2869 uvc_dbg(chain->dev, CONTROL, "Control %pUl/%u not found\n", in uvc_xu_ctrl_query()
2874 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_xu_ctrl_query()
2877 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl); in uvc_xu_ctrl_query()
2939 ret = uvc_query_ctrl(chain->dev, xqry->query, xqry->unit, in uvc_xu_ctrl_query()
2940 chain->dev->intfnum, xqry->selector, data, size); in uvc_xu_ctrl_query()
2949 mutex_unlock(&chain->ctrl_mutex); in uvc_xu_ctrl_query()
3027 static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, in __uvc_ctrl_add_mapping() argument
3088 chain->ctrl_class_bitmap |= BIT(i); in __uvc_ctrl_add_mapping()
3094 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n", in __uvc_ctrl_add_mapping()
3110 int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, in uvc_ctrl_add_mapping() argument
3113 struct uvc_device *dev = chain->dev; in uvc_ctrl_add_mapping()
3127 /* Search for the matching (GUID/CS) control on the current chain */ in uvc_ctrl_add_mapping()
3128 list_for_each_entry(entity, &chain->entities, chain) { in uvc_ctrl_add_mapping()
3149 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_ctrl_add_mapping()
3186 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
3191 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_add_mapping()
3262 static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain, in uvc_ctrl_init_ctrl() argument
3272 uvc_ctrl_add_info(chain->dev, ctrl, info); in uvc_ctrl_init_ctrl()
3279 uvc_ctrl_get_flags(chain->dev, ctrl, &ctrl->info); in uvc_ctrl_init_ctrl()
3297 mapping = mapping->filter_mapping(chain, ctrl); in uvc_ctrl_init_ctrl()
3302 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
3309 static int uvc_ctrl_init_chain(struct uvc_video_chain *chain) in uvc_ctrl_init_chain() argument
3315 list_for_each_entry(entity, &chain->entities, chain) { in uvc_ctrl_init_chain()
3335 uvc_ctrl_prune_entity(chain->dev, entity); in uvc_ctrl_init_chain()
3356 uvc_ctrl_init_ctrl(chain, ctrl); in uvc_ctrl_init_chain()
3366 struct uvc_video_chain *chain; in uvc_ctrl_init_device() local
3371 list_for_each_entry(chain, &dev->chains, list) { in uvc_ctrl_init_device()
3372 ret = uvc_ctrl_init_chain(chain); in uvc_ctrl_init_device()
3384 guard(mutex)(&handle->chain->ctrl_mutex); in uvc_ctrl_cleanup_fh()
3389 list_for_each_entry(entity, &handle->chain->dev->entities, list) { in uvc_ctrl_cleanup_fh()