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@xxxxxxxxxxxx> > Signed-off-by: Yunke Cao <yunkec@xxxxxxxxxx> > --- > 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); -- Regards, Laurent Pinchart