Lines Matching full:mapping

380 static s32 uvc_ctrl_get_zoom(struct uvc_control_mapping *mapping,  in uvc_ctrl_get_zoom()  argument
398 static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, in uvc_ctrl_set_zoom() argument
405 static s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_get_rel_speed() argument
408 unsigned int first = mapping->offset / 8; in uvc_ctrl_get_rel_speed()
425 static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, in uvc_ctrl_set_rel_speed() argument
428 unsigned int first = mapping->offset / 8; in uvc_ctrl_set_rel_speed()
772 * Extract the bit string specified by mapping->offset and mapping->size
774 * a signed 32bit integer. Sign extension will be performed if the mapping
777 static s32 uvc_get_le_value(struct uvc_control_mapping *mapping, in uvc_get_le_value() argument
780 int bits = mapping->size; in uvc_get_le_value()
781 int offset = mapping->offset; in uvc_get_le_value()
802 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_get_le_value()
803 value |= -(value & (1 << (mapping->size - 1))); in uvc_get_le_value()
809 * Set the bit string specified by mapping->offset and mapping->size
812 static void uvc_set_le_value(struct uvc_control_mapping *mapping, in uvc_set_le_value() argument
815 int bits = mapping->size; in uvc_set_le_value()
816 int offset = mapping->offset; in uvc_set_le_value()
825 if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON) in uvc_set_le_value()
855 struct uvc_control_mapping **mapping, struct uvc_control **control, in __uvc_find_control() argument
873 *mapping = map; in __uvc_find_control()
877 if ((*mapping == NULL || (*mapping)->id > map->id) && in __uvc_find_control()
880 *mapping = map; in __uvc_find_control()
887 u32 v4l2_id, struct uvc_control_mapping **mapping) in uvc_find_control() argument
893 *mapping = NULL; in uvc_find_control()
900 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next); in uvc_find_control()
969 static s32 __uvc_ctrl_get_value(struct uvc_control_mapping *mapping, in __uvc_ctrl_get_value() argument
972 s32 value = mapping->get(mapping, UVC_GET_CUR, data); in __uvc_ctrl_get_value()
974 if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) { in __uvc_ctrl_get_value()
975 const struct uvc_menu_info *menu = mapping->menu_info; in __uvc_ctrl_get_value()
978 for (i = 0; i < mapping->menu_count; ++i, ++menu) { in __uvc_ctrl_get_value()
1027 struct uvc_control_mapping *mapping, in __uvc_ctrl_get() argument
1039 *value = __uvc_ctrl_get_value(mapping, in __uvc_ctrl_get()
1091 struct uvc_control_mapping *mapping; in uvc_ctrl_is_accessible() local
1097 ctrl = uvc_find_control(chain, v4l2_id, &mapping); in uvc_ctrl_is_accessible()
1126 struct uvc_control_mapping *mapping, in __uvc_query_v4l2_ctrl() argument
1135 v4l2_ctrl->id = mapping->id; in __uvc_query_v4l2_ctrl()
1136 v4l2_ctrl->type = mapping->v4l2_type; in __uvc_query_v4l2_ctrl()
1137 strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping), in __uvc_query_v4l2_ctrl()
1146 if (mapping->master_id) in __uvc_query_v4l2_ctrl()
1147 __uvc_find_control(ctrl->entity, mapping->master_id, in __uvc_query_v4l2_ctrl()
1155 if (val != mapping->master_manual) in __uvc_query_v4l2_ctrl()
1166 v4l2_ctrl->default_value = mapping->get(mapping, UVC_GET_DEF, in __uvc_query_v4l2_ctrl()
1170 switch (mapping->v4l2_type) { in __uvc_query_v4l2_ctrl()
1173 v4l2_ctrl->maximum = mapping->menu_count - 1; in __uvc_query_v4l2_ctrl()
1176 menu = mapping->menu_info; in __uvc_query_v4l2_ctrl()
1177 for (i = 0; i < mapping->menu_count; ++i, ++menu) { in __uvc_query_v4l2_ctrl()
1203 v4l2_ctrl->minimum = mapping->get(mapping, UVC_GET_MIN, in __uvc_query_v4l2_ctrl()
1207 v4l2_ctrl->maximum = mapping->get(mapping, UVC_GET_MAX, in __uvc_query_v4l2_ctrl()
1211 v4l2_ctrl->step = mapping->get(mapping, UVC_GET_RES, in __uvc_query_v4l2_ctrl()
1221 struct uvc_control_mapping *mapping; in uvc_query_v4l2_ctrl() local
1235 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping); in uvc_query_v4l2_ctrl()
1247 ret = uvc_query_v4l2_class(chain, v4l2_ctrl->id, mapping->id, in uvc_query_v4l2_ctrl()
1253 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl); in uvc_query_v4l2_ctrl()
1260 * Mapping V4L2 controls to UVC controls can be straightforward if done well.
1272 struct uvc_control_mapping *mapping; in uvc_query_v4l2_menu() local
1286 ctrl = uvc_find_control(chain, query_menu->id, &mapping); in uvc_query_v4l2_menu()
1287 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) { in uvc_query_v4l2_menu()
1292 if (query_menu->index >= mapping->menu_count) { in uvc_query_v4l2_menu()
1297 menu_info = &mapping->menu_info[query_menu->index]; in uvc_query_v4l2_menu()
1299 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK && in uvc_query_v4l2_menu()
1309 bitmap = mapping->get(mapping, UVC_GET_RES, in uvc_query_v4l2_menu()
1331 struct uvc_control_mapping *mapping, in uvc_ctrl_fill_event() argument
1336 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl); in uvc_ctrl_fill_event()
1360 struct uvc_control_mapping *mapping, s32 value, u32 changes) in uvc_ctrl_send_event() argument
1366 if (list_empty(&mapping->ev_subs)) in uvc_ctrl_send_event()
1369 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes); in uvc_ctrl_send_event()
1371 list_for_each_entry(sev, &mapping->ev_subs, node) { in uvc_ctrl_send_event()
1387 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_send_slave_event() local
1392 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0); in uvc_ctrl_send_slave_event()
1396 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0) in uvc_ctrl_send_slave_event()
1399 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes); in uvc_ctrl_send_slave_event()
1405 struct uvc_control_mapping *mapping; in uvc_ctrl_status_event() local
1414 list_for_each_entry(mapping, &ctrl->info.mappings, list) { in uvc_ctrl_status_event()
1415 s32 value = __uvc_ctrl_get_value(mapping, data); in uvc_ctrl_status_event()
1421 for (i = 0; i < ARRAY_SIZE(mapping->slave_ids); ++i) { in uvc_ctrl_status_event()
1422 if (!mapping->slave_ids[i]) in uvc_ctrl_status_event()
1426 mapping->slave_ids[i]); in uvc_ctrl_status_event()
1429 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value, in uvc_ctrl_status_event()
1490 struct uvc_control_mapping *mapping; in uvc_ctrl_send_events() local
1497 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping); in uvc_ctrl_send_events()
1503 for (j = 0; j < ARRAY_SIZE(mapping->slave_ids); ++j) { in uvc_ctrl_send_events()
1504 u32 slave_id = mapping->slave_ids[j]; in uvc_ctrl_send_events()
1525 if (mapping->master_id && in uvc_ctrl_send_events()
1527 mapping->master_id)) in uvc_ctrl_send_events()
1530 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping, in uvc_ctrl_send_events()
1538 struct uvc_control_mapping *mapping; in uvc_ctrl_add_event() local
1551 ctrl = uvc_find_control(handle->chain, sev->id, &mapping); in uvc_ctrl_add_event()
1557 list_add_tail(&sev->node, &mapping->ev_subs); in uvc_ctrl_add_event()
1563 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0) in uvc_ctrl_add_event()
1566 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val, in uvc_ctrl_add_event()
1687 struct uvc_control_mapping *mapping = NULL; in uvc_ctrl_find_ctrl_idx() local
1695 __uvc_find_control(entity, ctrls->controls[i].id, &mapping, in uvc_ctrl_find_ctrl_idx()
1734 struct uvc_control_mapping *mapping; in uvc_ctrl_get() local
1739 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_get()
1743 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value); in uvc_ctrl_get()
1751 struct uvc_control_mapping *mapping; in uvc_ctrl_set() local
1761 ctrl = uvc_find_control(chain, xctrl->id, &mapping); in uvc_ctrl_set()
1768 switch (mapping->v4l2_type) { in uvc_ctrl_set()
1776 min = mapping->get(mapping, UVC_GET_MIN, in uvc_ctrl_set()
1778 max = mapping->get(mapping, UVC_GET_MAX, in uvc_ctrl_set()
1780 step = mapping->get(mapping, UVC_GET_RES, in uvc_ctrl_set()
1787 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED) in uvc_ctrl_set()
1800 if (xctrl->value < 0 || xctrl->value >= mapping->menu_count) in uvc_ctrl_set()
1802 value = mapping->menu_info[xctrl->value].value; in uvc_ctrl_set()
1808 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK && in uvc_ctrl_set()
1816 step = mapping->get(mapping, UVC_GET_RES, in uvc_ctrl_set()
1830 * If the mapping doesn't span the whole UVC control, the current value in uvc_ctrl_set()
1834 if ((ctrl->info.size * 8) != mapping->size) { in uvc_ctrl_set()
1847 mapping->set(mapping, value, in uvc_ctrl_set()
2183 * Control and mapping handling
2211 * Add a control mapping to a given control.
2214 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) in __uvc_ctrl_add_mapping() argument
2225 map = kmemdup(mapping, sizeof(*mapping), GFP_KERNEL); in __uvc_ctrl_add_mapping()
2230 if (mapping->name) { in __uvc_ctrl_add_mapping()
2231 map->name = kstrdup(mapping->name, GFP_KERNEL); in __uvc_ctrl_add_mapping()
2240 size = sizeof(*mapping->menu_info) * mapping->menu_count; in __uvc_ctrl_add_mapping()
2241 map->menu_info = kmemdup(mapping->menu_info, size, GFP_KERNEL); in __uvc_ctrl_add_mapping()
2262 uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n", in __uvc_ctrl_add_mapping()
2270 const struct uvc_control_mapping *mapping) in uvc_ctrl_add_mapping() argument
2279 if (mapping->id & ~V4L2_CTRL_ID_MASK) { in uvc_ctrl_add_mapping()
2281 "Can't add mapping '%s', control id 0x%08x is invalid\n", in uvc_ctrl_add_mapping()
2282 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
2291 !uvc_entity_match_guid(entity, mapping->entity)) in uvc_ctrl_add_mapping()
2296 if (ctrl->index == mapping->selector - 1) { in uvc_ctrl_add_mapping()
2319 if (mapping->size > 32 || in uvc_ctrl_add_mapping()
2320 mapping->offset + mapping->size > ctrl->info.size * 8) { in uvc_ctrl_add_mapping()
2326 if (mapping->id == map->id) { in uvc_ctrl_add_mapping()
2328 "Can't add mapping '%s', control id 0x%08x already exists\n", in uvc_ctrl_add_mapping()
2329 uvc_map_get_name(mapping), mapping->id); in uvc_ctrl_add_mapping()
2339 "Can't add mapping '%s', maximum mappings count (%u) exceeded\n", in uvc_ctrl_add_mapping()
2340 uvc_map_get_name(mapping), UVC_MAX_CONTROL_MAPPINGS); in uvc_ctrl_add_mapping()
2345 ret = __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_add_mapping()
2458 * First check if the device provides a custom mapping for this control, in uvc_ctrl_init_ctrl()
2460 * process standard mappings if a custom mapping is found. This in uvc_ctrl_init_ctrl()
2468 const struct uvc_control_mapping *mapping = in uvc_ctrl_init_ctrl() local
2471 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && in uvc_ctrl_init_ctrl()
2472 ctrl->info.selector == mapping->selector) { in uvc_ctrl_init_ctrl()
2473 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2484 const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i]; in uvc_ctrl_init_ctrl() local
2486 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && in uvc_ctrl_init_ctrl()
2487 ctrl->info.selector == mapping->selector) in uvc_ctrl_init_ctrl()
2488 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2501 const struct uvc_control_mapping *mapping = &mappings[i]; in uvc_ctrl_init_ctrl() local
2503 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && in uvc_ctrl_init_ctrl()
2504 ctrl->info.selector == mapping->selector) in uvc_ctrl_init_ctrl()
2505 __uvc_ctrl_add_mapping(chain, ctrl, mapping); in uvc_ctrl_init_ctrl()
2590 struct uvc_control_mapping *mapping, *nm; in uvc_ctrl_cleanup_mappings() local
2592 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) { in uvc_ctrl_cleanup_mappings()
2593 list_del(&mapping->list); in uvc_ctrl_cleanup_mappings()
2594 kfree(mapping->menu_info); in uvc_ctrl_cleanup_mappings()
2595 kfree(mapping->name); in uvc_ctrl_cleanup_mappings()
2596 kfree(mapping); in uvc_ctrl_cleanup_mappings()