[v7,2/7] media: uvcvideo: add uvc_ctrl_get_fixed for getting default value
Commit Message
Introduce a new uvc_ctrl_get_fixed. It simply calls query_v4l2_ctrl()
for now, but is easier to extend to support compound controls and
V4L2_CTRL_WHICH_MIN/MAX_VAL in the following patches.
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Yunke Cao <yunkec@google.com>
---
drivers/media/usb/uvc/uvc_ctrl.c | 13 +++++++++++++
drivers/media/usb/uvc/uvc_v4l2.c | 6 +-----
drivers/media/usb/uvc/uvcvideo.h | 2 ++
3 files changed, 16 insertions(+), 5 deletions(-)
Comments
Hi Yunke,
Thank you for the patch.
On Tue, Jun 28, 2022 at 04:57:00PM +0900, Yunke Cao wrote:
> Introduce a new uvc_ctrl_get_fixed. It simply calls query_v4l2_ctrl()
"fixed" sounds a bit confusing to me. How about calling it
uvc_ctrl_get_boundary() or uvc_ctrl_get_limit() ? A better name could
possibly be found as the default value isn't a limit.
uvc_ctrl_get_info() comes to mind, but it wouldn't match the UVC
GET_INFO concept, which may be confusing.
> for now, but is easier to extend to support compound controls and
> V4L2_CTRL_WHICH_MIN/MAX_VAL in the following patches.
>
> Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> Signed-off-by: Yunke Cao <yunkec@google.com>
> ---
> drivers/media/usb/uvc/uvc_ctrl.c | 13 +++++++++++++
> drivers/media/usb/uvc/uvc_v4l2.c | 6 +-----
> drivers/media/usb/uvc/uvcvideo.h | 2 ++
> 3 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 0e78233fc8a0..772d9d28a520 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -1697,6 +1697,19 @@ int uvc_ctrl_get(struct uvc_video_chain *chain,
> return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
> }
>
> +int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
> + struct v4l2_ext_control *xctrl)
> +{
> + struct v4l2_queryctrl qc = { .id = xctrl->id };
> + int ret = uvc_query_v4l2_ctrl(chain, &qc);
> +
> + if (ret < 0)
> + return ret;
> +
> + xctrl->value = qc.default_value;
> + return 0;
> +}
> +
> int uvc_ctrl_set(struct uvc_fh *handle,
> struct v4l2_ext_control *xctrl)
> {
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index 648dcd579e81..0366d05895a9 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -1042,15 +1042,11 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
>
> if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
> for (i = 0; i < ctrls->count; ++ctrl, ++i) {
> - struct v4l2_queryctrl qc = { .id = ctrl->id };
> -
> - ret = uvc_query_v4l2_ctrl(chain, &qc);
> + ret = uvc_ctrl_get_fixed(chain, ctrl);
> if (ret < 0) {
> ctrls->error_idx = i;
> return ret;
> }
> -
> - ctrl->value = qc.default_value;
> }
>
> return 0;
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index c5b4febd2d94..ba028ba7c34e 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -901,6 +901,8 @@ static inline int uvc_ctrl_rollback(struct uvc_fh *handle)
> }
>
> int uvc_ctrl_get(struct uvc_video_chain *chain, struct v4l2_ext_control *xctrl);
> +int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
> + struct v4l2_ext_control *xctrl);
> int uvc_ctrl_set(struct uvc_fh *handle, struct v4l2_ext_control *xctrl);
> int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id,
> bool read);
@@ -1697,6 +1697,19 @@ int uvc_ctrl_get(struct uvc_video_chain *chain,
return __uvc_ctrl_get(chain, ctrl, mapping, &xctrl->value);
}
+int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
+ struct v4l2_ext_control *xctrl)
+{
+ struct v4l2_queryctrl qc = { .id = xctrl->id };
+ int ret = uvc_query_v4l2_ctrl(chain, &qc);
+
+ if (ret < 0)
+ return ret;
+
+ xctrl->value = qc.default_value;
+ return 0;
+}
+
int uvc_ctrl_set(struct uvc_fh *handle,
struct v4l2_ext_control *xctrl)
{
@@ -1042,15 +1042,11 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
for (i = 0; i < ctrls->count; ++ctrl, ++i) {
- struct v4l2_queryctrl qc = { .id = ctrl->id };
-
- ret = uvc_query_v4l2_ctrl(chain, &qc);
+ ret = uvc_ctrl_get_fixed(chain, ctrl);
if (ret < 0) {
ctrls->error_idx = i;
return ret;
}
-
- ctrl->value = qc.default_value;
}
return 0;
@@ -901,6 +901,8 @@ static inline int uvc_ctrl_rollback(struct uvc_fh *handle)
}
int uvc_ctrl_get(struct uvc_video_chain *chain, struct v4l2_ext_control *xctrl);
+int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
+ struct v4l2_ext_control *xctrl);
int uvc_ctrl_set(struct uvc_fh *handle, struct v4l2_ext_control *xctrl);
int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id,
bool read);