]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
media: uvcvideo: Refactor power_line_frequency_controls_limited
authorRicardo Ribalda <ribalda@chromium.org>
Thu, 5 Jan 2023 13:52:56 +0000 (14:52 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:33:30 +0000 (09:33 +0100)
[ Upstream commit 3aa8628eb78a63d0bf93e159846e9c92bccc8f69 ]

Move the control mapping to uvc_ctrl.c. This way we do not have
references to UVC controls or V4L2 controls in uvc_driver.c.

This also fixes a bug introduced in commit 382075604a68 ("media:
uvcvideo: Limit power line control for Quanta UVC Webcam"). The
offending commit caused the power line control menu entries to have
incorrect indices compared to the V4L2_CID_POWER_LINE_FREQUENCY_*
enumeration. Now that the limited mapping reuses the correct menu_info
array, the indices correctly map to the V4L2 control specification.

Fixes: 382075604a68 ("media: uvcvideo: Limit power line control for Quanta UVC Webcam")
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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/usb/uvc/uvc_ctrl.c
drivers/media/usb/uvc/uvc_driver.c
drivers/media/usb/uvc/uvcvideo.h

index 3c46c33b9e571be175a9f72be27430a1668bd6f0..44b0cfb8ee1c7cd8c2e6efa0e40ea79a4aafbeb0 100644 (file)
@@ -723,6 +723,19 @@ static const struct uvc_control_mapping uvc_ctrl_mappings[] = {
        },
 };
 
+const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limited = {
+       .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_50HZ),
+};
+
 static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 = {
        .id             = V4L2_CID_POWER_LINE_FREQUENCY,
        .entity         = UVC_GUID_UVC_PROCESSING,
index d6dcd78b434aca1aeab8be695f3359b85c004498..abfe735f6ea30ee45080c5bfce4f2129a0f80ab5 100644 (file)
@@ -2374,24 +2374,6 @@ MODULE_PARM_DESC(timeout, "Streaming control requests timeout");
  * Driver initialization and cleanup
  */
 
-static const struct uvc_menu_info power_line_frequency_controls_limited[] = {
-       { 1, "50 Hz" },
-       { 2, "60 Hz" },
-};
-
-static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limited = {
-       .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_limited,
-       .menu_mask      =
-               GENMASK(ARRAY_SIZE(power_line_frequency_controls_limited) - 1, 0),
-};
-
 static const struct uvc_device_info uvc_ctrl_power_line_limited = {
        .mappings = (const struct uvc_control_mapping *[]) {
                &uvc_ctrl_power_line_mapping_limited,
index f75e5864bbf72d093ad19a91836fdf91b30def6c..1227ae63f85b7191d70c6acbca6b6b7d455efcf6 100644 (file)
@@ -728,6 +728,7 @@ int uvc_status_start(struct uvc_device *dev, gfp_t flags);
 void uvc_status_stop(struct uvc_device *dev);
 
 /* Controls */
+extern const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limited;
 extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops;
 
 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,