Lines Matching refs:ctrl

803 static inline u8 *uvc_ctrl_data(struct uvc_control *ctrl, int id)
805 return ctrl->uvc_data + id * ctrl->info.size;
905 struct uvc_control *ctrl;
913 ctrl = &entity->controls[i];
914 if (!ctrl->initialized)
917 list_for_each_entry(map, &ctrl->info.mappings, list) {
919 *control = ctrl;
926 *control = ctrl;
936 struct uvc_control *ctrl = NULL;
947 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next);
948 if (ctrl && !next)
949 return ctrl;
952 if (ctrl == NULL && !next)
956 return ctrl;
960 struct uvc_control *ctrl)
964 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) {
965 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id,
966 chain->dev->intfnum, ctrl->info.selector,
967 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF),
968 ctrl->info.size);
973 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN) {
974 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id,
975 chain->dev->intfnum, ctrl->info.selector,
976 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN),
977 ctrl->info.size);
981 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) {
982 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id,
983 chain->dev->intfnum, ctrl->info.selector,
984 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX),
985 ctrl->info.size);
989 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) {
990 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id,
991 chain->dev->intfnum, ctrl->info.selector,
992 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES),
993 ctrl->info.size);
995 if (UVC_ENTITY_TYPE(ctrl->entity) !=
1007 memset(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES), 0,
1008 ctrl->info.size);
1012 ctrl->cached = 1;
1043 struct uvc_control *ctrl)
1048 if (ctrl->loaded)
1051 data = uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT);
1053 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) {
1054 memset(data, 0, ctrl->info.size);
1055 ctrl->loaded = 1;
1060 if (ctrl->entity->get_cur)
1061 ret = ctrl->entity->get_cur(chain->dev, ctrl->entity,
1062 ctrl->info.selector, data,
1063 ctrl->info.size);
1066 ctrl->entity->id, chain->dev->intfnum,
1067 ctrl->info.selector, data,
1068 ctrl->info.size);
1073 ctrl->loaded = 1;
1079 struct uvc_control *ctrl,
1085 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0)
1088 ret = __uvc_ctrl_load_cur(chain, ctrl);
1093 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT));
1158 struct uvc_control *ctrl;
1167 ctrl = uvc_find_control(chain, v4l2_id, &mapping);
1168 if (!ctrl)
1171 if (!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) && read)
1174 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR) && !read)
1190 __uvc_find_control(ctrl->entity, mapping->master_id, &master_map,
1217 static u32 uvc_get_ctrl_bitmap(struct uvc_control *ctrl,
1225 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES)
1227 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1229 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX)
1231 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX));
1237 struct uvc_control *ctrl,
1252 if (!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR))
1254 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR))
1258 __uvc_find_control(ctrl->entity, mapping->master_id,
1270 if (!ctrl->cached) {
1271 int ret = uvc_ctrl_populate_cache(chain, ctrl);
1276 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) {
1278 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF));
1317 v4l2_ctrl->maximum = uvc_get_ctrl_bitmap(ctrl, mapping);
1325 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN)
1327 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN));
1329 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX)
1331 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX));
1333 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES)
1335 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1343 struct uvc_control *ctrl;
1351 /* Check if the ctrl is a know class */
1358 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping);
1359 if (ctrl == NULL) {
1376 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl);
1395 struct uvc_control *ctrl;
1412 ctrl = uvc_find_control(chain, query_menu->id, &mapping);
1413 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) {
1426 if (!ctrl->cached) {
1427 ret = uvc_ctrl_populate_cache(chain, ctrl);
1438 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & mask)) {
1463 struct uvc_control *ctrl,
1469 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
1474 ev->u.ctrl.value = value;
1475 ev->u.ctrl.changes = changes;
1476 ev->u.ctrl.type = v4l2_ctrl.type;
1477 ev->u.ctrl.flags = v4l2_ctrl.flags;
1478 ev->u.ctrl.minimum = v4l2_ctrl.minimum;
1479 ev->u.ctrl.maximum = v4l2_ctrl.maximum;
1480 ev->u.ctrl.step = v4l2_ctrl.step;
1481 ev->u.ctrl.default_value = v4l2_ctrl.default_value;
1485 * Send control change events to all subscribers for the @ctrl control. By
1492 struct uvc_fh *handle, struct uvc_control *ctrl,
1502 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes);
1521 struct uvc_control *ctrl = NULL;
1525 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0);
1526 if (ctrl == NULL)
1529 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0)
1532 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes);
1536 struct uvc_control *ctrl, const u8 *data)
1544 handle = ctrl->handle;
1545 ctrl->handle = NULL;
1547 list_for_each_entry(mapping, &ctrl->info.mappings, list) {
1558 uvc_ctrl_send_slave_event(chain, handle, ctrl,
1562 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value,
1576 uvc_ctrl_status_event(w->chain, w->ctrl, w->data);
1591 struct uvc_control *ctrl, const u8 *data)
1596 if (list_empty(&ctrl->info.mappings)) {
1597 ctrl->handle = NULL;
1604 w->ctrl = ctrl;
1628 struct uvc_control *ctrl;
1634 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
1636 if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS)
1654 uvc_ctrl_send_slave_event(handle->chain, handle, ctrl,
1667 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping,
1676 struct uvc_control *ctrl;
1688 ctrl = uvc_find_control(handle->chain, sev->id, &mapping);
1689 if (ctrl == NULL) {
1700 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
1703 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val,
1769 struct uvc_control *ctrl;
1777 ctrl = &entity->controls[i];
1778 if (!ctrl->initialized)
1788 if (ctrl->info.flags & UVC_CTRL_FLAG_AUTO_UPDATE ||
1789 !(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR))
1790 ctrl->loaded = 0;
1792 if (!ctrl->dirty)
1796 ret = uvc_query_ctrl(dev, UVC_SET_CUR, ctrl->entity->id,
1797 dev->intfnum, ctrl->info.selector,
1798 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1799 ctrl->info.size);
1804 memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1805 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP),
1806 ctrl->info.size);
1808 ctrl->dirty = 0;
1812 *err_ctrl = ctrl;
1870 struct uvc_control *ctrl;
1876 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1877 if (ctrl == NULL)
1880 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
1887 struct uvc_control *ctrl;
1898 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1899 if (ctrl == NULL)
1901 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR))
1907 if (!ctrl->cached) {
1908 ret = uvc_ctrl_populate_cache(chain, ctrl);
1914 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN));
1916 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX));
1918 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1932 if (!ctrl->cached) {
1933 ret = uvc_ctrl_populate_cache(chain, ctrl);
1938 xctrl->value &= uvc_get_ctrl_bitmap(ctrl, mapping);
1962 if (!ctrl->cached) {
1963 ret = uvc_ctrl_populate_cache(chain, ctrl);
1968 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & value))
1984 if ((ctrl->info.size * 8) != mapping->size) {
1985 ret = __uvc_ctrl_load_cur(chain, ctrl);
1991 if (!ctrl->dirty) {
1992 memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP),
1993 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1994 ctrl->info.size);
1998 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT));
2000 if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS)
2001 ctrl->handle = handle;
2003 ctrl->dirty = 1;
2004 ctrl->modified = 1;
2016 const struct uvc_control *ctrl,
2026 if (ctrl->entity->get_info)
2027 ret = ctrl->entity->get_info(dev, ctrl->entity,
2028 ctrl->info.selector, data);
2030 ret = uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id,
2047 const struct uvc_control *ctrl, struct uvc_control_info *info)
2077 if (fixups[i].entity == ctrl->entity->id &&
2089 const struct uvc_control *ctrl, struct uvc_control_info *info)
2098 memcpy(info->entity, ctrl->entity->guid, sizeof(info->entity));
2099 info->index = ctrl->index;
2100 info->selector = ctrl->index + 1;
2103 ret = uvc_query_ctrl(dev, UVC_GET_LEN, ctrl->entity->id, dev->intfnum,
2117 ret = uvc_ctrl_get_flags(dev, ctrl, info);
2125 uvc_ctrl_fixup_xu_info(dev, ctrl, info);
2139 static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl,
2143 struct uvc_control *ctrl)
2148 if (ctrl->initialized)
2151 ret = uvc_ctrl_fill_xu_info(dev, ctrl, &info);
2155 ret = uvc_ctrl_add_info(dev, ctrl, &info);
2160 ctrl->entity->id);
2169 struct uvc_control *ctrl;
2196 ctrl = &entity->controls[i];
2197 if (ctrl->index == xqry->selector - 1) {
2212 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl);
2220 size = ctrl->info.size;
2257 if (reqflags && !(ctrl->info.flags & reqflags)) {
2303 struct uvc_control *ctrl;
2312 ctrl = &entity->controls[i];
2314 if (!ctrl->initialized || !ctrl->modified ||
2315 (ctrl->info.flags & UVC_CTRL_FLAG_RESTORE) == 0)
2319 ctrl->info.entity, ctrl->info.index,
2320 ctrl->info.selector);
2321 ctrl->dirty = 1;
2339 static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl,
2342 ctrl->info = *info;
2343 INIT_LIST_HEAD(&ctrl->info.mappings);
2346 ctrl->uvc_data = kzalloc(ctrl->info.size * UVC_CTRL_DATA_LAST + 1,
2348 if (!ctrl->uvc_data)
2351 ctrl->initialized = 1;
2354 ctrl->info.entity, ctrl->info.selector, dev->udev->devpath,
2355 ctrl->entity->id);
2364 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
2422 list_add_tail(&map->list, &ctrl->info.mappings);
2424 uvc_map_get_name(map), ctrl->info.entity,
2425 ctrl->info.selector);
2443 struct uvc_control *ctrl;
2463 ctrl = &entity->controls[i];
2464 if (ctrl->index == mapping->selector - 1) {
2480 ret = uvc_ctrl_init_xu_ctrl(dev, ctrl);
2488 mapping->offset + mapping->size > ctrl->info.size * 8) {
2493 list_for_each_entry(map, &ctrl->info.mappings, list) {
2513 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2590 struct uvc_control *ctrl)
2601 if (UVC_ENTITY_TYPE(ctrl->entity) == UVC_VC_EXTENSION_UNIT)
2607 if (uvc_entity_match_guid(ctrl->entity, info->entity) &&
2608 ctrl->index == info->index) {
2609 uvc_ctrl_add_info(chain->dev, ctrl, info);
2616 uvc_ctrl_get_flags(chain->dev, ctrl, &ctrl->info);
2621 if (!ctrl->initialized)
2638 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2639 ctrl->info.selector == mapping->selector) {
2640 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2653 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2654 ctrl->info.selector == mapping->selector)
2655 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2665 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2666 ctrl->info.selector == mapping->selector)
2667 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2681 struct uvc_control *ctrl;
2707 entity->controls = kcalloc(ncontrols, sizeof(*ctrl),
2714 ctrl = entity->controls;
2719 ctrl->entity = entity;
2720 ctrl->index = i;
2722 uvc_ctrl_init_ctrl(chain, ctrl);
2723 ctrl++;
2750 struct uvc_control *ctrl)
2754 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) {
2775 struct uvc_control *ctrl = &entity->controls[i];
2777 if (!ctrl->initialized)
2780 uvc_ctrl_cleanup_mappings(dev, ctrl);
2781 kfree(ctrl->uvc_data);