Lines Matching refs:ctrl

747 static inline __u8 *uvc_ctrl_data(struct uvc_control *ctrl, int id)
749 return ctrl->uvc_data + id * ctrl->info.size;
863 struct uvc_control *ctrl;
871 ctrl = &entity->controls[i];
872 if (!ctrl->initialized)
875 list_for_each_entry(map, &ctrl->info.mappings, list) {
877 *control = ctrl;
884 *control = ctrl;
894 struct uvc_control *ctrl = NULL;
905 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next);
906 if (ctrl && !next)
907 return ctrl;
910 if (ctrl == NULL && !next)
914 return ctrl;
918 struct uvc_control *ctrl)
922 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) {
923 ret = uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id,
924 chain->dev->intfnum, ctrl->info.selector,
925 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF),
926 ctrl->info.size);
931 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN) {
932 ret = uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id,
933 chain->dev->intfnum, ctrl->info.selector,
934 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN),
935 ctrl->info.size);
939 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) {
940 ret = uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id,
941 chain->dev->intfnum, ctrl->info.selector,
942 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX),
943 ctrl->info.size);
947 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) {
948 ret = uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id,
949 chain->dev->intfnum, ctrl->info.selector,
950 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES),
951 ctrl->info.size);
953 if (UVC_ENTITY_TYPE(ctrl->entity) !=
964 memset(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES), 0,
965 ctrl->info.size);
969 ctrl->cached = 1;
974 struct uvc_control *ctrl, struct uvc_control_mapping *mapping,
981 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0)
984 if (!ctrl->loaded) {
985 ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id,
986 chain->dev->intfnum, ctrl->info.selector,
987 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
988 ctrl->info.size);
992 ctrl->loaded = 1;
996 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT));
1012 struct uvc_control *ctrl,
1027 if (!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR))
1029 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR))
1033 __uvc_find_control(ctrl->entity, mapping->master_id,
1045 if (!ctrl->cached) {
1046 int ret = uvc_ctrl_populate_cache(chain, ctrl);
1051 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) {
1053 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF));
1088 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN)
1090 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN));
1092 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX)
1094 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX));
1096 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES)
1098 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1106 struct uvc_control *ctrl;
1114 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping);
1115 if (ctrl == NULL) {
1120 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl);
1140 struct uvc_control *ctrl;
1153 ctrl = uvc_find_control(chain, query_menu->id, &mapping);
1154 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) {
1167 (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES)) {
1170 if (!ctrl->cached) {
1171 ret = uvc_ctrl_populate_cache(chain, ctrl);
1177 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1197 struct uvc_control *ctrl,
1203 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
1208 ev->u.ctrl.value = value;
1209 ev->u.ctrl.changes = changes;
1210 ev->u.ctrl.type = v4l2_ctrl.type;
1211 ev->u.ctrl.flags = v4l2_ctrl.flags;
1212 ev->u.ctrl.minimum = v4l2_ctrl.minimum;
1213 ev->u.ctrl.maximum = v4l2_ctrl.maximum;
1214 ev->u.ctrl.step = v4l2_ctrl.step;
1215 ev->u.ctrl.default_value = v4l2_ctrl.default_value;
1219 struct uvc_control *ctrl, struct uvc_control_mapping *mapping,
1228 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, value, changes);
1243 struct uvc_control *ctrl = NULL;
1257 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0);
1258 if (ctrl == NULL)
1261 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
1264 uvc_ctrl_send_event(handle, ctrl, mapping, val, changes);
1271 struct uvc_control *ctrl;
1277 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
1282 uvc_ctrl_send_slave_event(handle, ctrl,
1300 uvc_ctrl_send_event(handle, ctrl, mapping, xctrls[i].value,
1309 struct uvc_control *ctrl;
1316 ctrl = uvc_find_control(handle->chain, sev->id, &mapping);
1317 if (ctrl == NULL) {
1328 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
1331 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val,
1392 struct uvc_control *ctrl;
1400 ctrl = &entity->controls[i];
1401 if (!ctrl->initialized)
1410 if (ctrl->info.flags & UVC_CTRL_FLAG_AUTO_UPDATE ||
1411 !(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR))
1412 ctrl->loaded = 0;
1414 if (!ctrl->dirty)
1418 ret = uvc_query_ctrl(dev, UVC_SET_CUR, ctrl->entity->id,
1419 dev->intfnum, ctrl->info.selector,
1420 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1421 ctrl->info.size);
1426 memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1427 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP),
1428 ctrl->info.size);
1430 ctrl->dirty = 0;
1464 struct uvc_control *ctrl;
1467 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1468 if (ctrl == NULL)
1471 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
1477 struct uvc_control *ctrl;
1485 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1486 if (ctrl == NULL)
1488 if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR))
1494 if (!ctrl->cached) {
1495 ret = uvc_ctrl_populate_cache(chain, ctrl);
1501 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN));
1503 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX));
1505 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1532 (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES)) {
1533 if (!ctrl->cached) {
1534 ret = uvc_ctrl_populate_cache(chain, ctrl);
1540 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1556 if (!ctrl->loaded && (ctrl->info.size * 8) != mapping->size) {
1557 if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) {
1558 memset(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1559 0, ctrl->info.size);
1562 ctrl->entity->id, chain->dev->intfnum,
1563 ctrl->info.selector,
1564 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1565 ctrl->info.size);
1570 ctrl->loaded = 1;
1574 if (!ctrl->dirty) {
1575 memcpy(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP),
1576 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
1577 ctrl->info.size);
1581 uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT));
1583 ctrl->dirty = 1;
1584 ctrl->modified = 1;
1593 const struct uvc_control *ctrl, struct uvc_control_info *info)
1623 if (fixups[i].entity == ctrl->entity->id &&
1635 const struct uvc_control *ctrl, struct uvc_control_info *info)
1644 memcpy(info->entity, ctrl->entity->extension.guidExtensionCode,
1646 info->index = ctrl->index;
1647 info->selector = ctrl->index + 1;
1650 ret = uvc_query_ctrl(dev, UVC_GET_LEN, ctrl->entity->id, dev->intfnum,
1662 ret = uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id, dev->intfnum,
1680 uvc_ctrl_fixup_xu_info(dev, ctrl, info);
1694 static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl,
1698 struct uvc_control *ctrl)
1703 if (ctrl->initialized)
1706 ret = uvc_ctrl_fill_xu_info(dev, ctrl, &info);
1710 ret = uvc_ctrl_add_info(dev, ctrl, &info);
1714 info.selector, dev->udev->devpath, ctrl->entity->id);
1723 struct uvc_control *ctrl;
1745 ctrl = &entity->controls[i];
1746 if (ctrl->index == xqry->selector - 1) {
1761 ret = uvc_ctrl_init_xu_ctrl(chain->dev, ctrl);
1769 size = ctrl->info.size;
1806 if (reqflags && !(ctrl->info.flags & reqflags)) {
1852 struct uvc_control *ctrl;
1861 ctrl = &entity->controls[i];
1863 if (!ctrl->initialized || !ctrl->modified ||
1864 (ctrl->info.flags & UVC_CTRL_FLAG_RESTORE) == 0)
1868 ctrl->info.entity, ctrl->info.index,
1869 ctrl->info.selector);
1870 ctrl->dirty = 1;
1888 static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl,
1893 ctrl->info = *info;
1894 INIT_LIST_HEAD(&ctrl->info.mappings);
1897 ctrl->uvc_data = kzalloc(ctrl->info.size * UVC_CTRL_DATA_LAST + 1,
1899 if (ctrl->uvc_data == NULL) {
1904 ctrl->initialized = 1;
1907 "entity %u\n", ctrl->info.entity, ctrl->info.selector,
1908 dev->udev->devpath, ctrl->entity->id);
1912 kfree(ctrl->uvc_data);
1920 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
1947 list_add_tail(&map->list, &ctrl->info.mappings);
1950 map->name, ctrl->info.entity, ctrl->info.selector);
1961 struct uvc_control *ctrl;
1981 ctrl = &entity->controls[i];
1982 if (ctrl->index == mapping->selector - 1) {
1998 ret = uvc_ctrl_init_xu_ctrl(dev, ctrl);
2004 list_for_each_entry(map, &ctrl->info.mappings, list) {
2024 ret = __uvc_ctrl_add_mapping(dev, ctrl, mapping);
2099 static void uvc_ctrl_init_ctrl(struct uvc_device *dev, struct uvc_control *ctrl)
2112 if (UVC_ENTITY_TYPE(ctrl->entity) == UVC_VC_EXTENSION_UNIT)
2116 if (uvc_entity_match_guid(ctrl->entity, info->entity) &&
2117 ctrl->index == info->index) {
2118 uvc_ctrl_add_info(dev, ctrl, info);
2123 if (!ctrl->initialized)
2127 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2128 ctrl->info.selector == mapping->selector)
2129 __uvc_ctrl_add_mapping(dev, ctrl, mapping);
2143 struct uvc_control *ctrl;
2166 entity->controls = kcalloc(ncontrols, sizeof(*ctrl),
2173 ctrl = entity->controls;
2178 ctrl->entity = entity;
2179 ctrl->index = i;
2181 uvc_ctrl_init_ctrl(dev, ctrl);
2182 ctrl++;
2193 struct uvc_control *ctrl)
2197 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) {
2212 struct uvc_control *ctrl = &entity->controls[i];
2214 if (!ctrl->initialized)
2217 uvc_ctrl_cleanup_mappings(dev, ctrl);
2218 kfree(ctrl->uvc_data);