Patch Detail
Show a patch.
GET /api/patches/18527/?format=api
{ "id": 18527, "url": "https://patchwork.libcamera.org/api/patches/18527/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18527/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20230406-feature-controls-lens-v1-4-543189a680de@wolfvision.net>", "date": "2023-04-06T14:31:13", "name": "[libcamera-devel,RFC,4/4] media: v4l2-ctrls: add controls for individual zoom lenses", "commit_ref": null, "pull_url": null, "state": "not-applicable", "archived": false, "hash": "c139325ae0c12ee5709ecd6b094b4b77ba5a2a08", "submitter": { "id": 135, "url": "https://patchwork.libcamera.org/api/people/135/?format=api", "name": "Michael Riesch", "email": "michael.riesch@wolfvision.net" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/18527/mbox/", "series": [ { "id": 3837, "url": "https://patchwork.libcamera.org/api/series/3837/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3837", "date": "2023-04-06T14:31:10", "name": "media: v4l2-ctrls: add controls for complex lens controller devices", "version": 1, "mbox": "https://patchwork.libcamera.org/series/3837/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/18527/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/18527/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 66B5BC32A3\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 6 Apr 2023 14:31:47 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C8F2061EC2;\n\tThu, 6 Apr 2023 16:31:45 +0200 (CEST)", "from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4533361EC2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 6 Apr 2023 16:31:42 +0200 (CEST)", "from smtp.kernel.org (relay.kernel.org [52.25.139.140])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby dfw.source.kernel.org (Postfix) with ESMTPS id 42073648AC;\n\tThu, 6 Apr 2023 14:31:41 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPS id 14A44C433A8;\n\tThu, 6 Apr 2023 14:31:41 +0000 (UTC)", "from aws-us-west-2-korg-lkml-1.web.codeaurora.org\n\t(localhost.localdomain [127.0.0.1])\n\tby smtp.lore.kernel.org (Postfix) with ESMTP id EC680C77B74;\n\tThu, 6 Apr 2023 14:31:40 +0000 (UTC)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1680791505;\n\tbh=OFDAa/Z7jZMiGFG/RXHbhCEC4UgrQTo/IbOjvbHsdzY=;\n\th=Date:References:In-Reply-To:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=iVjm9jZFGMbGowyAWffvvIDLIcm55hUZ0QBdls/D8dP98p3PE6b+mQVM23X7R89lP\n\tGzcq+FGaG7S99+szw3qMuL/OYIPbQ4G4tHDT4i/TWJOt4/8leTZfmHwRUEHELWetBr\n\tADU7WplGX6DvmBPqv8Ps6wIhB/jx4cIXSIP2ta3Q//iDCEN1PKMcvcl+Y4KlxWjtsE\n\tvh5iUPQbdvnn3dFb3Ohs/J8JhANHbFbtchEbhf4I1qpTt5QkkkfmFc81d1w70p+Iw9\n\tVh+fEuyfr4kqw2hYQiHwfHI9hgNYwoROhdLRo1QNxVK2W9ZMFnuUQGK2x+0nJOB19k\n\t95MI0q7lkQ6ZQ==", "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1680791501;\n\tbh=OFDAa/Z7jZMiGFG/RXHbhCEC4UgrQTo/IbOjvbHsdzY=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=YjYf99mrj6YRqlF7UJGD8te9X3oG8AaXjxWpuEaX6fpnFXWYR7eIcc3Dj/UD95C6Y\n\tmNV01G2F9z1L5BDNfM5oqyrM/zXSjdpzr8za845ykEUl3u3eG8a1L7FIS9YAtUTKcs\n\t71tLZcSbVxm2jfPs3fXlaKQF/nkBuxWbjyERAhYYu6JAI/xlkp1bZDoOiKjc4thg7l\n\tsBkbx/mUhO0C0PIAulkRDrKX/9aYyU30c8WV8EUi7xE/8wZiJxuDxnT6CemV8ifISs\n\thwVBcOcB/n1g0arorwZ1rDWjL1eADVBMAlh6ZbQsWe6ldKejG7RbC+J3TW0onrsHwO\n\tWxRCzb8R9oPRQ==" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=kernel.org\n\theader.i=@kernel.org header.b=\"YjYf99mr\"; \n\tdkim-atps=neutral", "Date": "Thu, 06 Apr 2023 16:31:13 +0200", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20230406-feature-controls-lens-v1-4-543189a680de@wolfvision.net>", "References": "<20230406-feature-controls-lens-v1-0-543189a680de@wolfvision.net>", "In-Reply-To": "<20230406-feature-controls-lens-v1-0-543189a680de@wolfvision.net>", "To": "Mauro Carvalho Chehab <mchehab@kernel.org>", "X-Mailer": "b4 0.12.2", "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1680791498; l=4975;\n\ti=michael.riesch@wolfvision.net; s=20230406; h=from:subject:message-id;\n\tbh=bWxc8Ua5gbQYUJyRGSLgrVBk7cmDY97sq4ZtW5eVx8o=;\n\tb=FRhHgOOPeeWYPHlfi10xNaxB9EQWRcKsY/3IdhIFJJQnh6VhfwiI2bRP4HI/PTIV4h0MrUMc1\n\t+qwu9p8YNc9BKVePQhZXrNxF1IQWgFlFqjRPSmyvOQ8UmuHnnQTeJmn", "X-Developer-Key": "i=michael.riesch@wolfvision.net; a=ed25519;\n\tpk=G03kuYHL670EcdsWaNfVA7KnHWmkSpj98XziQm/hjbk=", "X-Endpoint-Received": "by B4 Relay for michael.riesch@wolfvision.net/20230406\n\twith auth_id=38", "X-Original-From": "Michael Riesch <michael.riesch@wolfvision.net>", "Subject": "[libcamera-devel] [PATCH RFC 4/4] media: v4l2-ctrls: add controls\n\tfor individual zoom lenses", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "From": "Michael Riesch via B4 Relay via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>", "Reply-To": "michael.riesch@wolfvision.net", "Cc": "Michael Riesch via B4 Relay\n\t<devnull+michael.riesch.wolfvision.net@kernel.org>,\n\tlinux-kernel@vger.kernel.org,\n\tMatthias Fend <Matthias.Fend@wolfvision.net>, \n\tlibcamera-devel@lists.libcamera.org,\n\tSakari Ailus <sakari.ailus@linux.intel.com>, linux-media@vger.kernel.org", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "From: Michael Riesch <michael.riesch@wolfvision.net>\n\nA zoom lens group may consist of several lenses, and in a calibration\ncontext it may be necessary to position the lenses individually. Add a pair\nof V4L2_CID_LENS_CALIB_ZOOMx_ABSOLUTE and V4L2_CID_LENS_CALIB_ZOOMx_STATUS\ncontrols for each individual lens, where x = {1...5}.\n\nSigned-off-by: Michael Riesch <michael.riesch@wolfvision.net>\n---\n .../userspace-api/media/v4l/ext-ctrls-camera.rst | 12 ++++++++++++\n drivers/media/v4l2-core/v4l2-ctrls-defs.c | 15 +++++++++++++++\n include/uapi/linux/v4l2-controls.h | 12 ++++++++++++\n 3 files changed, 39 insertions(+)", "diff": "diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst\nindex 441467a971ac..920c7be2823d 100644\n--- a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst\n+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst\n@@ -332,6 +332,18 @@ enum v4l2_auto_focus_range -\n * - ``V4L2_LENS_CALIB_FAILED``\n - Lens calibration procedure has failed.\n \n+``V4L2_CID_LENS_CALIB_ZOOM{1...5}_ABSOLUTE`` (integer)\n+ Set the absolute position of the individual lens of the zoom lens group.\n+ Most likely, this is done in a calibration context. The unit is\n+ driver-specific.\n+\n+``V4L2_CID_LENS_CALIB_ZOOM{1...5}_STATUS`` (struct)\n+ The current status of the individual lens of the zoom lens group. Most\n+ likely, this is done in a calibration context. This is a read-only control.\n+ The returned data structure contains the current position and movement\n+ indication flags. The unit of the current position is driver-specific. For\n+ the description of the flags refer to V4L2_CID_ZOOM_ABSOLUTE.\n+\n ``V4L2_CID_IRIS_ABSOLUTE (integer)``\n This control sets the camera's aperture to the specified value. The\n unit is undefined. Larger values open the iris wider, smaller values\ndiff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c\nindex 382abf6be9de..7d1154d05102 100644\n--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c\n+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c\n@@ -1050,6 +1050,16 @@ const char *v4l2_ctrl_get_name(u32 id)\n \tcase V4L2_CID_ZOOM_SPEED:\t\treturn \"Zoom, Speed\";\n \tcase V4L2_CID_LENS_CALIB_CONTROL:\treturn \"Lens Calibration, Control\";\n \tcase V4L2_CID_LENS_CALIB_STATUS:\treturn \"Lens Calibration, Status\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM1_ABSOLUTE:\treturn \"Zoom1, Absolute\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM2_ABSOLUTE:\treturn \"Zoom2, Absolute\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM3_ABSOLUTE:\treturn \"Zoom3, Absolute\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM4_ABSOLUTE:\treturn \"Zoom4, Absolute\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM5_ABSOLUTE:\treturn \"Zoom5, Absolute\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM1_STATUS:\treturn \"Zoom1, Status\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM2_STATUS:\treturn \"Zoom2, Status\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM3_STATUS:\treturn \"Zoom3, Status\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM4_STATUS:\treturn \"Zoom4, Status\";\n+\tcase V4L2_CID_LENS_CALIB_ZOOM5_STATUS:\treturn \"Zoom5, Status\";\n \n \t/* FM Radio Modulator controls */\n \t/* Keep the order of the 'case's the same as in v4l2-controls.h! */\n@@ -1602,6 +1612,11 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,\n \t\tbreak;\n \tcase V4L2_CID_FOCUS_STATUS:\n \tcase V4L2_CID_ZOOM_STATUS:\n+\tcase V4L2_CID_LENS_CALIB_ZOOM1_STATUS:\n+\tcase V4L2_CID_LENS_CALIB_ZOOM2_STATUS:\n+\tcase V4L2_CID_LENS_CALIB_ZOOM3_STATUS:\n+\tcase V4L2_CID_LENS_CALIB_ZOOM4_STATUS:\n+\tcase V4L2_CID_LENS_CALIB_ZOOM5_STATUS:\n \t\t*type = V4L2_CTRL_TYPE_LENS_STATUS;\n \t\t*flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_VOLATILE;\n \t\tbreak;\ndiff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h\nindex 34601ad1213a..232e6d1d7655 100644\n--- a/include/uapi/linux/v4l2-controls.h\n+++ b/include/uapi/linux/v4l2-controls.h\n@@ -1020,6 +1020,18 @@ struct v4l2_ctrl_lens_status {\n \n #define V4L2_CID_LENS_CALIB_STATUS\t\t(V4L2_CID_CAMERA_CLASS_BASE + 42)\n \n+#define V4L2_CID_LENS_CALIB_ZOOM1_ABSOLUTE\t(V4L2_CID_CAMERA_CLASS_BASE + 43)\n+#define V4L2_CID_LENS_CALIB_ZOOM2_ABSOLUTE\t(V4L2_CID_CAMERA_CLASS_BASE + 44)\n+#define V4L2_CID_LENS_CALIB_ZOOM3_ABSOLUTE\t(V4L2_CID_CAMERA_CLASS_BASE + 45)\n+#define V4L2_CID_LENS_CALIB_ZOOM4_ABSOLUTE\t(V4L2_CID_CAMERA_CLASS_BASE + 46)\n+#define V4L2_CID_LENS_CALIB_ZOOM5_ABSOLUTE\t(V4L2_CID_CAMERA_CLASS_BASE + 47)\n+\n+#define V4L2_CID_LENS_CALIB_ZOOM1_STATUS\t(V4L2_CID_CAMERA_CLASS_BASE + 48)\n+#define V4L2_CID_LENS_CALIB_ZOOM2_STATUS\t(V4L2_CID_CAMERA_CLASS_BASE + 49)\n+#define V4L2_CID_LENS_CALIB_ZOOM3_STATUS\t(V4L2_CID_CAMERA_CLASS_BASE + 50)\n+#define V4L2_CID_LENS_CALIB_ZOOM4_STATUS\t(V4L2_CID_CAMERA_CLASS_BASE + 51)\n+#define V4L2_CID_LENS_CALIB_ZOOM5_STATUS\t(V4L2_CID_CAMERA_CLASS_BASE + 52)\n+\n /* FM Modulator class control IDs */\n \n #define V4L2_CID_FM_TX_CLASS_BASE\t\t(V4L2_CTRL_CLASS_FM_TX | 0x900)\n", "prefixes": [ "libcamera-devel", "RFC", "4/4" ] }