Skip to content

Commit

Permalink
media: uvcvideo: Move guid to entity
Browse files Browse the repository at this point in the history
Instead of having multiple copies of the entity guid on the code, move
it to the entity structure.

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  • Loading branch information
Ricardo Ribalda authored and Mauro Carvalho Chehab committed Jan 27, 2021
1 parent dc9455f commit 351509c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 29 deletions.
30 changes: 4 additions & 26 deletions drivers/media/usb/uvc/uvc_ctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -826,31 +826,10 @@ static void uvc_set_le_value(struct uvc_control_mapping *mapping,
* Terminal and unit management
*/

static const u8 uvc_processing_guid[16] = UVC_GUID_UVC_PROCESSING;
static const u8 uvc_camera_guid[16] = UVC_GUID_UVC_CAMERA;
static const u8 uvc_media_transport_input_guid[16] =
UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT;

static int uvc_entity_match_guid(const struct uvc_entity *entity,
const u8 guid[16])
const u8 guid[16])
{
switch (UVC_ENTITY_TYPE(entity)) {
case UVC_ITT_CAMERA:
return memcmp(uvc_camera_guid, guid, 16) == 0;

case UVC_ITT_MEDIA_TRANSPORT_INPUT:
return memcmp(uvc_media_transport_input_guid, guid, 16) == 0;

case UVC_VC_PROCESSING_UNIT:
return memcmp(uvc_processing_guid, guid, 16) == 0;

case UVC_VC_EXTENSION_UNIT:
return memcmp(entity->extension.guidExtensionCode,
guid, 16) == 0;

default:
return 0;
}
return memcmp(entity->guid, guid, sizeof(entity->guid)) == 0;
}

/* ------------------------------------------------------------------------
Expand Down Expand Up @@ -1776,8 +1755,7 @@ static int uvc_ctrl_fill_xu_info(struct uvc_device *dev,
if (data == NULL)
return -ENOMEM;

memcpy(info->entity, ctrl->entity->extension.guidExtensionCode,
sizeof(info->entity));
memcpy(info->entity, ctrl->entity->guid, sizeof(info->entity));
info->index = ctrl->index;
info->selector = ctrl->index + 1;

Expand Down Expand Up @@ -1883,7 +1861,7 @@ int uvc_xu_ctrl_query(struct uvc_video_chain *chain,

if (!found) {
uvc_trace(UVC_TRACE_CONTROL, "Control %pUl/%u not found.\n",
entity->extension.guidExtensionCode, xqry->selector);
entity->guid, xqry->selector);
return -ENOENT;
}

Expand Down
25 changes: 23 additions & 2 deletions drivers/media/usb/uvc/uvc_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -1019,6 +1019,11 @@ static int uvc_parse_streaming(struct uvc_device *dev,
return ret;
}

static const u8 uvc_camera_guid[16] = UVC_GUID_UVC_CAMERA;
static const u8 uvc_media_transport_input_guid[16] =
UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT;
static const u8 uvc_processing_guid[16] = UVC_GUID_UVC_PROCESSING;

static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,
unsigned int num_pads, unsigned int extra_size)
{
Expand All @@ -1038,6 +1043,22 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,
entity->id = id;
entity->type = type;

/*
* Set the GUID for standard entity types. For extension units, the GUID
* is initialized by the caller.
*/
switch (type) {
case UVC_ITT_CAMERA:
memcpy(entity->guid, uvc_camera_guid, 16);
break;
case UVC_ITT_MEDIA_TRANSPORT_INPUT:
memcpy(entity->guid, uvc_media_transport_input_guid, 16);
break;
case UVC_VC_PROCESSING_UNIT:
memcpy(entity->guid, uvc_processing_guid, 16);
break;
}

entity->num_links = 0;
entity->num_pads = num_pads;
entity->pads = ((void *)(entity + 1)) + extra_size;
Expand Down Expand Up @@ -1109,7 +1130,7 @@ static int uvc_parse_vendor_control(struct uvc_device *dev,
if (unit == NULL)
return -ENOMEM;

memcpy(unit->extension.guidExtensionCode, &buffer[4], 16);
memcpy(unit->guid, &buffer[4], 16);
unit->extension.bNumControls = buffer[20];
memcpy(unit->baSourceID, &buffer[22], p);
unit->extension.bControlSize = buffer[22+p];
Expand Down Expand Up @@ -1368,7 +1389,7 @@ static int uvc_parse_standard_control(struct uvc_device *dev,
if (unit == NULL)
return -ENOMEM;

memcpy(unit->extension.guidExtensionCode, &buffer[4], 16);
memcpy(unit->guid, &buffer[4], 16);
unit->extension.bNumControls = buffer[20];
memcpy(unit->baSourceID, &buffer[22], p);
unit->extension.bControlSize = buffer[22+p];
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/usb/uvc/uvcvideo.h
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,7 @@ struct uvc_entity {
u8 id;
u16 type;
char name[64];
u8 guid[16];

/* Media controller-related fields. */
struct video_device *vdev;
Expand Down Expand Up @@ -342,7 +343,6 @@ struct uvc_entity {
} selector;

struct {
u8 guidExtensionCode[16];
u8 bNumControls;
u8 bControlSize;
u8 *bmControls;
Expand Down

0 comments on commit 351509c

Please sign in to comment.