Lines Matching full: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, in uvc_mapping_get_menu_value() argument
387 if (!test_bit(idx, &mapping->menu_mask)) in uvc_mapping_get_menu_value()
390 if (mapping->menu_mapping) in uvc_mapping_get_menu_value()
391 return mapping->menu_mapping[idx]; in uvc_mapping_get_menu_value()
397 uvc_mapping_get_menu_name(const struct uvc_control_mapping *mapping, u32 idx) in uvc_mapping_get_menu_name() argument
399 if (!test_bit(idx, &mapping->menu_mask)) in uvc_mapping_get_menu_name()
402 if (mapping->menu_names) in uvc_mapping_get_menu_name()
403 return mapping->menu_names[idx]; in uvc_mapping_get_menu_name()
405 return v4l2_ctrl_get_menu(mapping->id)[idx]; in uvc_mapping_get_menu_name()
408 static s32 uvc_ctrl_get_zoom(struct uvc_control_mapping *mapping, in uvc_ctrl_get_zoom() argument
426 static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, in uvc_ctrl_set_zoom() argument
433 static s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_get_rel_speed() argument
436 unsigned int first = mapping->offset / 8; in uvc_ctrl_get_rel_speed()
453 static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_set_rel_speed() argument
456 unsigned int first = mapping->offset / 8; in uvc_ctrl_set_rel_speed()
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, in uvc_get_le_value() argument
827 int bits = mapping->size; in uvc_get_le_value()
828 int offset = mapping->offset; in uvc_get_le_value()
849 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_get_le_value()
850 value |= -(value & (1 << (mapping->size - 1))); in uvc_get_le_value()
856 * Set the bit string specified by mapping->offset and mapping->size
859 static void uvc_set_le_value(struct uvc_control_mapping *mapping, in uvc_set_le_value() argument
862 int bits = mapping->size; in uvc_set_le_value()
863 int offset = mapping->offset; in uvc_set_le_value()
872 if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON) in uvc_set_le_value()
902 struct uvc_control_mapping **mapping, struct uvc_control **control, in __uvc_find_control() argument
920 *mapping = map; in __uvc_find_control()
924 if ((*mapping == NULL || (*mapping)->id > map->id) && in __uvc_find_control()
927 *mapping = map; in __uvc_find_control()
934 u32 v4l2_id, struct uvc_control_mapping **mapping) in uvc_find_control() argument
940 *mapping = NULL; in uvc_find_control()
947 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next); in uvc_find_control()
1016 static s32 __uvc_ctrl_get_value(struct uvc_control_mapping *mapping, in __uvc_ctrl_get_value() argument
1019 s32 value = mapping->get(mapping, UVC_GET_CUR, data); in __uvc_ctrl_get_value()
1021 if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) { in __uvc_ctrl_get_value()
1024 for (i = 0; BIT(i) <= mapping->menu_mask; ++i) { in __uvc_ctrl_get_value()
1027 if (!test_bit(i, &mapping->menu_mask)) in __uvc_ctrl_get_value()
1030 menu_value = uvc_mapping_get_menu_value(mapping, i); in __uvc_ctrl_get_value()
1080 struct uvc_control_mapping *mapping, in __uvc_ctrl_get() argument
1092 *value = __uvc_ctrl_get_value(mapping, in __uvc_ctrl_get()
1157 struct uvc_control_mapping *mapping; in uvc_ctrl_is_accessible() local
1167 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1177 if (ioctl != VIDIOC_S_EXT_CTRLS || !mapping->master_id) in uvc_ctrl_is_accessible()
1185 if (ctrls->controls[i].id == mapping->master_id) in uvc_ctrl_is_accessible()
1187 mapping->master_manual ? 0 : -EACCES; in uvc_ctrl_is_accessible()
1190 __uvc_find_control(ctrl->entity, mapping->master_id, &master_map, in uvc_ctrl_is_accessible()
1197 if (ret >= 0 && val != mapping->master_manual) in uvc_ctrl_is_accessible()
1218 struct uvc_control_mapping *mapping) in uvc_get_ctrl_bitmap() argument
1226 return mapping->get(mapping, UVC_GET_RES, in uvc_get_ctrl_bitmap()
1230 return mapping->get(mapping, UVC_GET_MAX, in uvc_get_ctrl_bitmap()
1238 struct uvc_control_mapping *mapping, in __uvc_query_v4l2_ctrl() argument
1246 v4l2_ctrl->id = mapping->id; in __uvc_query_v4l2_ctrl()
1247 v4l2_ctrl->type = mapping->v4l2_type; in __uvc_query_v4l2_ctrl()
1248 strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping), in __uvc_query_v4l2_ctrl()
1257 if (mapping->master_id) in __uvc_query_v4l2_ctrl()
1258 __uvc_find_control(ctrl->entity, mapping->master_id, in __uvc_query_v4l2_ctrl()
1266 if (val != mapping->master_manual) in __uvc_query_v4l2_ctrl()
1277 v4l2_ctrl->default_value = mapping->get(mapping, UVC_GET_DEF, in __uvc_query_v4l2_ctrl()
1281 switch (mapping->v4l2_type) { in __uvc_query_v4l2_ctrl()
1283 v4l2_ctrl->minimum = ffs(mapping->menu_mask) - 1; in __uvc_query_v4l2_ctrl()
1284 v4l2_ctrl->maximum = fls(mapping->menu_mask) - 1; in __uvc_query_v4l2_ctrl()
1287 for (i = 0; BIT(i) <= mapping->menu_mask; ++i) { in __uvc_query_v4l2_ctrl()
1290 if (!test_bit(i, &mapping->menu_mask)) in __uvc_query_v4l2_ctrl()
1293 menu_value = uvc_mapping_get_menu_value(mapping, i); in __uvc_query_v4l2_ctrl()
1317 v4l2_ctrl->maximum = uvc_get_ctrl_bitmap(ctrl, mapping); in __uvc_query_v4l2_ctrl()
1326 v4l2_ctrl->minimum = mapping->get(mapping, UVC_GET_MIN, in __uvc_query_v4l2_ctrl()
1330 v4l2_ctrl->maximum = mapping->get(mapping, UVC_GET_MAX, in __uvc_query_v4l2_ctrl()
1334 v4l2_ctrl->step = mapping->get(mapping, UVC_GET_RES, in __uvc_query_v4l2_ctrl()
1344 struct uvc_control_mapping *mapping; in uvc_query_v4l2_ctrl() local
1358 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1370 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id, in uvc_query_v4l2_ctrl()
1376 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1383 * Mapping V4L2 controls to UVC controls can be straightforward if done well.
1394 struct uvc_control_mapping *mapping; in uvc_query_v4l2_menu() local
1405 if (index >= BITS_PER_TYPE(mapping->menu_mask)) in uvc_query_v4l2_menu()
1412 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1413 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_query_v4l2_menu()
1418 if (!test_bit(query_menu->index, &mapping->menu_mask)) { in uvc_query_v4l2_menu()
1423 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) { in uvc_query_v4l2_menu()
1432 mask = uvc_mapping_get_menu_value(mapping, query_menu->index); in uvc_query_v4l2_menu()
1438 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & mask)) { in uvc_query_v4l2_menu()
1444 name = uvc_mapping_get_menu_name(mapping, query_menu->index); in uvc_query_v4l2_menu()
1464 struct uvc_control_mapping *mapping, in uvc_ctrl_fill_event() argument
1469 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1493 struct uvc_control_mapping *mapping, s32 value, u32 changes) in uvc_ctrl_send_event() argument
1499 if (list_empty(&mapping->ev_subs)) in uvc_ctrl_send_event()
1502 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1504 list_for_each_entry(sev, &mapping->ev_subs, node) { in uvc_ctrl_send_event()
1520 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_send_slave_event() local
1525 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0); in uvc_ctrl_send_slave_event()
1529 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1532 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1572 struct uvc_control_mapping *mapping; in uvc_ctrl_status_event() local
1582 list_for_each_entry(mapping, &ctrl->info.mappings, list) { in uvc_ctrl_status_event()
1583 s32 value = __uvc_ctrl_get_value(mapping, data); in uvc_ctrl_status_event()
1589 for (i = 0; i < ARRAY_SIZE(mapping->slave_ids); ++i) { in uvc_ctrl_status_event()
1590 if (!mapping->slave_ids[i]) in uvc_ctrl_status_event()
1594 mapping->slave_ids[i]); in uvc_ctrl_status_event()
1597 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
1660 struct uvc_control_mapping *mapping; in uvc_ctrl_send_events() local
1668 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
1673 for (j = 0; j < ARRAY_SIZE(mapping->slave_ids); ++j) { in uvc_ctrl_send_events()
1674 u32 slave_id = mapping->slave_ids[j]; in uvc_ctrl_send_events()
1695 if (mapping->master_id && in uvc_ctrl_send_events()
1697 mapping->master_id)) in uvc_ctrl_send_events()
1700 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
1708 struct uvc_control_mapping *mapping; in uvc_ctrl_add_event() local
1721 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
1727 list_add_tail(&sev->node, &mapping->ev_subs); in uvc_ctrl_add_event()
1733 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
1736 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
1864 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_find_ctrl_idx() local
1872 __uvc_find_control(entity, ctrls->controls[i].id, &mapping, in uvc_ctrl_find_ctrl_idx()
1913 struct uvc_control_mapping *mapping; in uvc_ctrl_get() local
1918 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
1922 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_get()
1930 struct uvc_control_mapping *mapping; in uvc_ctrl_set() local
1940 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
1947 switch (mapping->v4l2_type) { in uvc_ctrl_set()
1955 min = mapping->get(mapping, UVC_GET_MIN, in uvc_ctrl_set()
1957 max = mapping->get(mapping, UVC_GET_MAX, in uvc_ctrl_set()
1959 step = mapping->get(mapping, UVC_GET_RES, in uvc_ctrl_set()
1966 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_ctrl_set()
1980 xctrl->value &= uvc_get_ctrl_bitmap(ctrl, mapping); in uvc_ctrl_set()
1990 if (xctrl->value < (ffs(mapping->menu_mask) - 1) || in uvc_ctrl_set()
1991 xctrl->value > (fls(mapping->menu_mask) - 1)) in uvc_ctrl_set()
1994 if (!test_bit(xctrl->value, &mapping->menu_mask)) in uvc_ctrl_set()
1997 value = uvc_mapping_get_menu_value(mapping, xctrl->value); in uvc_ctrl_set()
2003 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) { in uvc_ctrl_set()
2010 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & value)) in uvc_ctrl_set()
2022 * If the mapping doesn't span the whole UVC control, the current value in uvc_ctrl_set()
2026 if ((ctrl->info.size * 8) != mapping->size) { in uvc_ctrl_set()
2039 mapping->set(mapping, value, in uvc_ctrl_set()
2379 * Control and mapping handling
2407 * Add a control mapping to a given control.
2410 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) in __uvc_ctrl_add_mapping() argument
2421 map = kmemdup(mapping, sizeof(*mapping), GFP_KERNEL); in __uvc_ctrl_add_mapping()
2430 if (mapping->name) { in __uvc_ctrl_add_mapping()
2431 map->name = kstrdup(mapping->name, GFP_KERNEL); in __uvc_ctrl_add_mapping()
2438 if (mapping->menu_mapping && mapping->menu_mask) { in __uvc_ctrl_add_mapping()
2439 size = sizeof(mapping->menu_mapping[0]) in __uvc_ctrl_add_mapping()
2440 * fls(mapping->menu_mask); in __uvc_ctrl_add_mapping()
2441 map->menu_mapping = kmemdup(mapping->menu_mapping, size, in __uvc_ctrl_add_mapping()
2446 if (mapping->menu_names && mapping->menu_mask) { in __uvc_ctrl_add_mapping()
2447 size = sizeof(mapping->menu_names[0]) in __uvc_ctrl_add_mapping()
2448 * fls(mapping->menu_mask); in __uvc_ctrl_add_mapping()
2449 map->menu_names = kmemdup(mapping->menu_names, size, in __uvc_ctrl_add_mapping()
2469 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n", in __uvc_ctrl_add_mapping()
2484 const struct uvc_control_mapping *mapping) in uvc_ctrl_add_mapping() argument
2493 if (mapping->id & ~V4L2_CTRL_ID_MASK) { in uvc_ctrl_add_mapping()
2495 "Can't add mapping '%s', control id 0x%08x is invalid\n", in uvc_ctrl_add_mapping()
2496 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
2505 !uvc_entity_match_guid(entity, mapping->entity)) in uvc_ctrl_add_mapping()
2510 if (ctrl->index == mapping->selector - 1) { in uvc_ctrl_add_mapping()
2533 if (mapping->size > 32 || in uvc_ctrl_add_mapping()
2534 mapping->offset + mapping->size > ctrl->info.size * 8) { in uvc_ctrl_add_mapping()
2540 if (mapping->id == map->id) { in uvc_ctrl_add_mapping()
2542 "Can't add mapping '%s', control id 0x%08x already exists\n", in uvc_ctrl_add_mapping()
2543 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
2553 "Can't add mapping '%s', maximum mappings count (%u) exceeded\n", in uvc_ctrl_add_mapping()
2554 uvc_map_get_name(mapping), UVC_MAX_CONTROL_MAPPINGS); in uvc_ctrl_add_mapping()
2559 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
2671 * First check if the device provides a custom mapping for this control, in uvc_ctrl_init_ctrl()
2673 * process standard mappings if a custom mapping is found. This in uvc_ctrl_init_ctrl()
2681 const struct uvc_control_mapping *mapping = in uvc_ctrl_init_ctrl() local
2684 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && in uvc_ctrl_init_ctrl()
2685 ctrl->info.selector == mapping->selector) { in uvc_ctrl_init_ctrl()
2686 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2697 const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i]; in uvc_ctrl_init_ctrl() local
2699 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && in uvc_ctrl_init_ctrl()
2700 ctrl->info.selector == mapping->selector) in uvc_ctrl_init_ctrl()
2701 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2709 const struct uvc_control_mapping *mapping = mappings[i]; in uvc_ctrl_init_ctrl() local
2711 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && in uvc_ctrl_init_ctrl()
2712 ctrl->info.selector == mapping->selector) in uvc_ctrl_init_ctrl()
2713 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2818 struct uvc_control_mapping *mapping, *nm; in uvc_ctrl_cleanup_mappings() local
2820 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) { in uvc_ctrl_cleanup_mappings()
2821 list_del(&mapping->list); in uvc_ctrl_cleanup_mappings()
2822 kfree(mapping->menu_names); in uvc_ctrl_cleanup_mappings()
2823 kfree(mapping->menu_mapping); in uvc_ctrl_cleanup_mappings()
2824 kfree(mapping->name); in uvc_ctrl_cleanup_mappings()
2825 kfree(mapping); in uvc_ctrl_cleanup_mappings()