Lines Matching refs:mapping
388 static bool uvc_ctrl_mapping_is_compound(struct uvc_control_mapping *mapping) in uvc_ctrl_mapping_is_compound() argument
390 return mapping->v4l2_type >= V4L2_CTRL_COMPOUND_TYPES; in uvc_ctrl_mapping_is_compound()
393 static s32 uvc_mapping_get_s32(struct uvc_control_mapping *mapping, in uvc_mapping_get_s32() argument
398 mapping->get(mapping, query, data_in, sizeof(data_out), &data_out); in uvc_mapping_get_s32()
403 static void uvc_mapping_set_s32(struct uvc_control_mapping *mapping, in uvc_mapping_set_s32() argument
406 mapping->set(mapping, sizeof(data_in), &data_in, data_out); in uvc_mapping_set_s32()
423 static int uvc_mapping_get_menu_value(const struct uvc_control_mapping *mapping, in uvc_mapping_get_menu_value() argument
426 if (!test_bit(idx, &mapping->menu_mask)) in uvc_mapping_get_menu_value()
429 if (mapping->menu_mapping) in uvc_mapping_get_menu_value()
430 return mapping->menu_mapping[idx]; in uvc_mapping_get_menu_value()
436 uvc_mapping_get_menu_name(const struct uvc_control_mapping *mapping, u32 idx) in uvc_mapping_get_menu_name() argument
438 if (!test_bit(idx, &mapping->menu_mask)) in uvc_mapping_get_menu_name()
441 if (mapping->menu_names) in uvc_mapping_get_menu_name()
442 return mapping->menu_names[idx]; in uvc_mapping_get_menu_name()
444 return v4l2_ctrl_get_menu(mapping->id)[idx]; in uvc_mapping_get_menu_name()
447 static int uvc_ctrl_get_zoom(struct uvc_control_mapping *mapping, u8 query, in uvc_ctrl_get_zoom() argument
473 static int uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, in uvc_ctrl_set_zoom() argument
490 static int uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_get_rel_speed() argument
494 unsigned int first = mapping->offset / 8; in uvc_ctrl_get_rel_speed()
518 static int uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_set_rel_speed() argument
522 unsigned int first = mapping->offset / 8; in uvc_ctrl_set_rel_speed()
624 static int uvc_get_rect(struct uvc_control_mapping *mapping, u8 query, in uvc_get_rect() argument
645 static int uvc_set_rect(struct uvc_control_mapping *mapping, size_t v4l2_size, in uvc_set_rect() argument
999 static s32 uvc_menu_to_v4l2_menu(struct uvc_control_mapping *mapping, s32 val) in uvc_menu_to_v4l2_menu() argument
1003 for (i = 0; BIT(i) <= mapping->menu_mask; ++i) { in uvc_menu_to_v4l2_menu()
1006 if (!test_bit(i, &mapping->menu_mask)) in uvc_menu_to_v4l2_menu()
1009 menu_value = uvc_mapping_get_menu_value(mapping, i); in uvc_menu_to_v4l2_menu()
1024 static int uvc_get_le_value(struct uvc_control_mapping *mapping, in uvc_get_le_value() argument
1028 int offset = mapping->offset; in uvc_get_le_value()
1029 int bits = mapping->size; in uvc_get_le_value()
1055 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_get_le_value()
1056 value |= -(value & (1 << (mapping->size - 1))); in uvc_get_le_value()
1059 if (mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_get_le_value()
1067 *out = uvc_menu_to_v4l2_menu(mapping, value); in uvc_get_le_value()
1079 static int uvc_set_le_value(struct uvc_control_mapping *mapping, in uvc_set_le_value() argument
1083 int offset = mapping->offset; in uvc_set_le_value()
1084 int bits = mapping->size; in uvc_set_le_value()
1094 switch (mapping->v4l2_type) { in uvc_set_le_value()
1096 value = uvc_mapping_get_menu_value(mapping, value); in uvc_set_le_value()
1140 struct uvc_control_mapping **mapping, struct uvc_control **control, in __uvc_find_control() argument
1158 *mapping = map; in __uvc_find_control()
1162 if ((*mapping == NULL || (*mapping)->id > map->id) && in __uvc_find_control()
1167 *mapping = map; in __uvc_find_control()
1174 u32 v4l2_id, struct uvc_control_mapping **mapping) in uvc_find_control() argument
1181 *mapping = NULL; in uvc_find_control()
1188 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next, in uvc_find_control()
1296 struct uvc_control_mapping *mapping, in __uvc_ctrl_get() argument
1308 *value = uvc_mapping_get_s32(mapping, UVC_GET_CUR, in __uvc_ctrl_get()
1360 struct uvc_control_mapping *mapping) in uvc_ctrl_is_readable() argument
1369 switch (mapping->v4l2_type) { in uvc_ctrl_is_readable()
1406 struct uvc_control_mapping *mapping; in uvc_ctrl_is_accessible() local
1415 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1420 return uvc_ctrl_is_readable(ctrls->which, ctrl, mapping); in uvc_ctrl_is_accessible()
1425 if (ioctl != VIDIOC_S_EXT_CTRLS || !mapping->master_id) in uvc_ctrl_is_accessible()
1433 if (ctrls->controls[i].id == mapping->master_id) in uvc_ctrl_is_accessible()
1435 mapping->master_manual ? 0 : -EACCES; in uvc_ctrl_is_accessible()
1438 __uvc_find_control(ctrl->entity, mapping->master_id, &master_map, in uvc_ctrl_is_accessible()
1447 if (ret >= 0 && val != mapping->master_manual) in uvc_ctrl_is_accessible()
1468 struct uvc_control_mapping *mapping) in uvc_get_ctrl_bitmap() argument
1476 return uvc_mapping_get_s32(mapping, UVC_GET_RES, in uvc_get_ctrl_bitmap()
1480 return uvc_mapping_get_s32(mapping, UVC_GET_MAX, in uvc_get_ctrl_bitmap()
1494 struct uvc_control_mapping *mapping, in __uvc_queryctrl_boundaries() argument
1512 v4l2_ctrl->default_value = uvc_mapping_get_s32(mapping, in __uvc_queryctrl_boundaries()
1516 switch (mapping->v4l2_type) { in __uvc_queryctrl_boundaries()
1518 v4l2_ctrl->minimum = ffs(mapping->menu_mask) - 1; in __uvc_queryctrl_boundaries()
1519 v4l2_ctrl->maximum = fls(mapping->menu_mask) - 1; in __uvc_queryctrl_boundaries()
1537 v4l2_ctrl->maximum = uvc_get_ctrl_bitmap(ctrl, mapping); in __uvc_queryctrl_boundaries()
1546 v4l2_ctrl->minimum = uvc_mapping_get_s32(mapping, UVC_GET_MIN, in __uvc_queryctrl_boundaries()
1552 v4l2_ctrl->maximum = uvc_mapping_get_s32(mapping, UVC_GET_MAX, in __uvc_queryctrl_boundaries()
1558 v4l2_ctrl->step = uvc_mapping_get_s32(mapping, UVC_GET_RES, in __uvc_queryctrl_boundaries()
1566 static size_t uvc_mapping_v4l2_size(struct uvc_control_mapping *mapping) in uvc_mapping_v4l2_size() argument
1568 if (mapping->v4l2_type == V4L2_CTRL_TYPE_RECT) in uvc_mapping_v4l2_size()
1571 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_mapping_v4l2_size()
1572 return DIV_ROUND_UP(mapping->size, 8); in uvc_mapping_v4l2_size()
1579 struct uvc_control_mapping *mapping, in __uvc_query_v4l2_ctrl() argument
1587 v4l2_ctrl->id = mapping->id; in __uvc_query_v4l2_ctrl()
1588 v4l2_ctrl->type = mapping->v4l2_type; in __uvc_query_v4l2_ctrl()
1589 strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping), in __uvc_query_v4l2_ctrl()
1601 if (mapping->master_id) in __uvc_query_v4l2_ctrl()
1602 __uvc_find_control(ctrl->entity, mapping->master_id, in __uvc_query_v4l2_ctrl()
1627 if (val != mapping->master_manual) in __uvc_query_v4l2_ctrl()
1632 v4l2_ctrl->elem_size = uvc_mapping_v4l2_size(mapping); in __uvc_query_v4l2_ctrl()
1644 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, v4l2_ctrl); in __uvc_query_v4l2_ctrl()
1645 if (ret && !mapping->disabled) { in __uvc_query_v4l2_ctrl()
1648 mapping->id, uvc_map_get_name(mapping), ret); in __uvc_query_v4l2_ctrl()
1649 mapping->disabled = true; in __uvc_query_v4l2_ctrl()
1652 if (mapping->disabled) in __uvc_query_v4l2_ctrl()
1662 struct uvc_control_mapping *mapping; in uvc_query_v4l2_ctrl() local
1676 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1688 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id, in uvc_query_v4l2_ctrl()
1694 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1712 struct uvc_control_mapping *mapping; in uvc_query_v4l2_menu() local
1723 if (index >= BITS_PER_TYPE(mapping->menu_mask)) in uvc_query_v4l2_menu()
1730 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1731 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_query_v4l2_menu()
1736 if (!test_bit(query_menu->index, &mapping->menu_mask)) { in uvc_query_v4l2_menu()
1741 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) { in uvc_query_v4l2_menu()
1750 mask = uvc_mapping_get_menu_value(mapping, query_menu->index); in uvc_query_v4l2_menu()
1756 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & mask)) { in uvc_query_v4l2_menu()
1762 name = uvc_mapping_get_menu_name(mapping, query_menu->index); in uvc_query_v4l2_menu()
1782 struct uvc_control_mapping *mapping, in uvc_ctrl_fill_event() argument
1787 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1811 struct uvc_control_mapping *mapping, s32 value, u32 changes) in uvc_ctrl_send_event() argument
1817 if (list_empty(&mapping->ev_subs)) in uvc_ctrl_send_event()
1820 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1822 list_for_each_entry(sev, &mapping->ev_subs, node) { in uvc_ctrl_send_event()
1838 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_send_slave_event() local
1843 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0, 0); in uvc_ctrl_send_slave_event()
1847 if (uvc_ctrl_mapping_is_compound(mapping) || in uvc_ctrl_send_slave_event()
1848 __uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1851 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1902 struct uvc_control_mapping *mapping; in uvc_ctrl_status_event() local
1915 list_for_each_entry(mapping, &ctrl->info.mappings, list) { in uvc_ctrl_status_event()
1918 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_ctrl_status_event()
1921 value = uvc_mapping_get_s32(mapping, UVC_GET_CUR, data); in uvc_ctrl_status_event()
1927 for (i = 0; i < ARRAY_SIZE(mapping->slave_ids); ++i) { in uvc_ctrl_status_event()
1928 if (!mapping->slave_ids[i]) in uvc_ctrl_status_event()
1932 mapping->slave_ids[i]); in uvc_ctrl_status_event()
1935 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
2000 struct uvc_control_mapping *mapping; in uvc_ctrl_send_events() local
2009 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
2017 for (j = 0; j < ARRAY_SIZE(mapping->slave_ids); ++j) { in uvc_ctrl_send_events()
2018 u32 slave_id = mapping->slave_ids[j]; in uvc_ctrl_send_events()
2035 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_ctrl_send_events()
2043 if (mapping->master_id && in uvc_ctrl_send_events()
2045 mapping->master_id)) in uvc_ctrl_send_events()
2048 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
2056 struct uvc_control_mapping *mapping; in uvc_ctrl_add_event() local
2069 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
2084 if (uvc_ctrl_mapping_is_compound(mapping) || in uvc_ctrl_add_event()
2085 __uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
2088 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
2101 list_add_tail(&sev->node, &mapping->ev_subs); in uvc_ctrl_add_event()
2234 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_find_ctrl_idx() local
2242 __uvc_find_control(entity, ctrls->controls[i].id, &mapping, in uvc_ctrl_find_ctrl_idx()
2290 struct uvc_control_mapping *mapping, in uvc_mapping_get_xctrl_compound() argument
2321 size = uvc_mapping_v4l2_size(mapping); in uvc_mapping_get_xctrl_compound()
2339 ret = mapping->get(mapping, query, uvc_ctrl_data(ctrl, id), size, data); in uvc_mapping_get_xctrl_compound()
2353 struct uvc_control_mapping *mapping, in uvc_mapping_get_xctrl_std() argument
2361 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_mapping_get_xctrl_std()
2370 ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qec); in uvc_mapping_get_xctrl_std()
2391 struct uvc_control_mapping *mapping, in uvc_mapping_get_xctrl() argument
2394 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_mapping_get_xctrl()
2395 return uvc_mapping_get_xctrl_compound(chain, ctrl, mapping, in uvc_mapping_get_xctrl()
2397 return uvc_mapping_get_xctrl_std(chain, ctrl, mapping, which, xctrl); in uvc_mapping_get_xctrl()
2404 struct uvc_control_mapping *mapping; in uvc_ctrl_get() local
2409 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
2413 return uvc_mapping_get_xctrl(chain, ctrl, mapping, which, xctrl); in uvc_ctrl_get()
2418 struct uvc_control_mapping *mapping, in uvc_ctrl_clamp() argument
2427 switch (mapping->v4l2_type) { in uvc_ctrl_clamp()
2435 min = uvc_mapping_get_s32(mapping, UVC_GET_MIN, in uvc_ctrl_clamp()
2437 max = uvc_mapping_get_s32(mapping, UVC_GET_MAX, in uvc_ctrl_clamp()
2439 step = uvc_mapping_get_s32(mapping, UVC_GET_RES, in uvc_ctrl_clamp()
2445 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_ctrl_clamp()
2459 value &= uvc_get_ctrl_bitmap(ctrl, mapping); in uvc_ctrl_clamp()
2468 if (value < (ffs(mapping->menu_mask) - 1) || in uvc_ctrl_clamp()
2469 value > (fls(mapping->menu_mask) - 1)) in uvc_ctrl_clamp()
2472 if (!test_bit(value, &mapping->menu_mask)) in uvc_ctrl_clamp()
2479 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK) { in uvc_ctrl_clamp()
2480 int val = uvc_mapping_get_menu_value(mapping, value); in uvc_ctrl_clamp()
2487 if (!(uvc_get_ctrl_bitmap(ctrl, mapping) & val)) in uvc_ctrl_clamp()
2500 struct uvc_control_mapping *mapping, in uvc_mapping_set_xctrl_compound() argument
2504 size_t size = uvc_mapping_v4l2_size(mapping); in uvc_mapping_set_xctrl_compound()
2518 return mapping->set(mapping, size, data, in uvc_mapping_set_xctrl_compound()
2523 struct uvc_control_mapping *mapping, in uvc_mapping_set_xctrl() argument
2526 if (uvc_ctrl_mapping_is_compound(mapping)) in uvc_mapping_set_xctrl()
2527 return uvc_mapping_set_xctrl_compound(ctrl, mapping, xctrl); in uvc_mapping_set_xctrl()
2529 uvc_mapping_set_s32(mapping, xctrl->value, in uvc_mapping_set_xctrl()
2537 struct uvc_control_mapping *mapping; in uvc_ctrl_set() local
2546 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
2552 ret = uvc_ctrl_clamp(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_set()
2560 if ((ctrl->info.size * 8) != mapping->size) { in uvc_ctrl_set()
2573 ret = uvc_mapping_set_xctrl(ctrl, mapping, xctrl); in uvc_ctrl_set()
2945 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) in __uvc_ctrl_add_mapping() argument
2957 map = kmemdup(mapping, sizeof(*mapping), GFP_KERNEL); in __uvc_ctrl_add_mapping()
2966 if (mapping->name) { in __uvc_ctrl_add_mapping()
2967 map->name = kstrdup(mapping->name, GFP_KERNEL); in __uvc_ctrl_add_mapping()
2974 if (mapping->menu_mapping && mapping->menu_mask) { in __uvc_ctrl_add_mapping()
2975 size = sizeof(mapping->menu_mapping[0]) in __uvc_ctrl_add_mapping()
2976 * fls(mapping->menu_mask); in __uvc_ctrl_add_mapping()
2977 map->menu_mapping = kmemdup(mapping->menu_mapping, size, in __uvc_ctrl_add_mapping()
2982 if (mapping->menu_names && mapping->menu_mask) { in __uvc_ctrl_add_mapping()
2983 size = sizeof(mapping->menu_names[0]) in __uvc_ctrl_add_mapping()
2984 * fls(mapping->menu_mask); in __uvc_ctrl_add_mapping()
2985 map->menu_names = kmemdup(mapping->menu_names, size, in __uvc_ctrl_add_mapping()
3028 const struct uvc_control_mapping *mapping) in uvc_ctrl_add_mapping() argument
3037 if (mapping->id & ~V4L2_CTRL_ID_MASK) { in uvc_ctrl_add_mapping()
3040 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
3049 !uvc_entity_match_guid(entity, mapping->entity)) in uvc_ctrl_add_mapping()
3054 if (ctrl->index == mapping->selector - 1) { in uvc_ctrl_add_mapping()
3077 if (mapping->size > 32 || in uvc_ctrl_add_mapping()
3078 mapping->offset + mapping->size > ctrl->info.size * 8) { in uvc_ctrl_add_mapping()
3084 if (mapping->id == map->id) { in uvc_ctrl_add_mapping()
3087 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
3098 uvc_map_get_name(mapping), UVC_MAX_CONTROL_MAPPINGS); in uvc_ctrl_add_mapping()
3103 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
3215 const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i]; in uvc_ctrl_init_ctrl() local
3217 if (!uvc_entity_match_guid(ctrl->entity, mapping->entity) || in uvc_ctrl_init_ctrl()
3218 ctrl->info.selector != mapping->selector) in uvc_ctrl_init_ctrl()
3222 if (mapping->filter_mapping) { in uvc_ctrl_init_ctrl()
3223 mapping = mapping->filter_mapping(chain, ctrl); in uvc_ctrl_init_ctrl()
3224 if (!mapping) in uvc_ctrl_init_ctrl()
3228 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
3338 struct uvc_control_mapping *mapping, *nm; in uvc_ctrl_cleanup_mappings() local
3340 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) { in uvc_ctrl_cleanup_mappings()
3341 list_del(&mapping->list); in uvc_ctrl_cleanup_mappings()
3342 kfree(mapping->menu_names); in uvc_ctrl_cleanup_mappings()
3343 kfree(mapping->menu_mapping); in uvc_ctrl_cleanup_mappings()
3344 kfree(mapping->name); in uvc_ctrl_cleanup_mappings()
3345 kfree(mapping); in uvc_ctrl_cleanup_mappings()