From 4ec03bf3d09d315d43d6baafef10a35f2a98b897 Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Sun, 24 Nov 2024 00:23:54 +0100 Subject: [PATCH] Revert "media: uvcvideo: Use entity get_cur in uvc_ctrl_set" This reverts commit db35ac122f3ab159f9ce739b20ca605d0b0e97de. --- drivers/media/usb/uvc/uvc_ctrl.c | 83 ++++++++++++++------------------ 1 file changed, 37 insertions(+), 46 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index dc8d790eb..c89f582bd 100755 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -992,55 +992,35 @@ static s32 __uvc_ctrl_get_value(struct uvc_control_mapping *mapping, return value; } -static int __uvc_ctrl_load_cur(struct uvc_video_chain *chain, - struct uvc_control *ctrl) -{ - u8 *data; - int ret; - - if (ctrl->loaded) - return 0; - - data = uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT); - - if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) { - memset(data, 0, ctrl->info.size); - ctrl->loaded = 1; - - return 0; - } - - if (ctrl->entity->get_cur) - ret = ctrl->entity->get_cur(chain->dev, ctrl->entity, - ctrl->info.selector, data, - ctrl->info.size); - else - ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, - ctrl->entity->id, chain->dev->intfnum, - ctrl->info.selector, data, - ctrl->info.size); - - if (ret < 0) - return ret; - - ctrl->loaded = 1; - - return ret; -} - static int __uvc_ctrl_get(struct uvc_video_chain *chain, - struct uvc_control *ctrl, - struct uvc_control_mapping *mapping, - s32 *value) + struct uvc_control *ctrl, struct uvc_control_mapping *mapping, + s32 *value) { int ret; if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) return -EACCES; - ret = __uvc_ctrl_load_cur(chain, ctrl); - if (ret < 0) - return ret; + if (!ctrl->loaded) { + if (ctrl->entity->get_cur) { + ret = ctrl->entity->get_cur(chain->dev, + ctrl->entity, + ctrl->info.selector, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), + ctrl->info.size); + } else { + ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, + ctrl->entity->id, + chain->dev->intfnum, + ctrl->info.selector, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), + ctrl->info.size); + } + if (ret < 0) + return ret; + + ctrl->loaded = 1; + } *value = __uvc_ctrl_get_value(mapping, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); @@ -1695,10 +1675,21 @@ int uvc_ctrl_set(struct uvc_fh *handle, * needs to be loaded from the device to perform the read-modify-write * operation. */ - if ((ctrl->info.size * 8) != mapping->size) { - ret = __uvc_ctrl_load_cur(chain, ctrl); - if (ret < 0) - return ret; + if (!ctrl->loaded && (ctrl->info.size * 8) != mapping->size) { + if ((ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) == 0) { + memset(uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), + 0, ctrl->info.size); + } else { + ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, + ctrl->entity->id, chain->dev->intfnum, + ctrl->info.selector, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), + ctrl->info.size); + if (ret < 0) + return ret; + } + + ctrl->loaded = 1; } /* Backup the current value in case we need to rollback later. */