Lines Matching refs:mapping

373  * device. The custom menu_mapping in the control @mapping is used when
384 static int uvc_mapping_get_menu_value(const struct uvc_control_mapping *mapping,
387 if (!test_bit(idx, &mapping->menu_mask))
390 if (mapping->menu_mapping)
391 return mapping->menu_mapping[idx];
397 uvc_mapping_get_menu_name(const struct uvc_control_mapping *mapping, u32 idx)
399 if (!test_bit(idx, &mapping->menu_mask))
402 if (mapping->menu_names)
403 return mapping->menu_names[idx];
405 return v4l2_ctrl_get_menu(mapping->id)[idx];
408 static s32 uvc_ctrl_get_zoom(struct uvc_control_mapping *mapping,
426 static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
433 static s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
436 unsigned int first = mapping->offset / 8;
453 static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
456 unsigned int first = mapping->offset / 8;
819 * Extract the bit string specified by mapping->offset and mapping->size
821 * a signed 32bit integer. Sign extension will be performed if the mapping
824 static s32 uvc_get_le_value(struct uvc_control_mapping *mapping,
827 int bits = mapping->size;
828 int offset = mapping->offset;
849 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED)
850 value |= -(value & (1 << (mapping->size - 1)));
856 * Set the bit string specified by mapping->offset and mapping->size
859 static void uvc_set_le_value(struct uvc_control_mapping *mapping,
862 int bits = mapping->size;
863 int offset = mapping->offset;
872 if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON)
902 struct uvc_control_mapping **mapping, struct uvc_control **control,
920 *mapping = map;
924 if ((*mapping == NULL || (*mapping)->id > map->id) &&
927 *mapping = map;
934 u32 v4l2_id, struct uvc_control_mapping **mapping)
940 *mapping = NULL;
947 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next);
1016 static s32 __uvc_ctrl_get_value(struct uvc_control_mapping *mapping,
1019 s32 value = mapping->get(mapping, UVC_GET_CUR, data);
1021 if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
1024 for (i = 0; BIT(i) <= mapping->menu_mask; ++i) {
1027 if (!test_bit(i, &mapping->menu_mask))
1030 menu_value = uvc_mapping_get_menu_value(mapping, i);
1080 struct uvc_control_mapping *mapping,
1092 *value = __uvc_ctrl_get_value(mapping,
1157 struct uvc_control_mapping *mapping;
1167 ctrl = uvc_find_control(chain, v4l2_id, &mapping);
1177 if (ioctl != VIDIOC_S_EXT_CTRLS || !mapping->master_id)
1185 if (ctrls->controls[i].id == mapping->master_id)
1187 mapping->master_manual ? 0 : -EACCES;
1190 __uvc_find_control(ctrl->entity, mapping->master_id, &master_map,
1197 if (ret >= 0 && val != mapping->master_manual)
1218 struct uvc_control_mapping *mapping)
1226 return mapping->get(mapping, UVC_GET_RES,
1230 return mapping->get(mapping, UVC_GET_MAX,
1238 struct uvc_control_mapping *mapping,
1246 v4l2_ctrl->id = mapping->id;
1247 v4l2_ctrl->type = mapping->v4l2_type;
1248 strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping),
1257 if (mapping->master_id)
1258 __uvc_find_control(ctrl->entity, mapping->master_id,
1266 if (val != mapping->master_manual)
1277 v4l2_ctrl->default_value = mapping->get(mapping, UVC_GET_DEF,
1281 switch (mapping->v4l2_type) {
1283 v4l2_ctrl->minimum = ffs(mapping->menu_mask) - 1;
1284 v4l2_ctrl->maximum = fls(mapping->menu_mask) - 1;
1287 for (i = 0; BIT(i) <= mapping->menu_mask; ++i) {
1290 if (!test_bit(i, &mapping->menu_mask))
1293 menu_value = uvc_mapping_get_menu_value(mapping, i);
1317 v4l2_ctrl->maximum = uvc_get_ctrl_bitmap(ctrl, mapping);
1326 v4l2_ctrl->minimum = mapping->get(mapping, UVC_GET_MIN,
1330 v4l2_ctrl->maximum = mapping->get(mapping, UVC_GET_MAX,
1334 v4l2_ctrl->step = mapping->get(mapping, UVC_GET_RES,
1344 struct uvc_control_mapping *mapping;
1358 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping);
1370 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id,
1376 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl);
1394 struct uvc_control_mapping *mapping;
1405 if (index >= BITS_PER_TYPE(mapping->menu_mask))
1412 ctrl = uvc_find_control(chain, query_menu->id, &mapping);
1413 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) {
1418 if (!test_bit(query_menu->index, &mapping->menu_mask)) {
1423 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) {
1432 mask = uvc_mapping_get_menu_value(mapping, query_menu->index);
1438 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & mask)) {
1444 name = uvc_mapping_get_menu_name(mapping, query_menu->index);
1464 struct uvc_control_mapping *mapping,
1469 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
1493 struct uvc_control_mapping *mapping, s32 value, u32 changes)
1499 if (list_empty(&mapping->ev_subs))
1502 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes);
1504 list_for_each_entry(sev, &mapping->ev_subs, node) {
1520 struct uvc_control_mapping *mapping = NULL;
1525 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0);
1529 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0)
1532 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes);
1538 struct uvc_control_mapping *mapping;
1547 list_for_each_entry(mapping, &ctrl->info.mappings, list) {
1548 s32 value = __uvc_ctrl_get_value(mapping, data);
1554 for (i = 0; i < ARRAY_SIZE(mapping->slave_ids); ++i) {
1555 if (!mapping->slave_ids[i])
1559 mapping->slave_ids[i]);
1562 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value,
1627 struct uvc_control_mapping *mapping;
1634 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
1640 for (j = 0; j < ARRAY_SIZE(mapping->slave_ids); ++j) {
1641 u32 slave_id = mapping->slave_ids[j];
1662 if (mapping->master_id &&
1664 mapping->master_id))
1667 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping,
1675 struct uvc_control_mapping *mapping;
1688 ctrl = uvc_find_control(handle->chain, sev->id, &mapping);
1694 list_add_tail(&sev->node, &mapping->ev_subs);
1700 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
1703 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val,
1824 struct uvc_control_mapping *mapping = NULL;
1832 __uvc_find_control(entity, ctrls->controls[i].id, &mapping,
1871 struct uvc_control_mapping *mapping;
1876 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1880 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
1888 struct uvc_control_mapping *mapping;
1898 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1905 switch (mapping->v4l2_type) {
1913 min = mapping->get(mapping, UVC_GET_MIN,
1915 max = mapping->get(mapping, UVC_GET_MAX,
1917 step = mapping->get(mapping, UVC_GET_RES,
1924 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED)
1938 xctrl->value &= uvc_get_ctrl_bitmap(ctrl, mapping);
1948 if (xctrl->value < (ffs(mapping->menu_mask) - 1) ||
1949 xctrl->value > (fls(mapping->menu_mask) - 1))
1952 if (!test_bit(xctrl->value, &mapping->menu_mask))
1955 value = uvc_mapping_get_menu_value(mapping, xctrl->value);
1961 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) {
1968 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & value))
1980 * If the mapping doesn't span the whole UVC control, the current value
1984 if ((ctrl->info.size * 8) != mapping->size) {
1997 mapping->set(mapping, value,
2333 * Control and mapping handling
2361 * Add a control mapping to a given control.
2364 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
2375 map = kmemdup(mapping, sizeof(*mapping), GFP_KERNEL);
2384 if (mapping->name) {
2385 map->name = kstrdup(mapping->name, GFP_KERNEL);
2392 if (mapping->menu_mapping && mapping->menu_mask) {
2393 size = sizeof(mapping->menu_mapping[0])
2394 * fls(mapping->menu_mask);
2395 map->menu_mapping = kmemdup(mapping->menu_mapping, size,
2400 if (mapping->menu_names && mapping->menu_mask) {
2401 size = sizeof(mapping->menu_names[0])
2402 * fls(mapping->menu_mask);
2403 map->menu_names = kmemdup(mapping->menu_names, size,
2423 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n",
2438 const struct uvc_control_mapping *mapping)
2447 if (mapping->id & ~V4L2_CTRL_ID_MASK) {
2449 "Can't add mapping '%s', control id 0x%08x is invalid\n",
2450 uvc_map_get_name(mapping), mapping->id);
2459 !uvc_entity_match_guid(entity, mapping->entity))
2464 if (ctrl->index == mapping->selector - 1) {
2487 if (mapping->size > 32 ||
2488 mapping->offset + mapping->size > ctrl->info.size * 8) {
2494 if (mapping->id == map->id) {
2496 "Can't add mapping '%s', control id 0x%08x already exists\n",
2497 uvc_map_get_name(mapping), mapping->id);
2507 "Can't add mapping '%s', maximum mappings count (%u) exceeded\n",
2508 uvc_map_get_name(mapping), UVC_MAX_CONTROL_MAPPINGS);
2513 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2625 * First check if the device provides a custom mapping for this control,
2627 * process standard mappings if a custom mapping is found. This
2635 const struct uvc_control_mapping *mapping =
2638 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2639 ctrl->info.selector == mapping->selector) {
2640 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2651 const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i];
2653 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2654 ctrl->info.selector == mapping->selector)
2655 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2663 const struct uvc_control_mapping *mapping = mappings[i];
2665 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2666 ctrl->info.selector == mapping->selector)
2667 __uvc_ctrl_add_mapping(chain, ctrl, mapping);
2752 struct uvc_control_mapping *mapping, *nm;
2754 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) {
2755 list_del(&mapping->list);
2756 kfree(mapping->menu_names);
2757 kfree(mapping->menu_mapping);
2758 kfree(mapping->name);
2759 kfree(mapping);