media: uvcvideo: Move guid to entity
authorRicardo Ribalda <ribalda@chromium.org>
Wed, 23 Dec 2020 13:35:17 +0000 (14:35 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 27 Jan 2021 14:00:56 +0000 (15:00 +0100)
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>
drivers/media/usb/uvc/uvc_ctrl.c
drivers/media/usb/uvc/uvc_driver.c
drivers/media/usb/uvc/uvcvideo.h

index 011e694..9f6174a 100644 (file)
@@ -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;
 }
 
 /* ------------------------------------------------------------------------
@@ -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;
 
@@ -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;
        }
 
index ae970f1..be9700b 100644 (file)
@@ -1019,6 +1019,11 @@ error:
        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)
 {
@@ -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;
@@ -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];
@@ -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];
index 8ec9eca..459b245 100644 (file)
@@ -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;
@@ -342,7 +343,6 @@ struct uvc_entity {
                } selector;
 
                struct {
-                       u8  guidExtensionCode[16];
                        u8  bNumControls;
                        u8  bControlSize;
                        u8  *bmControls;