mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
media: uvcvideo: Refactor power_line_frequency_controls_limited
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 commit382075604a("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:382075604a("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>
This commit is contained in:
committed by
Laurent Pinchart
parent
96a160b068
commit
3aa8628eb7
@@ -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 = {
|
static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 = {
|
||||||
.id = V4L2_CID_POWER_LINE_FREQUENCY,
|
.id = V4L2_CID_POWER_LINE_FREQUENCY,
|
||||||
.entity = UVC_GUID_UVC_PROCESSING,
|
.entity = UVC_GUID_UVC_PROCESSING,
|
||||||
|
|||||||
@@ -2358,24 +2358,6 @@ MODULE_PARM_DESC(timeout, "Streaming control requests timeout");
|
|||||||
* Driver initialization and cleanup
|
* 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 = {
|
static const struct uvc_device_info uvc_ctrl_power_line_limited = {
|
||||||
.mappings = (const struct uvc_control_mapping *[]) {
|
.mappings = (const struct uvc_control_mapping *[]) {
|
||||||
&uvc_ctrl_power_line_mapping_limited,
|
&uvc_ctrl_power_line_mapping_limited,
|
||||||
|
|||||||
@@ -745,6 +745,7 @@ int uvc_status_start(struct uvc_device *dev, gfp_t flags);
|
|||||||
void uvc_status_stop(struct uvc_device *dev);
|
void uvc_status_stop(struct uvc_device *dev);
|
||||||
|
|
||||||
/* Controls */
|
/* 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;
|
extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops;
|
||||||
|
|
||||||
int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
|
int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
|
||||||
|
|||||||
Reference in New Issue
Block a user