media: uvcvideo: Refactor uvc_ctrl_mappings_uvcXX
authorRicardo Ribalda <ribalda@chromium.org>
Thu, 5 Jan 2023 13:52:55 +0000 (14:52 +0100)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Sun, 15 Jan 2023 21:45:14 +0000 (23:45 +0200)
Convert the array of structs into an array of pointers, that way the
mappings can be reused.

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
drivers/media/usb/uvc/uvc_ctrl.c

index 305cce26f5674dd55a58893562e2196ab8a92a60..af765d4cae902ad9d7e5741c1049b59386d19252 100644 (file)
@@ -723,34 +723,40 @@ static const struct uvc_control_mapping uvc_ctrl_mappings[] = {
        },
 };
 
-static const struct uvc_control_mapping uvc_ctrl_mappings_uvc11[] = {
-       {
-               .id             = V4L2_CID_POWER_LINE_FREQUENCY,
-               .entity         = UVC_GUID_UVC_PROCESSING,
-               .selector       = UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
-               .size           = 2,
-               .offset         = 0,
-               .v4l2_type      = V4L2_CTRL_TYPE_MENU,
-               .data_type      = UVC_CTRL_DATA_TYPE_ENUM,
-               .menu_info      = power_line_frequency_controls,
-               .menu_mask      = GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_60HZ,
-                                         V4L2_CID_POWER_LINE_FREQUENCY_DISABLED),
-       },
+static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 = {
+       .id             = V4L2_CID_POWER_LINE_FREQUENCY,
+       .entity         = UVC_GUID_UVC_PROCESSING,
+       .selector       = UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
+       .size           = 2,
+       .offset         = 0,
+       .v4l2_type      = V4L2_CTRL_TYPE_MENU,
+       .data_type      = UVC_CTRL_DATA_TYPE_ENUM,
+       .menu_info      = power_line_frequency_controls,
+       .menu_mask      = GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_60HZ,
+                                 V4L2_CID_POWER_LINE_FREQUENCY_DISABLED),
 };
 
-static const struct uvc_control_mapping uvc_ctrl_mappings_uvc15[] = {
-       {
-               .id             = V4L2_CID_POWER_LINE_FREQUENCY,
-               .entity         = UVC_GUID_UVC_PROCESSING,
-               .selector       = UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
-               .size           = 2,
-               .offset         = 0,
-               .v4l2_type      = V4L2_CTRL_TYPE_MENU,
-               .data_type      = UVC_CTRL_DATA_TYPE_ENUM,
-               .menu_info      = power_line_frequency_controls,
-               .menu_mask      = GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_AUTO,
-                                         V4L2_CID_POWER_LINE_FREQUENCY_DISABLED),
-       },
+static const struct uvc_control_mapping *uvc_ctrl_mappings_uvc11[] = {
+       &uvc_ctrl_power_line_mapping_uvc11,
+       NULL, /* Sentinel */
+};
+
+static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc15 = {
+       .id             = V4L2_CID_POWER_LINE_FREQUENCY,
+       .entity         = UVC_GUID_UVC_PROCESSING,
+       .selector       = UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
+       .size           = 2,
+       .offset         = 0,
+       .v4l2_type      = V4L2_CTRL_TYPE_MENU,
+       .data_type      = UVC_CTRL_DATA_TYPE_ENUM,
+       .menu_info      = power_line_frequency_controls,
+       .menu_mask      = GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_AUTO,
+                                 V4L2_CID_POWER_LINE_FREQUENCY_DISABLED),
+};
+
+static const struct uvc_control_mapping *uvc_ctrl_mappings_uvc15[] = {
+       &uvc_ctrl_power_line_mapping_uvc15,
+       NULL, /* Sentinel */
 };
 
 /* ------------------------------------------------------------------------
@@ -2506,8 +2512,7 @@ static void uvc_ctrl_prune_entity(struct uvc_device *dev,
 static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
                               struct uvc_control *ctrl)
 {
-       const struct uvc_control_mapping *mappings;
-       unsigned int num_mappings;
+       const struct uvc_control_mapping **mappings;
        unsigned int i;
 
        /*
@@ -2574,16 +2579,11 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
        }
 
        /* Finally process version-specific mappings. */
-       if (chain->dev->uvc_version < 0x0150) {
-               mappings = uvc_ctrl_mappings_uvc11;
-               num_mappings = ARRAY_SIZE(uvc_ctrl_mappings_uvc11);
-       } else {
-               mappings = uvc_ctrl_mappings_uvc15;
-               num_mappings = ARRAY_SIZE(uvc_ctrl_mappings_uvc15);
-       }
+       mappings = chain->dev->uvc_version < 0x0150
+                ? uvc_ctrl_mappings_uvc11 : uvc_ctrl_mappings_uvc15;
 
-       for (i = 0; i < num_mappings; ++i) {
-               const struct uvc_control_mapping *mapping = &mappings[i];
+       for (i = 0; mappings[i]; ++i) {
+               const struct uvc_control_mapping *mapping = mappings[i];
 
                if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
                    ctrl->info.selector == mapping->selector)