@@ -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+
14791493int uvc_query_v4l2_ctrl (struct uvc_video_chain * chain ,
14801494 struct v4l2_queryctrl * v4l2_ctrl )
14811495{
0 commit comments