Lines Matching refs:chain
888 static struct uvc_control *uvc_find_control(struct uvc_video_chain *chain, in uvc_find_control() argument
901 list_for_each_entry(entity, &chain->entities, chain) { in uvc_find_control()
914 static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain, in uvc_ctrl_populate_cache() argument
920 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id, in uvc_ctrl_populate_cache()
921 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
929 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id, in uvc_ctrl_populate_cache()
930 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
937 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id, in uvc_ctrl_populate_cache()
938 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
945 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id, in uvc_ctrl_populate_cache()
946 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
958 uvc_warn_once(chain->dev, UVC_WARN_XU_GET_RES, in uvc_ctrl_populate_cache()
990 static int __uvc_ctrl_get(struct uvc_video_chain *chain, in __uvc_ctrl_get() argument
1000 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id, in __uvc_ctrl_get()
1001 chain->dev->intfnum, ctrl->info.selector, in __uvc_ctrl_get()
1016 static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in __uvc_query_v4l2_ctrl() argument
1042 int ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val); in __uvc_query_v4l2_ctrl()
1051 int ret = uvc_ctrl_populate_cache(chain, ctrl); in __uvc_query_v4l2_ctrl()
1108 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in uvc_query_v4l2_ctrl() argument
1115 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1119 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1125 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1127 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1140 int uvc_query_v4l2_menu(struct uvc_video_chain *chain, in uvc_query_v4l2_menu() argument
1154 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1158 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1176 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_query_v4l2_menu()
1192 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1200 static void uvc_ctrl_fill_event(struct uvc_video_chain *chain, in uvc_ctrl_fill_event() argument
1208 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1230 static void uvc_ctrl_send_event(struct uvc_video_chain *chain, in uvc_ctrl_send_event() argument
1241 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1256 static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain, in uvc_ctrl_send_slave_event() argument
1268 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1271 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1279 struct uvc_video_chain *chain = w->chain; in uvc_ctrl_status_event_work() local
1286 mutex_lock(&chain->ctrl_mutex); in uvc_ctrl_status_event_work()
1302 uvc_ctrl_send_slave_event(chain, handle, ctrl, in uvc_ctrl_status_event_work()
1306 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event_work()
1310 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_status_event_work()
1320 bool uvc_ctrl_status_event(struct urb *urb, struct uvc_video_chain *chain, in uvc_ctrl_status_event() argument
1323 struct uvc_device *dev = chain->dev; in uvc_ctrl_status_event()
1333 w->chain = chain; in uvc_ctrl_status_event()
1364 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
1384 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl, in uvc_ctrl_send_events()
1397 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
1409 ret = mutex_lock_interruptible(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
1413 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
1425 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
1428 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
1437 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
1445 mutex_lock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
1447 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
1481 int uvc_ctrl_begin(struct uvc_video_chain *chain) in uvc_ctrl_begin() argument
1483 return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0; in uvc_ctrl_begin()
1540 struct uvc_video_chain *chain = handle->chain; in __uvc_ctrl_commit() local
1545 list_for_each_entry(entity, &chain->entities, chain) { in __uvc_ctrl_commit()
1546 ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback); in __uvc_ctrl_commit()
1554 mutex_unlock(&chain->ctrl_mutex); in __uvc_ctrl_commit()
1558 int uvc_ctrl_get(struct uvc_video_chain *chain, in uvc_ctrl_get() argument
1564 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
1568 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_get()
1574 struct uvc_video_chain *chain = handle->chain; in uvc_ctrl_set() local
1583 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
1593 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
1632 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
1659 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, in uvc_ctrl_set()
1660 ctrl->entity->id, chain->dev->intfnum, in uvc_ctrl_set()
1842 int uvc_xu_ctrl_query(struct uvc_video_chain *chain, in uvc_xu_ctrl_query() argument
1854 list_for_each_entry(entity, &chain->entities, chain) { in uvc_xu_ctrl_query()
1881 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_xu_ctrl_query()
1884 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl); in uvc_xu_ctrl_query()
1946 ret = uvc_query_ctrl(chain->dev, xqry->query, xqry->unit, in uvc_xu_ctrl_query()
1947 chain->dev->intfnum, xqry->selector, data, size); in uvc_xu_ctrl_query()
1956 mutex_unlock(&chain->ctrl_mutex); in uvc_xu_ctrl_query()
2085 int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, in uvc_ctrl_add_mapping() argument
2088 struct uvc_device *dev = chain->dev; in uvc_ctrl_add_mapping()
2103 list_for_each_entry(entity, &chain->entities, chain) { in uvc_ctrl_add_mapping()
2124 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_ctrl_add_mapping()
2166 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_add_mapping()