Lines Matching refs:mapping
366 static s32 uvc_ctrl_get_zoom(struct uvc_control_mapping *mapping,
384 static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
391 static s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
394 unsigned int first = mapping->offset / 8;
411 static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
414 unsigned int first = mapping->offset / 8;
760 /* Extract the bit string specified by mapping->offset and mapping->size
762 * a signed 32bit integer. Sign extension will be performed if the mapping
765 static s32 uvc_get_le_value(struct uvc_control_mapping *mapping,
768 int bits = mapping->size;
769 int offset = mapping->offset;
790 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED)
791 value |= -(value & (1 << (mapping->size - 1)));
796 /* Set the bit string specified by mapping->offset and mapping->size
799 static void uvc_set_le_value(struct uvc_control_mapping *mapping,
802 int bits = mapping->size;
803 int offset = mapping->offset;
811 if (mapping->v4l2_type == V4L2_CTRL_TYPE_BUTTON)
862 struct uvc_control_mapping **mapping, struct uvc_control **control,
880 *mapping = map;
884 if ((*mapping == NULL || (*mapping)->id > map->id) &&
887 *mapping = map;
894 u32 v4l2_id, struct uvc_control_mapping **mapping)
900 *mapping = NULL;
907 __uvc_find_control(entity, v4l2_id, mapping, &ctrl, next);
975 static s32 __uvc_ctrl_get_value(struct uvc_control_mapping *mapping,
978 s32 value = mapping->get(mapping, UVC_GET_CUR, data);
980 if (mapping->v4l2_type == V4L2_CTRL_TYPE_MENU) {
981 const struct uvc_menu_info *menu = mapping->menu_info;
984 for (i = 0; i < mapping->menu_count; ++i, ++menu) {
996 struct uvc_control *ctrl, struct uvc_control_mapping *mapping,
1015 *value = __uvc_ctrl_get_value(mapping,
1023 struct uvc_control_mapping *mapping,
1032 v4l2_ctrl->id = mapping->id;
1033 v4l2_ctrl->type = mapping->v4l2_type;
1034 strscpy(v4l2_ctrl->name, mapping->name, sizeof(v4l2_ctrl->name));
1042 if (mapping->master_id)
1043 __uvc_find_control(ctrl->entity, mapping->master_id,
1051 if (val != mapping->master_manual)
1062 v4l2_ctrl->default_value = mapping->get(mapping, UVC_GET_DEF,
1066 switch (mapping->v4l2_type) {
1069 v4l2_ctrl->maximum = mapping->menu_count - 1;
1072 menu = mapping->menu_info;
1073 for (i = 0; i < mapping->menu_count; ++i, ++menu) {
1099 v4l2_ctrl->minimum = mapping->get(mapping, UVC_GET_MIN,
1103 v4l2_ctrl->maximum = mapping->get(mapping, UVC_GET_MAX,
1107 v4l2_ctrl->step = mapping->get(mapping, UVC_GET_RES,
1117 struct uvc_control_mapping *mapping;
1124 ctrl = uvc_find_control(chain, v4l2_ctrl->id, &mapping);
1130 ret = __uvc_query_v4l2_ctrl(chain, ctrl, mapping, v4l2_ctrl);
1149 struct uvc_control_mapping *mapping;
1163 ctrl = uvc_find_control(chain, query_menu->id, &mapping);
1164 if (ctrl == NULL || mapping->v4l2_type != V4L2_CTRL_TYPE_MENU) {
1169 if (query_menu->index >= mapping->menu_count) {
1174 menu_info = &mapping->menu_info[query_menu->index];
1176 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK &&
1186 bitmap = mapping->get(mapping, UVC_GET_RES,
1208 struct uvc_control_mapping *mapping,
1213 __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
1237 struct uvc_control_mapping *mapping, s32 value, u32 changes)
1243 if (list_empty(&mapping->ev_subs))
1246 uvc_ctrl_fill_event(chain, &ev, ctrl, mapping, value, changes);
1248 list_for_each_entry(sev, &mapping->ev_subs, node) {
1264 struct uvc_control_mapping *mapping = NULL;
1269 __uvc_find_control(master->entity, slave_id, &mapping, &ctrl, 0);
1273 if (__uvc_ctrl_get(chain, ctrl, mapping, &val) == 0)
1276 uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes);
1282 struct uvc_control_mapping *mapping;
1291 list_for_each_entry(mapping, &ctrl->info.mappings, list) {
1292 s32 value = __uvc_ctrl_get_value(mapping, data);
1298 for (i = 0; i < ARRAY_SIZE(mapping->slave_ids); ++i) {
1299 if (!mapping->slave_ids[i])
1303 mapping->slave_ids[i]);
1306 uvc_ctrl_send_event(chain, handle, ctrl, mapping, value,
1371 struct uvc_control_mapping *mapping;
1378 ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
1384 for (j = 0; j < ARRAY_SIZE(mapping->slave_ids); ++j) {
1385 u32 slave_id = mapping->slave_ids[j];
1406 if (mapping->master_id &&
1408 mapping->master_id))
1411 uvc_ctrl_send_event(handle->chain, handle, ctrl, mapping,
1419 struct uvc_control_mapping *mapping;
1427 ctrl = uvc_find_control(handle->chain, sev->id, &mapping);
1433 list_add_tail(&sev->node, &mapping->ev_subs);
1439 if (__uvc_ctrl_get(handle->chain, ctrl, mapping, &val) == 0)
1442 uvc_ctrl_fill_event(handle->chain, &ev, ctrl, mapping, val,
1576 struct uvc_control_mapping *mapping;
1578 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1582 return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
1590 struct uvc_control_mapping *mapping;
1597 ctrl = uvc_find_control(chain, xctrl->id, &mapping);
1604 switch (mapping->v4l2_type) {
1612 min = mapping->get(mapping, UVC_GET_MIN,
1614 max = mapping->get(mapping, UVC_GET_MAX,
1616 step = mapping->get(mapping, UVC_GET_RES,
1623 if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED)
1636 if (xctrl->value < 0 || xctrl->value >= mapping->menu_count)
1638 value = mapping->menu_info[xctrl->value].value;
1643 if (mapping->data_type == UVC_CTRL_DATA_TYPE_BITMASK &&
1651 step = mapping->get(mapping, UVC_GET_RES,
1664 /* If the mapping doesn't span the whole UVC control, the current value
1668 if (!ctrl->loaded && (ctrl->info.size * 8) != mapping->size) {
1692 mapping->set(mapping, value,
2024 * Control and mapping handling
2052 * Add a control mapping to a given control.
2055 struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
2064 map = kmemdup(mapping, sizeof(*mapping), GFP_KERNEL);
2070 size = sizeof(*mapping->menu_info) * mapping->menu_count;
2071 map->menu_info = kmemdup(mapping->menu_info, size, GFP_KERNEL);
2084 "Adding mapping '%s' to control %pUl/%u.\n",
2091 const struct uvc_control_mapping *mapping)
2100 if (mapping->id & ~V4L2_CTRL_ID_MASK) {
2101 uvc_trace(UVC_TRACE_CONTROL, "Can't add mapping '%s', control "
2102 "id 0x%08x is invalid.\n", mapping->name,
2103 mapping->id);
2112 !uvc_entity_match_guid(entity, mapping->entity))
2117 if (ctrl->index == mapping->selector - 1) {
2140 if (mapping->size > 32 ||
2141 mapping->offset + mapping->size > ctrl->info.size * 8) {
2147 if (mapping->id == map->id) {
2148 uvc_trace(UVC_TRACE_CONTROL, "Can't add mapping '%s', "
2150 mapping->name, mapping->id);
2159 uvc_trace(UVC_TRACE_CONTROL, "Can't add mapping '%s', maximum "
2160 "mappings count (%u) exceeded.\n", mapping->name,
2166 ret = __uvc_ctrl_add_mapping(dev, ctrl, mapping);
2245 const struct uvc_control_mapping *mapping = uvc_ctrl_mappings;
2247 mapping + ARRAY_SIZE(uvc_ctrl_mappings);
2275 for (; mapping < mend; ++mapping) {
2276 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
2277 ctrl->info.selector == mapping->selector)
2278 __uvc_ctrl_add_mapping(dev, ctrl, mapping);
2346 struct uvc_control_mapping *mapping, *nm;
2348 list_for_each_entry_safe(mapping, nm, &ctrl->info.mappings, list) {
2349 list_del(&mapping->list);
2350 kfree(mapping->menu_info);
2351 kfree(mapping);