Lines Matching refs:mapping
410 static bool uvc_ctrl_mapping_is_compound(struct uvc_control_mapping *mapping) in uvc_ctrl_mapping_is_compound() argument
412 return mapping->v4l2_type >= V4L2_CTRL_COMPOUND_TYPES; in uvc_ctrl_mapping_is_compound()
415 static s32 uvc_mapping_get_s32(struct uvc_control_mapping *mapping, in uvc_mapping_get_s32() argument
420 mapping->get(mapping, query, data_in, sizeof(data_out), &data_out); in uvc_mapping_get_s32()
425 static void uvc_mapping_set_s32(struct uvc_control_mapping *mapping, in uvc_mapping_set_s32() argument
428 mapping->set(mapping, sizeof(data_in), &data_in, data_out); in uvc_mapping_set_s32()
445 static int uvc_mapping_get_menu_value(const struct uvc_control_mapping *mapping, in uvc_mapping_get_menu_value() argument
448 if (!test_bit(idx, &mapping->menu_mask)) in uvc_mapping_get_menu_value()
451 if (mapping->menu_mapping) in uvc_mapping_get_menu_value()
452 return mapping->menu_mapping[idx]; in uvc_mapping_get_menu_value()
458 uvc_mapping_get_menu_name(const struct uvc_control_mapping *mapping, u32 idx) in uvc_mapping_get_menu_name() argument
460 if (!test_bit(idx, &mapping->menu_mask)) in uvc_mapping_get_menu_name()
463 if (mapping->menu_names) in uvc_mapping_get_menu_name()
464 return mapping->menu_names[idx]; in uvc_mapping_get_menu_name()
466 return v4l2_ctrl_get_menu(mapping->id)[idx]; in uvc_mapping_get_menu_name()
469 static int uvc_ctrl_get_zoom(struct uvc_control_mapping *mapping, u8 query, in uvc_ctrl_get_zoom() argument
496 static int uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, in uvc_ctrl_set_zoom() argument
513 static int uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_get_rel_speed() argument
517 unsigned int first = mapping->offset / 8; in uvc_ctrl_get_rel_speed()
540 static int uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_set_rel_speed() argument
544 unsigned int first = mapping->offset / 8; in uvc_ctrl_set_rel_speed()
646 static int uvc_get_rect(struct uvc_control_mapping *mapping, u8 query, in uvc_get_rect() argument
667 static int uvc_set_rect(struct uvc_control_mapping *mapping, size_t v4l2_size, in uvc_set_rect() argument
1033 static s32 uvc_menu_to_v4l2_menu(struct uvc_control_mapping *mapping, s32 val) in uvc_menu_to_v4l2_menu() argument
1037 for (i = 0; BIT(i) <= mapping->menu_mask; ++i) { in uvc_menu_to_v4l2_menu()
1040 if (!test_bit(i, &mapping->menu_mask)) in uvc_menu_to_v4l2_menu()
1043 menu_value = uvc_mapping_get_menu_value(mapping, i); in uvc_menu_to_v4l2_menu()
1058 static int uvc_get_le_value(struct uvc_control_mapping *mapping, in uvc_get_le_value() argument
1062 int offset = mapping->offset; in uvc_get_le_value()
1063 int bits = mapping->size; in uvc_get_le_value()
1089 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_get_le_value()
1090 value |= -(value & (1 << (mapping->size - 1))); in uvc_get_le_value()
1093 if (mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_get_le_value()
1101 *out = uvc_menu_to_v4l2_menu(mapping, value); in uvc_get_le_value()
1113 static int uvc_set_le_value(struct uvc_control_mapping *mapping, in uvc_set_le_value() argument
1117 int offset = mapping->offset; in uvc_set_le_value()
1118 int bits = mapping->size; in uvc_set_le_value()
1128 switch (mapping->v4l2_type) { in uvc_set_le_value()
1130 value = uvc_mapping_get_menu_value(mapping, value); in uvc_set_le_value()
1174 struct uvc_control_mapping **mapping, struct uvc_control **control, in __uvc_find_control() argument
1192 *mapping = map; in __uvc_find_control()
1196 if ((*mapping == NULL || (*mapping)->id > map->id) && in __uvc_find_control()
1201 *mapping = map; in __uvc_find_control()
1208 u32 v4l2_id, struct uvc_control_mapping **mapping) in uvc_find_control() argument
1215 *mapping = NULL; in uvc_find_control()
1222 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next, in uvc_find_control()
1330 struct uvc_control_mapping *mapping, in __uvc_ctrl_get() argument
1342 *value = uvc_mapping_get_s32(mapping, UVC_GET_CUR, in __uvc_ctrl_get()
1394 struct uvc_control_mapping *mapping) in uvc_ctrl_is_readable() argument
1403 switch (mapping->v4l2_type) { in uvc_ctrl_is_readable()
1440 struct uvc_control_mapping *mapping; in uvc_ctrl_is_accessible() local
1455 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1464 return uvc_ctrl_is_readable(ctrls->which, ctrl, mapping); in uvc_ctrl_is_accessible()
1469 if (ioctl != VIDIOC_S_EXT_CTRLS || !mapping->master_id) in uvc_ctrl_is_accessible()
1477 if (ctrls->controls[i].id == mapping->master_id) in uvc_ctrl_is_accessible()
1479 mapping->master_manual ? 0 : -EACCES; in uvc_ctrl_is_accessible()
1482 __uvc_find_control(ctrl->entity, mapping->master_id, &master_map, in uvc_ctrl_is_accessible()
1491 if (ret >= 0 && val != mapping->master_manual) in uvc_ctrl_is_accessible()
1512 struct uvc_control_mapping *mapping) in uvc_get_ctrl_bitmap() argument
1520 return uvc_mapping_get_s32(mapping, UVC_GET_RES, in uvc_get_ctrl_bitmap()
1524 return uvc_mapping_get_s32(mapping, UVC_GET_MAX, in uvc_get_ctrl_bitmap()
1549 struct uvc_control_mapping *mapping, in __uvc_queryctrl_boundaries() argument
1567 v4l2_ctrl->default_value = uvc_mapping_get_s32(mapping, in __uvc_queryctrl_boundaries()
1571 switch (mapping->v4l2_type) { in __uvc_queryctrl_boundaries()
1573 v4l2_ctrl->minimum = ffs(mapping->menu_mask) - 1; in __uvc_queryctrl_boundaries()
1574 v4l2_ctrl->maximum = fls(mapping->menu_mask) - 1; in __uvc_queryctrl_boundaries()
1592 v4l2_ctrl->maximum = uvc_get_ctrl_bitmap(ctrl, mapping); in __uvc_queryctrl_boundaries()
1601 v4l2_ctrl->maximum = uvc_mapping_get_s32(mapping, UVC_GET_MAX, in __uvc_queryctrl_boundaries()
1620 v4l2_ctrl->minimum = uvc_mapping_get_s32(mapping, in __uvc_queryctrl_boundaries()
1627 v4l2_ctrl->step = uvc_mapping_get_s32(mapping, UVC_GET_RES, in __uvc_queryctrl_boundaries()
1635 static size_t uvc_mapping_v4l2_size(struct uvc_control_mapping *mapping) in uvc_mapping_v4l2_size() argument
1637 if (mapping->v4l2_type == V4L2_CTRL_TYPE_RECT) in uvc_mapping_v4l2_size()
1640 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_mapping_v4l2_size()
1641 return DIV_ROUND_UP(mapping->size, 8); in uvc_mapping_v4l2_size()
1648 struct uvc_control_mapping *mapping, in __uvc_query_v4l2_ctrl() argument
1656 v4l2_ctrl->id = mapping->id; in __uvc_query_v4l2_ctrl()
1657 v4l2_ctrl->type = mapping->v4l2_type; in __uvc_query_v4l2_ctrl()
1658 strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping), in __uvc_query_v4l2_ctrl()
1670 if (mapping->master_id) in __uvc_query_v4l2_ctrl()
1671 __uvc_find_control(ctrl->entity, mapping->master_id, in __uvc_query_v4l2_ctrl()
1696 if (val != mapping->master_manual) in __uvc_query_v4l2_ctrl()
1701 v4l2_ctrl->elem_size = uvc_mapping_v4l2_size(mapping); in __uvc_query_v4l2_ctrl()
1713 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, v4l2_ctrl); in __uvc_query_v4l2_ctrl()
1714 if (ret && !mapping->disabled) { in __uvc_query_v4l2_ctrl()
1717 mapping->id, uvc_map_get_name(mapping), ret); in __uvc_query_v4l2_ctrl()
1718 mapping->disabled = true; in __uvc_query_v4l2_ctrl()
1721 if (mapping->disabled) in __uvc_query_v4l2_ctrl()
1731 struct uvc_control_mapping *mapping; in uvc_query_v4l2_ctrl() local
1745 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1757 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id, in uvc_query_v4l2_ctrl()
1763 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1781 struct uvc_control_mapping *mapping; in uvc_query_v4l2_menu() local
1792 if (index >= BITS_PER_TYPE(mapping->menu_mask)) in uvc_query_v4l2_menu()
1799 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1800 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_query_v4l2_menu()
1805 if (!test_bit(query_menu->index, &mapping->menu_mask)) { in uvc_query_v4l2_menu()
1810 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) { in uvc_query_v4l2_menu()
1819 mask = uvc_mapping_get_menu_value(mapping, query_menu->index); in uvc_query_v4l2_menu()
1825 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & mask)) { in uvc_query_v4l2_menu()
1831 name = uvc_mapping_get_menu_name(mapping, query_menu->index); in uvc_query_v4l2_menu()
1851 struct uvc_control_mapping *mapping, in uvc_ctrl_fill_event() argument
1856 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1880 struct uvc_control_mapping *mapping, s32 value, u32 changes) in uvc_ctrl_send_event() argument
1886 if (list_empty(&mapping->ev_subs)) in uvc_ctrl_send_event()
1889 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1891 list_for_each_entry(sev, &mapping->ev_subs, node) { in uvc_ctrl_send_event()
1907 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_send_slave_event() local
1912 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0, 0); in uvc_ctrl_send_slave_event()
1916 if (uvc_ctrl_mapping_is_compound(mapping) || in uvc_ctrl_send_slave_event()
1917 __uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1920 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1971 struct uvc_control_mapping *mapping; in uvc_ctrl_status_event() local
1984 list_for_each_entry(mapping, &ctrl->info.mappings, list) { in uvc_ctrl_status_event()
1987 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_ctrl_status_event()
1990 value = uvc_mapping_get_s32(mapping, UVC_GET_CUR, data); in uvc_ctrl_status_event()
1996 for (i = 0; i < ARRAY_SIZE(mapping->slave_ids); ++i) { in uvc_ctrl_status_event()
1997 if (!mapping->slave_ids[i]) in uvc_ctrl_status_event()
2001 mapping->slave_ids[i]); in uvc_ctrl_status_event()
2004 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
2069 struct uvc_control_mapping *mapping; in uvc_ctrl_send_events() local
2078 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
2086 for (j = 0; j < ARRAY_SIZE(mapping->slave_ids); ++j) { in uvc_ctrl_send_events()
2087 u32 slave_id = mapping->slave_ids[j]; in uvc_ctrl_send_events()
2104 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_ctrl_send_events()
2112 if (mapping->master_id && in uvc_ctrl_send_events()
2114 mapping->master_id)) in uvc_ctrl_send_events()
2117 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
2125 struct uvc_control_mapping *mapping; in uvc_ctrl_add_event() local
2138 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
2153 if (uvc_ctrl_mapping_is_compound(mapping) || in uvc_ctrl_add_event()
2154 __uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
2157 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
2170 list_add_tail(&sev->node, &mapping->ev_subs); in uvc_ctrl_add_event()
2303 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_find_ctrl_idx() local
2311 __uvc_find_control(entity, ctrls->controls[i].id, &mapping, in uvc_ctrl_find_ctrl_idx()
2359 struct uvc_control_mapping *mapping, in uvc_mapping_get_xctrl_compound() argument
2390 size = uvc_mapping_v4l2_size(mapping); in uvc_mapping_get_xctrl_compound()
2408 ret = mapping->get(mapping, query, uvc_ctrl_data(ctrl, id), size, data); in uvc_mapping_get_xctrl_compound()
2422 struct uvc_control_mapping *mapping, in uvc_mapping_get_xctrl_std() argument
2430 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_mapping_get_xctrl_std()
2439 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qec); in uvc_mapping_get_xctrl_std()
2460 struct uvc_control_mapping *mapping, in uvc_mapping_get_xctrl() argument
2463 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_mapping_get_xctrl()
2464 return uvc_mapping_get_xctrl_compound(chain, ctrl, mapping, in uvc_mapping_get_xctrl()
2466 return uvc_mapping_get_xctrl_std(chain, ctrl, mapping, which, xctrl); in uvc_mapping_get_xctrl()
2473 struct uvc_control_mapping *mapping; in uvc_ctrl_get() local
2478 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
2482 return uvc_mapping_get_xctrl(chain, ctrl, mapping, which, xctrl); in uvc_ctrl_get()
2488 struct uvc_control_mapping *mapping, in uvc_ctrl_clamp() argument
2497 switch (mapping->v4l2_type) { in uvc_ctrl_clamp()
2505 max = uvc_mapping_get_s32(mapping, UVC_GET_MAX, in uvc_ctrl_clamp()
2520 min = uvc_mapping_get_s32(mapping, UVC_GET_MIN, in uvc_ctrl_clamp()
2523 step = uvc_mapping_get_s32(mapping, UVC_GET_RES, in uvc_ctrl_clamp()
2529 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_ctrl_clamp()
2543 value &= uvc_get_ctrl_bitmap(ctrl, mapping); in uvc_ctrl_clamp()
2552 if (value < (ffs(mapping->menu_mask) - 1) || in uvc_ctrl_clamp()
2553 value > (fls(mapping->menu_mask) - 1)) in uvc_ctrl_clamp()
2556 if (!test_bit(value, &mapping->menu_mask)) in uvc_ctrl_clamp()
2563 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) { in uvc_ctrl_clamp()
2564 int val = uvc_mapping_get_menu_value(mapping, value); in uvc_ctrl_clamp()
2571 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & val)) in uvc_ctrl_clamp()
2584 struct uvc_control_mapping *mapping, in uvc_mapping_set_xctrl_compound() argument
2588 size_t size = uvc_mapping_v4l2_size(mapping); in uvc_mapping_set_xctrl_compound()
2602 return mapping->set(mapping, size, data, in uvc_mapping_set_xctrl_compound()
2607 struct uvc_control_mapping *mapping, in uvc_mapping_set_xctrl() argument
2610 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_mapping_set_xctrl()
2611 return uvc_mapping_set_xctrl_compound(ctrl, mapping, xctrl); in uvc_mapping_set_xctrl()
2613 uvc_mapping_set_s32(mapping, xctrl->value, in uvc_mapping_set_xctrl()
2621 struct uvc_control_mapping *mapping; in uvc_ctrl_set() local
2630 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
2636 ret = uvc_ctrl_clamp(chain, ctrl, xctrl->id, mapping, &xctrl->value); in uvc_ctrl_set()
2644 if ((ctrl->info.size * 8) != mapping->size) { in uvc_ctrl_set()
2657 ret = uvc_mapping_set_xctrl(ctrl, mapping, xctrl); in uvc_ctrl_set()
3028 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) in __uvc_ctrl_add_mapping() argument
3040 map = kmemdup(mapping, sizeof(*mapping), GFP_KERNEL); in __uvc_ctrl_add_mapping()
3049 if (mapping->name) { in __uvc_ctrl_add_mapping()
3050 map->name = kstrdup(mapping->name, GFP_KERNEL); in __uvc_ctrl_add_mapping()
3057 if (mapping->menu_mapping && mapping->menu_mask) { in __uvc_ctrl_add_mapping()
3058 size = sizeof(mapping->menu_mapping[0]) in __uvc_ctrl_add_mapping()
3059 * fls(mapping->menu_mask); in __uvc_ctrl_add_mapping()
3060 map->menu_mapping = kmemdup(mapping->menu_mapping, size, in __uvc_ctrl_add_mapping()
3065 if (mapping->menu_names && mapping->menu_mask) { in __uvc_ctrl_add_mapping()
3066 size = sizeof(mapping->menu_names[0]) in __uvc_ctrl_add_mapping()
3067 * fls(mapping->menu_mask); in __uvc_ctrl_add_mapping()
3068 map->menu_names = kmemdup(mapping->menu_names, size, in __uvc_ctrl_add_mapping()
3111 const struct uvc_control_mapping *mapping) in uvc_ctrl_add_mapping() argument
3120 if (mapping->id & ~V4L2_CTRL_ID_MASK) { in uvc_ctrl_add_mapping()
3123 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
3132 !uvc_entity_match_guid(entity, mapping->entity)) in uvc_ctrl_add_mapping()
3137 if (ctrl->index == mapping->selector - 1) { in uvc_ctrl_add_mapping()
3160 if (mapping->size > 32 || in uvc_ctrl_add_mapping()
3161 mapping->offset + mapping->size > ctrl->info.size * 8) { in uvc_ctrl_add_mapping()
3167 if (mapping->id == map->id) { in uvc_ctrl_add_mapping()
3170 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
3181 uvc_map_get_name(mapping), UVC_MAX_CONTROL_MAPPINGS); in uvc_ctrl_add_mapping()
3186 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
3289 const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i]; in uvc_ctrl_init_ctrl() local
3291 if (!uvc_entity_match_guid(ctrl->entity, mapping->entity) || in uvc_ctrl_init_ctrl()
3292 ctrl->info.selector != mapping->selector) in uvc_ctrl_init_ctrl()
3296 if (mapping->filter_mapping) { in uvc_ctrl_init_ctrl()
3297 mapping = mapping->filter_mapping(chain, ctrl); in uvc_ctrl_init_ctrl()
3298 if (!mapping) in uvc_ctrl_init_ctrl()
3302 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
3410 struct uvc_control_mapping *mapping, *nm; in uvc_ctrl_cleanup_mappings() local
3412 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) { in uvc_ctrl_cleanup_mappings()
3413 list_del(&mapping->list); in uvc_ctrl_cleanup_mappings()
3414 kfree(mapping->menu_names); in uvc_ctrl_cleanup_mappings()
3415 kfree(mapping->menu_mapping); in uvc_ctrl_cleanup_mappings()
3416 kfree(mapping->name); in uvc_ctrl_cleanup_mappings()
3417 kfree(mapping); in uvc_ctrl_cleanup_mappings()