Skip to content

Commit cc9a7cb

Browse files
ribaldahverkuil
authored andcommitted
media: uvcvideo: Factor out query_boundaries from query_ctrl
Split the function in two parts. queryctrl_boundaries will be used in future patches. No functional change expected from this patch. Reviewed-by: Yunke Cao <yunkec@google.com> Tested-by: Yunke Cao <yunkec@google.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> Link: https://lore.kernel.org/r/20250203-uvc-roi-v17-11-5900a9fed613@chromium.org Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
1 parent 8c3d9d4 commit cc9a7cb

File tree

1 file changed

+60
-46
lines changed

1 file changed

+60
-46
lines changed

drivers/media/usb/uvc/uvc_ctrl.c

Lines changed: 60 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,53 +1374,11 @@ static u32 uvc_get_ctrl_bitmap(struct uvc_control *ctrl,
13741374
return ~0;
13751375
}
13761376

1377-
static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
1378-
struct uvc_control *ctrl,
1379-
struct uvc_control_mapping *mapping,
1380-
struct v4l2_queryctrl *v4l2_ctrl)
1377+
static int __uvc_queryctrl_boundaries(struct uvc_video_chain *chain,
1378+
struct uvc_control *ctrl,
1379+
struct uvc_control_mapping *mapping,
1380+
struct v4l2_queryctrl *v4l2_ctrl)
13811381
{
1382-
struct uvc_control_mapping *master_map = NULL;
1383-
struct uvc_control *master_ctrl = NULL;
1384-
1385-
memset(v4l2_ctrl, 0, sizeof(*v4l2_ctrl));
1386-
v4l2_ctrl->id = mapping->id;
1387-
v4l2_ctrl->type = mapping->v4l2_type;
1388-
strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping),
1389-
sizeof(v4l2_ctrl->name));
1390-
v4l2_ctrl->flags = 0;
1391-
1392-
if (!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR))
1393-
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
1394-
if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR))
1395-
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1396-
1397-
if (mapping->master_id)
1398-
__uvc_find_control(ctrl->entity, mapping->master_id,
1399-
&master_map, &master_ctrl, 0, 0);
1400-
if (master_ctrl && (master_ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR)) {
1401-
s32 val;
1402-
int ret;
1403-
1404-
if (WARN_ON(uvc_ctrl_mapping_is_compound(master_map)))
1405-
return -EIO;
1406-
1407-
ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val);
1408-
if (ret < 0)
1409-
return ret;
1410-
1411-
if (val != mapping->master_manual)
1412-
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1413-
}
1414-
1415-
if (v4l2_ctrl->type >= V4L2_CTRL_COMPOUND_TYPES) {
1416-
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
1417-
v4l2_ctrl->default_value = 0;
1418-
v4l2_ctrl->minimum = 0;
1419-
v4l2_ctrl->maximum = 0;
1420-
v4l2_ctrl->step = 0;
1421-
return 0;
1422-
}
1423-
14241382
if (!ctrl->cached) {
14251383
int ret = uvc_ctrl_populate_cache(chain, ctrl);
14261384
if (ret < 0)
@@ -1464,18 +1422,74 @@ static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
14641422
if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN)
14651423
v4l2_ctrl->minimum = uvc_mapping_get_s32(mapping, UVC_GET_MIN,
14661424
uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN));
1425+
else
1426+
v4l2_ctrl->minimum = 0;
14671427

14681428
if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX)
14691429
v4l2_ctrl->maximum = uvc_mapping_get_s32(mapping, UVC_GET_MAX,
14701430
uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX));
1431+
else
1432+
v4l2_ctrl->maximum = 0;
14711433

14721434
if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES)
14731435
v4l2_ctrl->step = uvc_mapping_get_s32(mapping, UVC_GET_RES,
14741436
uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES));
1437+
else
1438+
v4l2_ctrl->step = 0;
14751439

14761440
return 0;
14771441
}
14781442

1443+
static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
1444+
struct uvc_control *ctrl,
1445+
struct uvc_control_mapping *mapping,
1446+
struct v4l2_queryctrl *v4l2_ctrl)
1447+
{
1448+
struct uvc_control_mapping *master_map = NULL;
1449+
struct uvc_control *master_ctrl = NULL;
1450+
1451+
memset(v4l2_ctrl, 0, sizeof(*v4l2_ctrl));
1452+
v4l2_ctrl->id = mapping->id;
1453+
v4l2_ctrl->type = mapping->v4l2_type;
1454+
strscpy(v4l2_ctrl->name, uvc_map_get_name(mapping),
1455+
sizeof(v4l2_ctrl->name));
1456+
v4l2_ctrl->flags = 0;
1457+
1458+
if (!(ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR))
1459+
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
1460+
if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR))
1461+
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1462+
1463+
if (mapping->master_id)
1464+
__uvc_find_control(ctrl->entity, mapping->master_id,
1465+
&master_map, &master_ctrl, 0, 0);
1466+
if (master_ctrl && (master_ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR)) {
1467+
s32 val;
1468+
int ret;
1469+
1470+
if (WARN_ON(uvc_ctrl_mapping_is_compound(master_map)))
1471+
return -EIO;
1472+
1473+
ret = __uvc_ctrl_get(chain, master_ctrl, master_map, &val);
1474+
if (ret < 0)
1475+
return ret;
1476+
1477+
if (val != mapping->master_manual)
1478+
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1479+
}
1480+
1481+
if (v4l2_ctrl->type >= V4L2_CTRL_COMPOUND_TYPES) {
1482+
v4l2_ctrl->flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
1483+
v4l2_ctrl->default_value = 0;
1484+
v4l2_ctrl->minimum = 0;
1485+
v4l2_ctrl->maximum = 0;
1486+
v4l2_ctrl->step = 0;
1487+
return 0;
1488+
}
1489+
1490+
return __uvc_queryctrl_boundaries(chain, ctrl, mapping, v4l2_ctrl);
1491+
}
1492+
14791493
int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
14801494
struct v4l2_queryctrl *v4l2_ctrl)
14811495
{

0 commit comments

Comments
 (0)