All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ricardo Ribalda <ribalda@chromium.org>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Ricardo Ribalda <ribalda@chromium.org>
Subject: [PATCH v7 05/12] media: uvcvideo: Allow entity-defined get_info and get_cur
Date: Wed, 23 Dec 2020 14:35:21 +0100	[thread overview]
Message-ID: <20201223133528.55014-6-ribalda@chromium.org> (raw)
In-Reply-To: <20201223133528.55014-1-ribalda@chromium.org>

Allows controls to get their properties and current value
from an entity-defined function instead of via a query to the USB
device.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
 drivers/media/usb/uvc/uvc_ctrl.c | 22 ++++++++++++++++++----
 drivers/media/usb/uvc/uvcvideo.h |  5 +++++
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 4d43f4c3e349..1a5e85368af4 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -980,10 +980,20 @@ static int __uvc_ctrl_get(struct uvc_video_chain *chain,
 		return -EACCES;
 
 	if (!ctrl->loaded) {
-		ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id,
-				chain->dev->intfnum, ctrl->info.selector,
+		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;
 
@@ -1692,8 +1702,12 @@ static int uvc_ctrl_get_flags(struct uvc_device *dev,
 	if (data == NULL)
 		return -ENOMEM;
 
-	ret = uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id, dev->intfnum,
-			     info->selector, data, 1);
+	if (ctrl->entity->get_info)
+		ret = ctrl->entity->get_info(dev, ctrl->entity,
+					     ctrl->info.selector, data);
+	else
+		ret = uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id,
+				     dev->intfnum, info->selector, data, 1);
 	if (!ret)
 		info->flags |= (data[0] & UVC_CONTROL_CAP_GET ?
 				UVC_CTRL_FLAG_GET_CUR : 0)
diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
index be784ed8354d..6465711fe5bb 100644
--- a/drivers/media/usb/uvc/uvcvideo.h
+++ b/drivers/media/usb/uvc/uvcvideo.h
@@ -358,6 +358,11 @@ struct uvc_entity {
 	u8 bNrInPins;
 	u8 *baSourceID;
 
+	int (*get_info)(struct uvc_device *dev, struct uvc_entity *entity,
+			u8 cs, u8 *caps);
+	int (*get_cur)(struct uvc_device *dev, struct uvc_entity *entity,
+		       u8 cs, void *data, u16 size);
+
 	unsigned int ncontrols;
 	struct uvc_control *controls;
 };
-- 
2.29.2.729.g45daf8777d-goog


  parent reply	other threads:[~2020-12-23 13:37 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-23 13:35 [PATCH v7 00/12] Show privacy_gpio as a v4l2_ctrl Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 01/12] media: uvcvideo: Move guid to entity Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 02/12] media: uvcvideo: Allow extra entities Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 03/12] media: uvcvideo: Allow entities with no pads Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 04/12] media: uvcvideo: Provide sync and async uvc_ctrl_status_event Ricardo Ribalda
2021-01-26 15:38   ` Laurent Pinchart
2020-12-23 13:35 ` Ricardo Ribalda [this message]
2020-12-23 13:35 ` [PATCH v7 06/12] media: uvcvideo: Implement UVC_EXT_GPIO_UNIT Ricardo Ribalda
2021-01-26 15:53   ` Laurent Pinchart
2021-01-26 15:56     ` Laurent Pinchart
2020-12-23 13:35 ` [PATCH v7 07/12] media: uvcvideo: Add Privacy control based on EXT_GPIO Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 08/12] media: uvcvideo: Use dev_ printk aliases Ricardo Ribalda
2020-12-24 12:59   ` Andy Shevchenko
2020-12-24 13:50     ` Laurent Pinchart
2020-12-23 13:35 ` [PATCH v7 09/12] media: uvcvideo: New macro uvc_trace_cont Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 10/12] media: uvcvideo: use dev_printk() for uvc_trace() Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 11/12] media: uvcvideo: Rename debug functions Ricardo Ribalda
2021-01-26 17:05   ` Laurent Pinchart
2020-12-23 13:35 ` [PATCH v7 12/12] media: uvcvideo: Implement UVC_QUIRK_PRIVACY_DURING_STREAM Ricardo Ribalda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201223133528.55014-6-ribalda@chromium.org \
    --to=ribalda@chromium.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.