Lines Matching refs:ctrl

573 	struct uvc_video_chain *chain, struct uvc_control *ctrl)  in uvc_ctrl_filter_plf_mapping()  argument
586 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
587 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
596 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
597 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
608 ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
609 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
617 uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_filter_plf_mapping()
618 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_filter_plf_mapping()
984 static inline u8 *uvc_ctrl_data(struct uvc_control *ctrl, int id) in uvc_ctrl_data() argument
986 return ctrl->uvc_data + id * ctrl->info.size; in uvc_ctrl_data()
1143 struct uvc_control *ctrl; in __uvc_find_control() local
1151 ctrl = &entity->controls[i]; in __uvc_find_control()
1152 if (!ctrl->initialized) in __uvc_find_control()
1155 list_for_each_entry(map, &ctrl->info.mappings, list) { in __uvc_find_control()
1157 *control = ctrl; in __uvc_find_control()
1166 *control = ctrl; in __uvc_find_control()
1176 struct uvc_control *ctrl = NULL; in uvc_find_control() local
1188 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next, in uvc_find_control()
1190 if (ctrl && !next && !next_compound) in uvc_find_control()
1191 return ctrl; in uvc_find_control()
1194 if (!ctrl && !next && !next_compound) in uvc_find_control()
1198 return ctrl; in uvc_find_control()
1202 struct uvc_control *ctrl) in uvc_ctrl_populate_cache() argument
1206 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) { in uvc_ctrl_populate_cache()
1207 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id, in uvc_ctrl_populate_cache()
1208 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1209 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF), in uvc_ctrl_populate_cache()
1210 ctrl->info.size); in uvc_ctrl_populate_cache()
1215 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN) { in uvc_ctrl_populate_cache()
1216 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id, in uvc_ctrl_populate_cache()
1217 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1218 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN), in uvc_ctrl_populate_cache()
1219 ctrl->info.size); in uvc_ctrl_populate_cache()
1223 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) { in uvc_ctrl_populate_cache()
1224 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id, in uvc_ctrl_populate_cache()
1225 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1226 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX), in uvc_ctrl_populate_cache()
1227 ctrl->info.size); in uvc_ctrl_populate_cache()
1231 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) { in uvc_ctrl_populate_cache()
1232 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id, in uvc_ctrl_populate_cache()
1233 chain->dev->intfnum, ctrl->info.selector, in uvc_ctrl_populate_cache()
1234 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES), in uvc_ctrl_populate_cache()
1235 ctrl->info.size); in uvc_ctrl_populate_cache()
1237 if (UVC_ENTITY_TYPE(ctrl->entity) != in uvc_ctrl_populate_cache()
1249 memset(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES), 0, in uvc_ctrl_populate_cache()
1250 ctrl->info.size); in uvc_ctrl_populate_cache()
1254 ctrl->cached = 1; in uvc_ctrl_populate_cache()
1259 struct uvc_control *ctrl) in __uvc_ctrl_load_cur() argument
1264 if (ctrl->loaded) in __uvc_ctrl_load_cur()
1267 data = uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT); in __uvc_ctrl_load_cur()
1269 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) { in __uvc_ctrl_load_cur()
1270 memset(data, 0, ctrl->info.size); in __uvc_ctrl_load_cur()
1271 ctrl->loaded = 1; in __uvc_ctrl_load_cur()
1276 if (ctrl->entity->get_cur) in __uvc_ctrl_load_cur()
1277 ret = ctrl->entity->get_cur(chain->dev, ctrl->entity, in __uvc_ctrl_load_cur()
1278 ctrl->info.selector, data, in __uvc_ctrl_load_cur()
1279 ctrl->info.size); in __uvc_ctrl_load_cur()
1282 ctrl->entity->id, chain->dev->intfnum, in __uvc_ctrl_load_cur()
1283 ctrl->info.selector, data, in __uvc_ctrl_load_cur()
1284 ctrl->info.size); in __uvc_ctrl_load_cur()
1289 ctrl->loaded = 1; in __uvc_ctrl_load_cur()
1295 struct uvc_control *ctrl, in __uvc_ctrl_get() argument
1301 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) in __uvc_ctrl_get()
1304 ret = __uvc_ctrl_load_cur(chain, ctrl); in __uvc_ctrl_get()
1309 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); in __uvc_ctrl_get()
1359 static bool uvc_ctrl_is_readable(u32 which, struct uvc_control *ctrl, in uvc_ctrl_is_readable() argument
1363 return !!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR); in uvc_ctrl_is_readable()
1366 return !!(ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF); in uvc_ctrl_is_readable()
1375 return (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) || in uvc_ctrl_is_readable()
1376 (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX); in uvc_ctrl_is_readable()
1382 return !!(ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN); in uvc_ctrl_is_readable()
1385 return !!(ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX); in uvc_ctrl_is_readable()
1407 struct uvc_control *ctrl; in uvc_ctrl_is_accessible() local
1415 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1416 if (!ctrl) in uvc_ctrl_is_accessible()
1420 return uvc_ctrl_is_readable(ctrls->which, ctrl, mapping); in uvc_ctrl_is_accessible()
1422 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR)) in uvc_ctrl_is_accessible()
1438 __uvc_find_control(ctrl->entity, mapping->master_id, &master_map, in uvc_ctrl_is_accessible()
1467 static u32 uvc_get_ctrl_bitmap(struct uvc_control *ctrl, in uvc_get_ctrl_bitmap() argument
1475 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) in uvc_get_ctrl_bitmap()
1477 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES)); in uvc_get_ctrl_bitmap()
1479 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) in uvc_get_ctrl_bitmap()
1481 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX)); in uvc_get_ctrl_bitmap()
1487 struct uvc_control *ctrl, in __uvc_queryctrl_boundaries() argument
1491 if (!ctrl->cached) { in __uvc_queryctrl_boundaries()
1492 int ret = uvc_ctrl_populate_cache(chain, ctrl); in __uvc_queryctrl_boundaries()
1497 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) { in __uvc_queryctrl_boundaries()
1499 UVC_GET_DEF, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF)); in __uvc_queryctrl_boundaries()
1523 v4l2_ctrl->maximum = uvc_get_ctrl_bitmap(ctrl, mapping); in __uvc_queryctrl_boundaries()
1531 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN) in __uvc_queryctrl_boundaries()
1533 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN)); in __uvc_queryctrl_boundaries()
1537 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) in __uvc_queryctrl_boundaries()
1539 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX)); in __uvc_queryctrl_boundaries()
1543 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) in __uvc_queryctrl_boundaries()
1545 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES)); in __uvc_queryctrl_boundaries()
1564 struct uvc_control *ctrl, in __uvc_query_v4l2_ctrl() argument
1578 if (!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR)) in __uvc_query_v4l2_ctrl()
1580 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR)) in __uvc_query_v4l2_ctrl()
1582 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) && in __uvc_query_v4l2_ctrl()
1583 (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN)) in __uvc_query_v4l2_ctrl()
1587 __uvc_find_control(ctrl->entity, mapping->master_id, in __uvc_query_v4l2_ctrl()
1616 return __uvc_queryctrl_boundaries(chain, ctrl, mapping, v4l2_ctrl); in __uvc_query_v4l2_ctrl()
1622 struct uvc_control *ctrl; in uvc_query_v4l2_ctrl() local
1637 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1638 if (ctrl == NULL) { in uvc_query_v4l2_ctrl()
1655 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1674 struct uvc_control *ctrl; in uvc_query_v4l2_menu() local
1691 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1692 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_query_v4l2_menu()
1705 if (!ctrl->cached) { in uvc_query_v4l2_menu()
1706 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_query_v4l2_menu()
1717 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & mask)) { in uvc_query_v4l2_menu()
1742 struct uvc_control *ctrl, in uvc_ctrl_fill_event() argument
1748 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1753 ev->u.ctrl.value = value; in uvc_ctrl_fill_event()
1754 ev->u.ctrl.changes = changes; in uvc_ctrl_fill_event()
1755 ev->u.ctrl.type = v4l2_ctrl.type; in uvc_ctrl_fill_event()
1756 ev->u.ctrl.flags = v4l2_ctrl.flags; in uvc_ctrl_fill_event()
1757 ev->u.ctrl.minimum = v4l2_ctrl.minimum; in uvc_ctrl_fill_event()
1758 ev->u.ctrl.maximum = v4l2_ctrl.maximum; in uvc_ctrl_fill_event()
1759 ev->u.ctrl.step = v4l2_ctrl.step; in uvc_ctrl_fill_event()
1760 ev->u.ctrl.default_value = v4l2_ctrl.default_value; in uvc_ctrl_fill_event()
1771 struct uvc_fh *handle, struct uvc_control *ctrl, in uvc_ctrl_send_event() argument
1781 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1800 struct uvc_control *ctrl = NULL; in uvc_ctrl_send_slave_event() local
1804 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0, 0); in uvc_ctrl_send_slave_event()
1805 if (ctrl == NULL) in uvc_ctrl_send_slave_event()
1809 __uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1812 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1815 static void uvc_ctrl_set_handle(struct uvc_fh *handle, struct uvc_control *ctrl, in uvc_ctrl_set_handle() argument
1821 if (ctrl->handle) in uvc_ctrl_set_handle()
1825 if (new_handle == ctrl->handle) in uvc_ctrl_set_handle()
1828 if (ctrl->handle) { in uvc_ctrl_set_handle()
1829 WARN_ON(!ctrl->handle->pending_async_ctrls); in uvc_ctrl_set_handle()
1830 if (ctrl->handle->pending_async_ctrls) in uvc_ctrl_set_handle()
1831 ctrl->handle->pending_async_ctrls--; in uvc_ctrl_set_handle()
1834 ctrl->handle = new_handle; in uvc_ctrl_set_handle()
1840 if (WARN_ON(ctrl->handle != handle)) in uvc_ctrl_set_handle()
1843 ctrl->handle = NULL; in uvc_ctrl_set_handle()
1850 struct uvc_control *ctrl, const u8 *data) in uvc_ctrl_status_event() argument
1859 ctrl->loaded = 0; in uvc_ctrl_status_event()
1861 handle = ctrl->handle; in uvc_ctrl_status_event()
1863 uvc_ctrl_set_handle(handle, ctrl, NULL); in uvc_ctrl_status_event()
1865 list_for_each_entry(mapping, &ctrl->info.mappings, list) { in uvc_ctrl_status_event()
1881 uvc_ctrl_send_slave_event(chain, handle, ctrl, in uvc_ctrl_status_event()
1885 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
1899 uvc_ctrl_status_event(w->chain, w->ctrl, w->data); in uvc_ctrl_status_event_work()
1914 struct uvc_control *ctrl, const u8 *data) in uvc_ctrl_status_event_async() argument
1919 if (list_empty(&ctrl->info.mappings)) in uvc_ctrl_status_event_async()
1925 w->ctrl = ctrl; in uvc_ctrl_status_event_async()
1949 struct uvc_control *ctrl; in uvc_ctrl_send_events() local
1957 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
1958 if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) in uvc_ctrl_send_events()
1976 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl, in uvc_ctrl_send_events()
1993 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
2002 struct uvc_control *ctrl; in uvc_ctrl_add_event() local
2014 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
2015 if (ctrl == NULL) { in uvc_ctrl_add_event()
2027 __uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
2030 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
2099 struct uvc_control *ctrl; in uvc_ctrl_commit_entity() local
2107 ctrl = &entity->controls[i]; in uvc_ctrl_commit_entity()
2108 if (!ctrl->initialized) in uvc_ctrl_commit_entity()
2118 if (ctrl->info.flags & UVC_CTRL_FLAG_AUTO_UPDATE || in uvc_ctrl_commit_entity()
2119 !(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR)) in uvc_ctrl_commit_entity()
2120 ctrl->loaded = 0; in uvc_ctrl_commit_entity()
2122 if (!ctrl->dirty) in uvc_ctrl_commit_entity()
2126 ret = uvc_query_ctrl(dev, UVC_SET_CUR, ctrl->entity->id, in uvc_ctrl_commit_entity()
2127 dev->intfnum, ctrl->info.selector, in uvc_ctrl_commit_entity()
2128 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), in uvc_ctrl_commit_entity()
2129 ctrl->info.size); in uvc_ctrl_commit_entity()
2134 memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), in uvc_ctrl_commit_entity()
2135 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP), in uvc_ctrl_commit_entity()
2136 ctrl->info.size); in uvc_ctrl_commit_entity()
2138 ctrl->dirty = 0; in uvc_ctrl_commit_entity()
2142 *err_ctrl = ctrl; in uvc_ctrl_commit_entity()
2147 ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS) in uvc_ctrl_commit_entity()
2148 uvc_ctrl_set_handle(handle, ctrl, handle); in uvc_ctrl_commit_entity()
2204 struct uvc_control *ctrl, in uvc_mapping_get_xctrl_compound() argument
2247 ret = __uvc_ctrl_load_cur(chain, ctrl); in uvc_mapping_get_xctrl_compound()
2249 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_mapping_get_xctrl_compound()
2254 ret = mapping->get(mapping, query, uvc_ctrl_data(ctrl, id), size, data); in uvc_mapping_get_xctrl_compound()
2267 struct uvc_control *ctrl, in uvc_mapping_get_xctrl_std() argument
2276 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_mapping_get_xctrl_std()
2285 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qec); in uvc_mapping_get_xctrl_std()
2305 struct uvc_control *ctrl, in uvc_mapping_get_xctrl() argument
2310 return uvc_mapping_get_xctrl_compound(chain, ctrl, mapping, in uvc_mapping_get_xctrl()
2312 return uvc_mapping_get_xctrl_std(chain, ctrl, mapping, which, xctrl); in uvc_mapping_get_xctrl()
2318 struct uvc_control *ctrl; in uvc_ctrl_get() local
2324 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
2325 if (!ctrl) in uvc_ctrl_get()
2328 return uvc_mapping_get_xctrl(chain, ctrl, mapping, which, xctrl); in uvc_ctrl_get()
2332 struct uvc_control *ctrl, in uvc_ctrl_clamp() argument
2344 if (!ctrl->cached) { in uvc_ctrl_clamp()
2345 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_clamp()
2351 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN)); in uvc_ctrl_clamp()
2353 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX)); in uvc_ctrl_clamp()
2355 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES)); in uvc_ctrl_clamp()
2368 if (!ctrl->cached) { in uvc_ctrl_clamp()
2369 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_clamp()
2374 value &= uvc_get_ctrl_bitmap(ctrl, mapping); in uvc_ctrl_clamp()
2396 if (!ctrl->cached) { in uvc_ctrl_clamp()
2397 ret = uvc_ctrl_populate_cache(chain, ctrl); in uvc_ctrl_clamp()
2402 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & val)) in uvc_ctrl_clamp()
2414 static int uvc_mapping_set_xctrl_compound(struct uvc_control *ctrl, in uvc_mapping_set_xctrl_compound() argument
2434 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); in uvc_mapping_set_xctrl_compound()
2437 static int uvc_mapping_set_xctrl(struct uvc_control *ctrl, in uvc_mapping_set_xctrl() argument
2442 return uvc_mapping_set_xctrl_compound(ctrl, mapping, xctrl); in uvc_mapping_set_xctrl()
2445 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); in uvc_mapping_set_xctrl()
2453 struct uvc_control *ctrl; in uvc_ctrl_set() local
2461 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
2462 if (!ctrl) in uvc_ctrl_set()
2464 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR)) in uvc_ctrl_set()
2467 ret = uvc_ctrl_clamp(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_set()
2475 if ((ctrl->info.size * 8) != mapping->size) { in uvc_ctrl_set()
2476 ret = __uvc_ctrl_load_cur(chain, ctrl); in uvc_ctrl_set()
2482 if (!ctrl->dirty) { in uvc_ctrl_set()
2483 memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP), in uvc_ctrl_set()
2484 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), in uvc_ctrl_set()
2485 ctrl->info.size); in uvc_ctrl_set()
2488 ret = uvc_mapping_set_xctrl(ctrl, mapping, xctrl); in uvc_ctrl_set()
2492 ctrl->dirty = 1; in uvc_ctrl_set()
2493 ctrl->modified = 1; in uvc_ctrl_set()
2505 const struct uvc_control *ctrl, in uvc_ctrl_get_flags() argument
2515 if (ctrl->entity->get_info) in uvc_ctrl_get_flags()
2516 ret = ctrl->entity->get_info(dev, ctrl->entity, in uvc_ctrl_get_flags()
2517 ctrl->info.selector, data); in uvc_ctrl_get_flags()
2519 ret = uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id, in uvc_ctrl_get_flags()
2543 const struct uvc_control *ctrl, struct uvc_control_info *info) in uvc_ctrl_fixup_xu_info() argument
2573 if (fixups[i].entity == ctrl->entity->id && in uvc_ctrl_fixup_xu_info()
2585 const struct uvc_control *ctrl, struct uvc_control_info *info) in uvc_ctrl_fill_xu_info() argument
2594 memcpy(info->entity, ctrl->entity->guid, sizeof(info->entity)); in uvc_ctrl_fill_xu_info()
2595 info->index = ctrl->index; in uvc_ctrl_fill_xu_info()
2596 info->selector = ctrl->index + 1; in uvc_ctrl_fill_xu_info()
2599 ret = uvc_query_ctrl(dev, UVC_GET_LEN, ctrl->entity->id, dev->intfnum, in uvc_ctrl_fill_xu_info()
2613 ret = uvc_ctrl_get_flags(dev, ctrl, info); in uvc_ctrl_fill_xu_info()
2621 uvc_ctrl_fixup_xu_info(dev, ctrl, info); in uvc_ctrl_fill_xu_info()
2635 static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl,
2639 struct uvc_control *ctrl) in uvc_ctrl_init_xu_ctrl() argument
2644 if (ctrl->initialized) in uvc_ctrl_init_xu_ctrl()
2647 ret = uvc_ctrl_fill_xu_info(dev, ctrl, &info); in uvc_ctrl_init_xu_ctrl()
2651 ret = uvc_ctrl_add_info(dev, ctrl, &info); in uvc_ctrl_init_xu_ctrl()
2656 ctrl->entity->id); in uvc_ctrl_init_xu_ctrl()
2665 struct uvc_control *ctrl; in uvc_xu_ctrl_query() local
2692 ctrl = &entity->controls[i]; in uvc_xu_ctrl_query()
2693 if (ctrl->index == xqry->selector - 1) { in uvc_xu_ctrl_query()
2708 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl); in uvc_xu_ctrl_query()
2716 size = ctrl->info.size; in uvc_xu_ctrl_query()
2753 if (reqflags && !(ctrl->info.flags & reqflags)) { in uvc_xu_ctrl_query()
2799 struct uvc_control *ctrl; in uvc_ctrl_restore_values() local
2808 ctrl = &entity->controls[i]; in uvc_ctrl_restore_values()
2810 if (!ctrl->initialized || !ctrl->modified || in uvc_ctrl_restore_values()
2811 (ctrl->info.flags & UVC_CTRL_FLAG_RESTORE) == 0) in uvc_ctrl_restore_values()
2815 ctrl->info.entity, ctrl->info.index, in uvc_ctrl_restore_values()
2816 ctrl->info.selector); in uvc_ctrl_restore_values()
2817 ctrl->dirty = 1; in uvc_ctrl_restore_values()
2835 static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl, in uvc_ctrl_add_info() argument
2838 ctrl->info = *info; in uvc_ctrl_add_info()
2839 INIT_LIST_HEAD(&ctrl->info.mappings); in uvc_ctrl_add_info()
2842 ctrl->uvc_data = kzalloc(ctrl->info.size * UVC_CTRL_DATA_LAST + 1, in uvc_ctrl_add_info()
2844 if (!ctrl->uvc_data) in uvc_ctrl_add_info()
2847 ctrl->initialized = 1; in uvc_ctrl_add_info()
2850 ctrl->info.entity, ctrl->info.selector, dev->udev->devpath, in uvc_ctrl_add_info()
2851 ctrl->entity->id); in uvc_ctrl_add_info()
2860 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) in __uvc_ctrl_add_mapping() argument
2925 list_add_tail(&map->list, &ctrl->info.mappings); in __uvc_ctrl_add_mapping()
2927 uvc_map_get_name(map), ctrl->info.entity, in __uvc_ctrl_add_mapping()
2928 ctrl->info.selector); in __uvc_ctrl_add_mapping()
2948 struct uvc_control *ctrl; in uvc_ctrl_add_mapping() local
2968 ctrl = &entity->controls[i]; in uvc_ctrl_add_mapping()
2969 if (ctrl->index == mapping->selector - 1) { in uvc_ctrl_add_mapping()
2985 ret = uvc_ctrl_init_xu_ctrl(dev, ctrl); in uvc_ctrl_add_mapping()
2993 mapping->offset + mapping->size > ctrl->info.size * 8) { in uvc_ctrl_add_mapping()
2998 list_for_each_entry(map, &ctrl->info.mappings, list) { in uvc_ctrl_add_mapping()
3018 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
3095 struct uvc_control *ctrl) in uvc_ctrl_init_ctrl() argument
3105 if (UVC_ENTITY_TYPE(ctrl->entity) == UVC_VC_EXTENSION_UNIT) in uvc_ctrl_init_ctrl()
3111 if (uvc_entity_match_guid(ctrl->entity, info->entity) && in uvc_ctrl_init_ctrl()
3112 ctrl->index == info->index) { in uvc_ctrl_init_ctrl()
3113 uvc_ctrl_add_info(chain->dev, ctrl, info); in uvc_ctrl_init_ctrl()
3120 uvc_ctrl_get_flags(chain->dev, ctrl, &ctrl->info); in uvc_ctrl_init_ctrl()
3125 if (!ctrl->initialized) in uvc_ctrl_init_ctrl()
3132 if (!uvc_entity_match_guid(ctrl->entity, mapping->entity) || in uvc_ctrl_init_ctrl()
3133 ctrl->info.selector != mapping->selector) in uvc_ctrl_init_ctrl()
3138 mapping = mapping->filter_mapping(chain, ctrl); in uvc_ctrl_init_ctrl()
3143 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
3157 struct uvc_control *ctrl; in uvc_ctrl_init_chain() local
3183 entity->controls = kcalloc(ncontrols, sizeof(*ctrl), in uvc_ctrl_init_chain()
3190 ctrl = entity->controls; in uvc_ctrl_init_chain()
3195 ctrl->entity = entity; in uvc_ctrl_init_chain()
3196 ctrl->index = i; in uvc_ctrl_init_chain()
3198 uvc_ctrl_init_ctrl(chain, ctrl); in uvc_ctrl_init_chain()
3199 ctrl++; in uvc_ctrl_init_chain()
3246 struct uvc_control *ctrl) in uvc_ctrl_cleanup_mappings() argument
3250 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) { in uvc_ctrl_cleanup_mappings()
3271 struct uvc_control *ctrl = &entity->controls[i]; in uvc_ctrl_cleanup_device() local
3273 if (!ctrl->initialized) in uvc_ctrl_cleanup_device()
3276 uvc_ctrl_cleanup_mappings(dev, ctrl); in uvc_ctrl_cleanup_device()
3277 kfree(ctrl->uvc_data); in uvc_ctrl_cleanup_device()