Lines Matching refs:chain

889 static struct uvc_control *uvc_find_control(struct uvc_video_chain *chain,  in uvc_find_control()  argument
902 list_for_each_entry(entity, &chain->entities, chain) { in uvc_find_control()
909 uvc_dbg(chain->dev, CONTROL, "Control 0x%08x not found\n", in uvc_find_control()
915 static int uvc_ctrl_populate_cache(struct uvc_video_chain *chain, in uvc_ctrl_populate_cache() argument
921 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id, in uvc_ctrl_populate_cache()
922 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
930 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id, in uvc_ctrl_populate_cache()
931 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
938 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id, in uvc_ctrl_populate_cache()
939 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
946 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id, in uvc_ctrl_populate_cache()
947 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
959 uvc_warn_once(chain->dev, UVC_WARN_XU_GET_RES, in uvc_ctrl_populate_cache()
991 static int __uvc_ctrl_get(struct uvc_video_chain *chain, in __uvc_ctrl_get() argument
1002 ret = ctrl->entity->get_cur(chain->dev, in __uvc_ctrl_get()
1008 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, in __uvc_ctrl_get()
1010 chain->dev->intfnum, in __uvc_ctrl_get()
1027 static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in __uvc_query_v4l2_ctrl() argument
1053 int ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val); in __uvc_query_v4l2_ctrl()
1062 int ret = uvc_ctrl_populate_cache(chain, ctrl); in __uvc_query_v4l2_ctrl()
1119 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, in uvc_query_v4l2_ctrl() argument
1126 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1130 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1136 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1138 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_ctrl()
1151 int uvc_query_v4l2_menu(struct uvc_video_chain *chain, in uvc_query_v4l2_menu() argument
1165 ret = mutex_lock_interruptible(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1169 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1187 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_query_v4l2_menu()
1203 mutex_unlock(&chain->ctrl_mutex); in uvc_query_v4l2_menu()
1211 static void uvc_ctrl_fill_event(struct uvc_video_chain *chain, in uvc_ctrl_fill_event() argument
1219 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1241 static void uvc_ctrl_send_event(struct uvc_video_chain *chain, in uvc_ctrl_send_event() argument
1252 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1267 static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain, in uvc_ctrl_send_slave_event() argument
1279 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1282 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1285 void uvc_ctrl_status_event(struct uvc_video_chain *chain, in uvc_ctrl_status_event() argument
1292 mutex_lock(&chain->ctrl_mutex); in uvc_ctrl_status_event()
1308 uvc_ctrl_send_slave_event(chain, handle, ctrl, in uvc_ctrl_status_event()
1312 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
1316 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_status_event()
1326 uvc_ctrl_status_event(w->chain, w->ctrl, w->data); in uvc_ctrl_status_event_work()
1336 bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain, in uvc_ctrl_status_event_async() argument
1339 struct uvc_device *dev = chain->dev; in uvc_ctrl_status_event_async()
1349 w->chain = chain; in uvc_ctrl_status_event_async()
1380 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
1400 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl, in uvc_ctrl_send_events()
1413 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
1425 ret = mutex_lock_interruptible(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
1429 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
1441 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
1444 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
1453 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_add_event()
1461 mutex_lock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
1463 mutex_unlock(&handle->chain->ctrl_mutex); in uvc_ctrl_del_event()
1497 int uvc_ctrl_begin(struct uvc_video_chain *chain) in uvc_ctrl_begin() argument
1499 return mutex_lock_interruptible(&chain->ctrl_mutex) ? -ERESTARTSYS : 0; in uvc_ctrl_begin()
1556 struct uvc_video_chain *chain = handle->chain; in __uvc_ctrl_commit() local
1561 list_for_each_entry(entity, &chain->entities, chain) { in __uvc_ctrl_commit()
1562 ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback); in __uvc_ctrl_commit()
1570 mutex_unlock(&chain->ctrl_mutex); in __uvc_ctrl_commit()
1574 int uvc_ctrl_get(struct uvc_video_chain *chain, in uvc_ctrl_get() argument
1580 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
1584 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_get()
1590 struct uvc_video_chain *chain = handle->chain; in uvc_ctrl_set() local
1599 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
1609 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
1648 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_set()
1675 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, in uvc_ctrl_set()
1676 ctrl->entity->id, chain->dev->intfnum, in uvc_ctrl_set()
1862 int uvc_xu_ctrl_query(struct uvc_video_chain *chain, in uvc_xu_ctrl_query() argument
1876 list_for_each_entry(entity, &chain->entities, chain) { in uvc_xu_ctrl_query()
1885 uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n", in uvc_xu_ctrl_query()
1901 uvc_dbg(chain->dev, CONTROL, "Control %pUl/%u not found\n", in uvc_xu_ctrl_query()
1906 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_xu_ctrl_query()
1909 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl); in uvc_xu_ctrl_query()
1971 ret = uvc_query_ctrl(chain->dev, xqry->query, xqry->unit, in uvc_xu_ctrl_query()
1972 chain->dev->intfnum, xqry->selector, data, size); in uvc_xu_ctrl_query()
1981 mutex_unlock(&chain->ctrl_mutex); in uvc_xu_ctrl_query()
2095 int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, in uvc_ctrl_add_mapping() argument
2098 struct uvc_device *dev = chain->dev; in uvc_ctrl_add_mapping()
2113 list_for_each_entry(entity, &chain->entities, chain) { in uvc_ctrl_add_mapping()
2134 if (mutex_lock_interruptible(&chain->ctrl_mutex)) in uvc_ctrl_add_mapping()
2176 mutex_unlock(&chain->ctrl_mutex); in uvc_ctrl_add_mapping()