From nobody Sat Oct 4 09:39:53 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013033.outbound.protection.outlook.com [40.107.159.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B860232A3F7; Mon, 18 Aug 2025 15:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532712; cv=fail; b=sZ9m9tVsuW1kLeDI/1kSwrneRX96Ky7GAcYWN6l0wA/dAbAWDHNqG7LSj66voG6vHpFn13tOMNH2S5JnXPljLmRz9lN2rqEb835NEFkglio1ciRrpvJB9XDuW2jHo24r5hCuO+CJp9Ey+Q6OqiYF2pNZ51czgELYy+lRGf06OPk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532712; c=relaxed/simple; bh=WE2WP5wqPSsFCM6tFm/ao0oE1NLz3y8I/64LG1ujfKA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KohAf4ZkMp6lKZoLW8pIWjN5SOD6VWxIGTaxlJfJXl50bpN4YFW3g+P6uiFFxABidwEuHBb7PEp4FYogqCaBfBd0EX5JuaOcot/8Uj14zc2XoYxOHstPhfuzTxrVmgRRXysHedh33cg9zPK8JwHXe1ZT+ZT8EtPqd/eHSxAFlQQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=UdT8ExIA; arc=fail smtp.client-ip=40.107.159.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="UdT8ExIA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xFXu0FT5kolPaL6kbGqx2aV9F5/qh3ahoq/SSPX2JHFLC03XUYzaBD75092vhm0kpAhXUmi+qnzf6ZyOEdpysTcgQPetlNaShOadMYU1aISQZRlvBV7U98EAYxgIovSUVz2xBIIAUErPWDWLUcA4tIPpJK91m8tF079lRqmOz4ewNwVZBRWKZkEq/Pcnmu3v3MmyFNOlLoPcyddQJhVmlIIqhkELZ4DIBLqdH3NqqOD6OP+POs0NNbdkKK7BuexW9Xs5BtOY5QLUTT8zaSfoAp2SkgxUk1xu8a46axjKR9mwU64VppLJz3LByf9F3cTrR9NO7NsMadZ9SqFEMGjcIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sb+y8AMgm/Pz246t4tB12uMbVhe+DwkL/jwc6+YzkGk=; b=CE1Nge+OuvTsqyfDEQk05M2SHjTZ0p9LSs9Dg7JxCtsGW22mJJR3nb9in5pyUp1kg19QFh7fQdnxTAxhg+78A6XCFuy8x3O/dYPLVcu21NujCMxyk45xL0d3s+/pk1LWR/Bz98qTbkepEcfg5mls2drTt/S/E7AJDRiypAqXwRihHe2I2dHh7bmrFSTZXfLKkBQbbE2kU9ZhPXh1rEc2YI88euDAsb8SDK6EVGcJXH2tXmYABXy5TL70eHC8De9vJDXo6z52DmQtT34kK8J0qshbIMCFIzFDyhdyUldwm7VPzFzNQRm5L8vaWu8FueGcFk8VSJei+Kq6cGGSarmcWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sb+y8AMgm/Pz246t4tB12uMbVhe+DwkL/jwc6+YzkGk=; b=UdT8ExIAfyJCVOd6gocZa1hX8xtLVtoJ+mvZBwtgaR+r2ihFmPicXBD2D3FBV2KPNlGo0aYk/Ry2iiuyd7qhg+66/5xa3uTWqon3+WE6F+bTcy5xp6EipQp5JzVPVSZGzU1+JUj2WmVX9mJz7a5zEKp/zXIoUHFolwCgbWXGd+hzU4geNE3L7PVyILmMN6A4JRL8X6LPCerZ6FEH6mFtoCHVgiJYxdcDx3AJFTPva2CYotoVBy/QZNIpJRCVEcrTNOFCnazLIRfNirk7pqWc6NGieq+fTFWrW7dSPhjDiQlH1pde3AUVQDcF4OZbIduWFXM95ZL8VsKc+mXtXXtgQg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) by GV4PR04MB11305.eurprd04.prod.outlook.com (2603:10a6:150:297::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.12; Mon, 18 Aug 2025 15:58:25 +0000 Received: from AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1]) by AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1%5]) with mapi id 15.20.9052.011; Mon, 18 Aug 2025 15:58:25 +0000 From: Mirela Rabulea To: mchehab@kernel.org, sakari.ailus@linux.intel.com, hverkuil-cisco@xs4all.nl, laurent.pinchart+renesas@ideasonboard.com, ribalda@chromium.org, jai.luthra@ideasonboard.com, laurentiu.palcu@nxp.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, LnxRevLi@nxp.com, julien.vuillaumier@nxp.com, celine.laurencin@nxp.com Subject: [RFC v2 1/5] media: Add exposure and gain controls for multiple captures Date: Mon, 18 Aug 2025 18:58:05 +0300 Message-ID: <20250818155809.469479-2-mirela.rabulea@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250818155809.469479-1-mirela.rabulea@nxp.com> References: <20250818155809.469479-1-mirela.rabulea@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0256.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e8::19) To AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9244:EE_|GV4PR04MB11305:EE_ X-MS-Office365-Filtering-Correlation-Id: aa9c23ce-6893-4be3-a891-08ddde701065 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|19092799006|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ZYFHJI+WBJcq/pdmumOP1lW1eoNsqp7qzkc6beJKNlMkQQj+5fIfChc7LmRL?= =?us-ascii?Q?DnrqSnsw5sXuRMMCkGKhnRhuC857U/f/CWLoFC1LXNPoorjBS4ktq1idTudB?= =?us-ascii?Q?zVcMkKZdCuOV5ug1vSiL1+RgXUvgfkNC9FmaH7BA7HKArQTawqNgKIUl4J0J?= =?us-ascii?Q?Nh17Bb+fqGhYmHuFv1HuRTF6hB+7AdCyXSvX/LKXVkuvhS0tH8N3OOnmUahd?= =?us-ascii?Q?Em6KVwoGxRmLlLX6KA3x2XBGxmWGdqB2ox0yYVL6ex0ckrqo3tA1qVxStNvz?= =?us-ascii?Q?1GNzRMUqZ6uPRimVskkLMVshEySgDRWLaiKtW+9DpW+wgix723GbXX1FUKFw?= =?us-ascii?Q?U/4plwG9hDgg35AV/I77coRCEckp2uwjKHRuSbu+3yY+VbNIQk45UmZu3khc?= =?us-ascii?Q?sTdTxdQV23KbxvbsFUUdFYMiiib/6jNDy8XTKLDlm2vtvO1nXJrmti758yW9?= =?us-ascii?Q?a2aaOlL5/rv8tk+gCmOpDn0RRHn2RtZEM2Lgox55nebOAX8H7G+KNPyxqiPK?= =?us-ascii?Q?+/G5JJ8aaDKVkN6nGB1oNR1SiBy52OGUl05HCznEn8P76oX7YIIwtHJ10fYi?= =?us-ascii?Q?3DU2QXN4cLEIbGEubfUgMk66HshJ9bpdj5VdI8xLC9kaZwy7XfOL1eueBvpT?= =?us-ascii?Q?Ns6qzduSZBBw+pVqvnAuAITfEiIhxp4JOg2ZrOtJTl3nIffWGLx2RHVNT4Vk?= =?us-ascii?Q?WJJ0hP4bxY0cN+vqeOGF9ng31QhHZFVc2AUTSfKmeGJqgeAeI4W3JQjWTRvU?= =?us-ascii?Q?cij1c+3kCrHvUrd2eyxMxBupNCI2sjVWHYa8fRNF1vrxQ7PnDf4nflMtTHRw?= =?us-ascii?Q?HCjMP3aXBpm4Y3r8lQb7HfDEYl0Yqqtj/cZPN5zBJEgf9YapZVajlSEnTUxr?= =?us-ascii?Q?M6wtQ6uZyj6j6BnqQkd8nXCBSPoWpbSY+4Raf3g/VczzQqBfHmPx/nZlZTuR?= =?us-ascii?Q?wGiNk0JS1KTLIaBp3Ii6H2gcuEB/oKG9v0lXAHs0+ZKOf71ZFkYtZL9t8EXP?= =?us-ascii?Q?wZvy1hOdAhe4FajqYGWw9arNYJvhAQdyczbfqLJmbYQ6vQdeK5URXuowoz1p?= =?us-ascii?Q?FlX4t5ZahEUWT1I3C7tSLBjfYIp5JpRtX+m6C1B6zmegxArnd3Ub2tH34R5F?= =?us-ascii?Q?5tKOn8BKDMkCfUSmvVMAGoD6qVTQinPg/tZTZtTxgwn7hiobKNs7Mte3hPcE?= =?us-ascii?Q?apsXj7dnTnigIqaPy8rp7KO6Oy6YeayPaEVBNSDlncWxKBlMCDHvWVHZsfjj?= =?us-ascii?Q?oJhE8hkKmQUb0auXnz7RczRgGHcMmoMSjKJf3HshQdx6jrYoTO6j6kukmIJo?= =?us-ascii?Q?7Vf6mKy5kKjTSCNfFIYEe7gL9f5/8OYVD8h1gPn64Y/eKx8lSYA35KSEcWrj?= =?us-ascii?Q?wD5EAgmETV8Ym9He9NCbI6t1OkGAU1cuWiCah+J6KhxZyEbqjKuVvx4poQbg?= =?us-ascii?Q?tbMWtR1Ro5Fpi4yJtHMdij6nnhd2Q0lgda6fq+gJwb/jZF21/kawTA=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9244.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(19092799006)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zvFhkRbaLQXAVc+2NMMypcR0C7d0a5P5zOfOPNr6LKKvbSmHapNc5nRsW9DI?= =?us-ascii?Q?/puRJzaZX1wsNXOW7/Sx+bYGRk0YRC2klgkuDrmhbhwdFvxk6pTLiTVK1p0E?= =?us-ascii?Q?MJZbmrPl1dXMJnZ638CgXDj3zYM12sG+1VeIuJrZalBmSUmi/sp72OSoAfGU?= =?us-ascii?Q?HL0UNvy/K8XeWVKH8FLHQ/2T+v6yJVY6QtSmgXrO9Oz7aEBZa9tV4gQ/g7O7?= =?us-ascii?Q?uV0jYjHYOPfWhUgdCDapxImOEN8qBg3nq4R0nEH8fnrUhJ2sx5RUOX54bw3L?= =?us-ascii?Q?8vGEtcnDT01H2ClSjQMdz755nSooOWvInujSZKcOeu6XRlExo5rR3wagRO/g?= =?us-ascii?Q?MkH7q5ijq085aAuISsE+/wxwUKo8bVZY9DK6xvxQ+27Mow9Ta6CYz3VOzrx+?= =?us-ascii?Q?Ag56aXu4BruarNgz5sqCcqUIPp4/DUiD6jsijPkAauuAuTPcu3UorwHSGDeG?= =?us-ascii?Q?8Fz7lfZ+AAPOs0NErmNoCIfIaJ1G1W0PVLQC86nWL/H1ajQFMJeyWduJiF1G?= =?us-ascii?Q?5Ct5wa7yoj4IAN0NUD5ibzuwx7EUC0QC1PINPobf5sGgdn67Rbv+r/VynptJ?= =?us-ascii?Q?kdOTSr2fmn1W2hJaTDKcNsDz1bvAKcA/53tXaDiIY275THMr6E1N1wRDXazI?= =?us-ascii?Q?j1ba5qTbiSuLqanpvm0L8smfWJTwFkxR6YlxO1djYZQLluNF/C6kUvpzh57q?= =?us-ascii?Q?zu7AUBMIyacF9vHXDWqggOwTEOaadQ0qTtX3umYMnXIsshDxQxzvEqp5810I?= =?us-ascii?Q?H0WLXYFGWAYvEfycJJvyao1Qg3QdglDEQnYksTuziU5z3VsBkeZtnTn2ynQN?= =?us-ascii?Q?22UsJj+mTDPWAVP7xq7h6hbleXmYHwelGar6GxTx3Drvg1M1dq4LPL4NjXXv?= =?us-ascii?Q?IBRsjGftOkIAb+Fg4HBYnlUvR+kaZsmVjlCfK3pH6YQ99osygJJd8I/nVeww?= =?us-ascii?Q?pM0Du2/xTOG8gMi0XN+tOU2XqeW+qY/m9LctSUcj9Wf5gi0Q84FYZDu5bvdl?= =?us-ascii?Q?hwcyCyzijBHeAUwM/xzxV0xsJUnspmCL2js+w4Dc/m6tZhmaALH0+KofbBy8?= =?us-ascii?Q?3NZN2DcrpsC1syUFjux7fBEYiTD2bjuL4Tza5xZCbEfeWDGR9ub0JsIN4VpZ?= =?us-ascii?Q?lJJP7Mhds2J/DQKB/f65gzBdQlouFvdEJnUchEtjCcIDqPu4q9p8B8SDvpAd?= =?us-ascii?Q?qOJQMSrBdq+ywrB+75Ej0il4vXHdqhOeCklZcFPOkqeis7M/Qrhm5KdOY49x?= =?us-ascii?Q?LS1dz2+OBhpms++ZtjLqBhmDyfen09LcbZSGjCj7f9lF44Pmmy6XNBvuM88i?= =?us-ascii?Q?MUtLLMfgA7MCMN+HSlz9nuuOL0Z/IHw5oTD7YuIrzpxZwaIdNYi2bx5K7nG0?= =?us-ascii?Q?OoEqv3TjcDYiF/a7CLG1L45gJP92B134hoVnXc9Hefvvhkvt8BRhOt8eqftE?= =?us-ascii?Q?QrS2NjsLQeDvGaMf96tuimlQa20fpzf4uGR/JD6A8+/22OtbpV7IFShOPKhj?= =?us-ascii?Q?X2L6Fu0DBHKgwJCjuxxLvGW7pcmSGmT466uOPJv8EPExw0A2M72wr2HM5Dma?= =?us-ascii?Q?dQb0YZCrI+fwFXd30zxJXbXT6WqUxbWXOAbM6kLXCuxO1HdSHY8QvN1/GNZ5?= =?us-ascii?Q?Gg=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa9c23ce-6893-4be3-a891-08ddde701065 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 15:58:25.2043 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wOdjkCHfC+ZLltk6jBzkSorxX0UHlaofi2p7wxVINcURY1hQPUDZvJzwv/HygJHO4x7+v5wZflK5L/SK/qA5Gw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11305 Content-Type: text/plain; charset="utf-8" Add V4L2_CID_EXPOSURE_MULTI, V4L2_CID_AGAIN_MULTI and V4L2_CID_DGAIN_MULTI for exposure and gain control for multiple exposure sensors. Signed-off-by: Mirela Rabulea --- drivers/media/v4l2-core/v4l2-ctrls-defs.c | 8 ++++++++ include/uapi/linux/v4l2-controls.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2= -core/v4l2-ctrls-defs.c index 1ea52011247a..65c468a3b01c 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c @@ -1155,6 +1155,9 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_TEST_PATTERN_BLUE: return "Blue Pixel Value"; case V4L2_CID_TEST_PATTERN_GREENB: return "Green (Blue) Pixel Value"; case V4L2_CID_NOTIFY_GAINS: return "Notify Gains"; + case V4L2_CID_EXPOSURE_MULTI: return "Exposure, Multiple Captures"; + case V4L2_CID_AGAIN_MULTI: return "Analog Gain, Multiple Captures"; + case V4L2_CID_DGAIN_MULTI: return "Digital Gain, Multiple Captures"; =20 /* Image processing controls */ /* Keep the order of the 'case's the same as in v4l2-controls.h! */ @@ -1607,6 +1610,11 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum = v4l2_ctrl_type *type, case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY: *type =3D V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY; break; + case V4L2_CID_EXPOSURE_MULTI: + case V4L2_CID_AGAIN_MULTI: + case V4L2_CID_DGAIN_MULTI: + *type =3D V4L2_CTRL_TYPE_U32; + break; default: *type =3D V4L2_CTRL_TYPE_INTEGER; break; diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-c= ontrols.h index f836512e9deb..6583c7bdbef2 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -1226,6 +1226,9 @@ enum v4l2_jpeg_chroma_subsampling { #define V4L2_CID_TEST_PATTERN_GREENB (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + = 7) #define V4L2_CID_UNIT_CELL_SIZE (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8) #define V4L2_CID_NOTIFY_GAINS (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9) +#define V4L2_CID_EXPOSURE_MULTI (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 10) +#define V4L2_CID_AGAIN_MULTI (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 11) +#define V4L2_CID_DGAIN_MULTI (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 12) =20 =20 /* Image processing controls */ --=20 2.43.0 From nobody Sat Oct 4 09:39:53 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013033.outbound.protection.outlook.com [40.107.159.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE3C53375D1; Mon, 18 Aug 2025 15:58:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532714; cv=fail; b=dw8adCU5FOsnWl4jpdAL1htS85EQHzmdoBDn08P32L3G2+zG+BGiIX8S222B5yUo6/ux4IExrev1q/T2tRZ95FqVl52H0mFT3J4MXDcmIcDVIh7OLxNdIUwcOADdzaXFMoX3n6m8ZVKmCL1Fl9Ba8XOs5iwSxb+6wCCYPjRO/m4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532714; c=relaxed/simple; bh=bmi4PyFYQcUfDw2a3TKJkStlpCiVDYgxSWpaB2yEfgw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ttvBgp7N12ZMfN9NRAx+9JiqWAAAQDkBD41tRqLONkPkKix3kt8QMNMmSjI9CLLnCyjq7fYm4Ng3HBlqoLK6TreT/XebYw/+HksMHfo17rGknPHKbkttAgV/9MmyjagWIwFqRad61bqTPpz56clfPUJAv+ky3WjV8waSvRyQkZA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=aaVJzp/k; arc=fail smtp.client-ip=40.107.159.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="aaVJzp/k" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CXBnOcElzrm8O2fqIk5cVylSFndKADOFdJ9WZoq1AahhIcn1N5NOlO019FxbXfNkwBxzzbMcqAXed+3t39Rfl+h16BEWK7fXCS3DsFfOYtJRCYWM+6+DAmUHPDX21JN+Z5rKtUq/pVuCf2teUeVTaaWcQqAjHnqfGHm7vuvoEu3jrSvmgRpr2l/VyAzB0+qZxQCpBBDWW0C4RP7uKMLwxpqrBDp5+q8ZuOktbA8jfb1fOQW6qphQVdyqvpeTa8izhH0tdyWMSMcYa2K3gT2Idln6RAV1wgmDg1Z+OBszcHPY4oQZax3XMLsex95ekYRMDqTnjrjoidXiyrDCnV4jFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1GnKI2UnKN6nMk3JCKT8gNCaBO6QVvSjHS6rllL0SZs=; b=aUAHJJMUhUo+0VCiQlxmVVOnphXuO73kTvAZM+q6vsaTe1yPjaWmeKCsaptmcO09JTzb+P7H/kNClZcKC9i7I2yrnZaOqAnfyytUjqHLepIwVq655Pn/C6SdRxdfJBMqMN0rckeJ33Rv7Y+cJcpGHSmu/5O2jqLAN0daBsGT6US/n4i8WfcDoeLabQFtcr5RwEc+2tevt84IPQO/cbzvADIy7qy15LAhiyBkHG3cTWdLhEa4WpxChxqgi83xKJH4LEL4J3wP8Ejp20GvbLpm4WjBgJZdv+mSqcSA1iFFkGwRjbhoxfLgU+fuVnozM00RGTT8cvVXEUG0sghevXYNBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1GnKI2UnKN6nMk3JCKT8gNCaBO6QVvSjHS6rllL0SZs=; b=aaVJzp/kNHALbKptPSE8hyp05c3R/jQQBc+7/sUZzDFwefNk9E2oR/Pf0Z9bmCSFB4/10HA452DPN72PR+Z6bENfnLE4ufeORvMz3GGYH4YnnGaEO5CoSpuc2TPj8tmOEs682AKnIrPcyBeIXvsBwTDKH9zSJj/znwfxs3pvnOASocycGJvS08aWoYLBJZU6K+SuU5W+6PXHc1FvM7GubRc5qSJqF2YKsCjAo8atVAg5clnMg58f72xCV/l2f9Px5Gia5+NxPlAaovGnSKZfGDyJNFyaiERyo3TdewXnfRWI9gZT+LfpaEo/iuonTKrdesZAEG+ouTxxkB3BgZgfDg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) by GV4PR04MB11305.eurprd04.prod.outlook.com (2603:10a6:150:297::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.12; Mon, 18 Aug 2025 15:58:27 +0000 Received: from AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1]) by AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1%5]) with mapi id 15.20.9052.011; Mon, 18 Aug 2025 15:58:27 +0000 From: Mirela Rabulea To: mchehab@kernel.org, sakari.ailus@linux.intel.com, hverkuil-cisco@xs4all.nl, laurent.pinchart+renesas@ideasonboard.com, ribalda@chromium.org, jai.luthra@ideasonboard.com, laurentiu.palcu@nxp.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, LnxRevLi@nxp.com, julien.vuillaumier@nxp.com, celine.laurencin@nxp.com Subject: [RFC v2 2/5] Documentation: media: Describe exposure and gain controls for multiple captures Date: Mon, 18 Aug 2025 18:58:06 +0300 Message-ID: <20250818155809.469479-3-mirela.rabulea@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250818155809.469479-1-mirela.rabulea@nxp.com> References: <20250818155809.469479-1-mirela.rabulea@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0256.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e8::19) To AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9244:EE_|GV4PR04MB11305:EE_ X-MS-Office365-Filtering-Correlation-Id: ece628f1-de8f-4429-4eb8-08ddde70116d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|19092799006|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?W54KP6VukUFBZJhgV8pPYg7HYhZfh3O0AtUbpmN3fCoifkmNqBGp2Pk6ARTu?= =?us-ascii?Q?hIq8hVBZ4Za4QN2cg4DBddk9eyqfOUAepYh0GFyjQHJhyP9ubnoI7zGSwS+I?= =?us-ascii?Q?RE3pEuRi22//83zs1K3NcTQ5UFX1c3OFhA3FHiNjMKDSnxPN4F8jWDd9BH5b?= =?us-ascii?Q?9/7M9oyEkkgYljeSYdjztZSqLcGOPI00RxYD+FzT4Ev9Oq+ZBpTm6CaYStCI?= =?us-ascii?Q?0hikmQUojbeuwvsupdT4jq5tohgc1fBqJITfhtMf2gyeHsjuNArWZG9smWe4?= =?us-ascii?Q?rNJOvce11aDEzgPyRLUhpEhY3ZKdmG3hB9l0t7Xm/+3J/NLFP6eQD0zq0FdK?= =?us-ascii?Q?2DHh3/PkQDlkPV19Fi4kZrZVEREqvGDbgZ556jS+/N+PmbFZplf+fLG3Qzbk?= =?us-ascii?Q?uh+VUIQoDTMdAggzGtAmwhOOe5Ov7cQelC+i8210lnQaKVDUhvzota2I7dBn?= =?us-ascii?Q?u8EylaiPjq4KwXP1Byb1espELo4UtVvXKj3PFjpD+9U3wbSfejwgaOeGwSTv?= =?us-ascii?Q?1QkyQdnVBtAAqqP3gi10ieofbe3nK7dhxh7qAIiAVfSL++gZolB9rWwtxajX?= =?us-ascii?Q?WecGW2A5VjHUPGPSOF+mhGn/GOLF6cw5KdZ5rE505l8E6wePFkCq6C6iGDKu?= =?us-ascii?Q?qlrhKVlOm5Q0pRM6oWeiKFwAGpIUf4+HIRO2FhbCEOee4UeMhFwCcS+ldHmp?= =?us-ascii?Q?km3yA91lXF7J37vfyy7TnOXiHNZvO2ROp+z9uEWfmFL0y1HQe5BmwbRcvCvP?= =?us-ascii?Q?TH2ltloRPFUy4r3wyFZuMZymrsFhKwIu5h/vk4n29zKSD9x4XuZ5eQsIyWJp?= =?us-ascii?Q?x9WOiAPJ42qZO3KFtJZkRAjWgINDLhJF2mfXtHCND2/KrJzCT9EcNtDtnzkc?= =?us-ascii?Q?Z3/foNQufIF+XmtNAE+sDbZRYMVCCn/E+OndkP4+6ehI1RSJjp3qTtYjfZ2T?= =?us-ascii?Q?94lvfDsBYvAa3EcVRWC17Shdyvrw2Yui8MmpJN5MO76KLoXcbLtaollRMtNM?= =?us-ascii?Q?nTmbjyKZTEArEZ4U8OijDcG8fPL+DJLL7HP5BKVngYS4UvoaWDmo0YQsW7j4?= =?us-ascii?Q?Uh76Jo0esYPOAJ7MTh9pf79017smHD9TGWgo2EyQtf98VCOV2ozqfYk1QBwz?= =?us-ascii?Q?sJG4vBAko4fhVE2ghQDQclwkvrDlAMnxwThvOKTcGkPUOSP1rXU1serzR60V?= =?us-ascii?Q?YQh6uBfdGcZEf/FDHryBzLXL9Z9UW5xCf1OwNJlo7Gg0epFgE5YPI2rc6wGK?= =?us-ascii?Q?TG0YBZL34owyOQJseM7y2K1oTN8t70FFuUiRax+1xPspUEBAiUj5oK+M59BB?= =?us-ascii?Q?zVIeZB7xVjLAfhzswBeEoRar0wDm6kZdhKjs9hvjg+I2S2hcpW0MDpXuBu8y?= =?us-ascii?Q?s8JLT687D6XRsNt9fxPAgSXeBUoLcV1b1wUzuISa7taWP59DCPq6mgm6mmgc?= =?us-ascii?Q?6l95vIzVsxkRbc1NUvvTjXYcwlU/+t9tjznS7G2QkfJdKjkrTDg04A=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9244.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(19092799006)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IyTFn0EEZIkxKa/YL0nXg5Ev0uQNPTcw9NsH7+KKCWHh1QPiHzUyOP1PDCtC?= =?us-ascii?Q?Sd9H0Iz8MAICBbXIe4AocQvRMSNsmX5IVednn7QRPNB+ge2kCoruW0euWeHM?= =?us-ascii?Q?EtlPrtWdkR+/Hph6dLqjUbmpN1CNYdlmDaClyq1eZBov6SdLAauDN24pjyyv?= =?us-ascii?Q?xyJGwl/vip/gw7+X2TlbZIj5VIoYuh6d4oFs5/Vt01w+DmVNBdhaG9+SLaf2?= =?us-ascii?Q?qtV9nAGwUnFoUlG0DPZUllmlfwzlDzZ2IGXLyBZEaSVyoVdVA14HBFkTdJpP?= =?us-ascii?Q?7oXCm5gCtIgxHKRNLEiXMHohlpcsHARUsxw/xkWM2dyhMJqs3R13HNhxYpHY?= =?us-ascii?Q?ICqWkk+YxR+MCEwik/zBwE1D/czFa6966LfmWGtOgUaMWXBb6pr35bZ2bXAn?= =?us-ascii?Q?f/Hgdbl8jdJHxmcsecV2ERZZm4QlzpKzTgsPefci90E3QJ7Ib7lF9i7GI/c0?= =?us-ascii?Q?SVS4xMMtGjHHeZfphTVizBbzROa13rwZ4eaPG/Pmptohf6afEnZGcamsGoHP?= =?us-ascii?Q?Y60OfIvhE/7sLV/C7pFqG4LxBMMlmMtO6MdPd0hInbd4JlMOApgtoBIu1hKy?= =?us-ascii?Q?z+7yOUXA8cBaoy8aQDApjs9M08vck0sDJl54NT3OgGJL6rO24P+HugmZF/en?= =?us-ascii?Q?Ka5DYKHJgOC/r7HqKPvomxawd6bRfMlSHGxkJxb0eNFoP4sVnFzUhSHNdMoL?= =?us-ascii?Q?uHgX7LMp49sbXQsPXuU2kON3uULAs2FS+pOgBbm4VZJm+VHXSQnJP9gLwjD7?= =?us-ascii?Q?VTK4619ZWa/79o2uBtbHFU1mEHV+tgTKMITspBhGU/r1tgXZlkb0/bY2Wv46?= =?us-ascii?Q?alCSTYtxfRx1uuUgD9oZDTW/CPHYh5Wiyn0KqRpLJM+rUKuxZEBfigdjMj+C?= =?us-ascii?Q?lUs8zt6MrGdaXUPkODG8KdNzLNq8q5GvlPQVaMa3tjMcdLLX4TNGYlq3ZoDO?= =?us-ascii?Q?sXiKDHUu12jrcSEutAXstu2DUnkeonZ5Io6C+x/APCGolSKslU9jPXklEFrE?= =?us-ascii?Q?rR2dQWDT2ciZ8DWB20GOpsAnphpQgR0+GVZknHMrcU98InFqt0j1jD9avO7x?= =?us-ascii?Q?nTtPQLVGvjGOgKq5DDx4nfx0tOHcPAcuPXKBnkixjYV2C5TxvoMsBlmZMI7W?= =?us-ascii?Q?Wh9Z3M7F40DN7RMq0CLqAEsWeQPcuxRpjpckSoKsiJo83m5+++hxCfZ9ApVv?= =?us-ascii?Q?UonXcKakyPMyKFJoqHXSaZCZgW0U//CIwp2/rj7j3KSVYdmHnslPeTTaMZnY?= =?us-ascii?Q?qty8H944GvHvOMCisv470efdCJz4aVrWXCwMvMS9UWDXPa/ofgAWUe1AxAeJ?= =?us-ascii?Q?dbagB4AaCFtdkP0CR0Eg7Zlp0aTUB9jEnydiWfbRiQmmPBsqBNe+4xQ8c9/B?= =?us-ascii?Q?PKHITkd5XtuR5jzU1XlGZiq4d8vTLmVCTKpTYylrqjpZfuCXmP0HpD+TCEfE?= =?us-ascii?Q?gy3QkIIwkKSrdyLXzMG8ZEbjOkPXxMEJ1nb0qORMOSrlublkMHnTiBHb/Zds?= =?us-ascii?Q?KpkBFfc4foY5cYZVMXuVrz6kXYPUwFxADMbXNBbfxTZtgP3t1B+pn+XlnubV?= =?us-ascii?Q?7LOw1ifBAd2P8cdk0Dca9eHdRGniu3LAHP3ywmE0BbxvytjxBP0hcDA+TTuv?= =?us-ascii?Q?LQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ece628f1-de8f-4429-4eb8-08ddde70116d X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 15:58:26.9352 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qTjbQXbYcsEwlmHiSOjQjimtTvp0rtcTfCzuLgn4qKvF6PJW67u9xGOVKj9K2Dy9eON7r/Qi6cfYWVougrCxxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11305 Content-Type: text/plain; charset="utf-8" The standard controls for exposure and gains allow a single value, for a single capture. For sensors with HDR capabilities or context switching, this is not enough, so add new controls that allow multiple values, one for each capture. Signed-off-by: Mirela Rabulea --- Changes in v2: Mention order inside array, from longest to shortest exposure Mention not to implement the -single controls if -multi controls are imple= mented .../media/v4l/ext-ctrls-image-source.rst | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-image-source.r= st b/Documentation/userspace-api/media/v4l/ext-ctrls-image-source.rst index 71f23f131f97..2526d4d19cbb 100644 --- a/Documentation/userspace-api/media/v4l/ext-ctrls-image-source.rst +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-image-source.rst @@ -92,3 +92,24 @@ Image Source Control IDs representing a gain of exactly 1.0. For example, if this default value is reported as being (say) 128, then a value of 192 would represent a gain of exactly 1.5. + +``V4L2_CID_EXPOSURE_MULTI (__u32 array)`` + Same as V4L2_CID_EXPOSURE, but for multiple exposure sensors. Each + element of the array holds the exposure value for one capture, from + the longest to the shortest exposure. Drivers for HDR sensors that + implement the V4L2_CID_EXPOSURE_MULTI control should not implement + V4L2_CID_EXPOSURE. + +``V4L2_CID_AGAIN_MULTI (__u32 array)`` + Same as V4L2_CID_ANALOGUE_GAIN, but for multiple exposure sensors. Each + element of the array holds the analog gain value for one capture, from + the longest to the shortest exposure. Drivers for HDR sensors that + implement the V4L2_CID_AGAIN_MULTI control should not implement + V4L2_CID_ANALOGUE_GAIN. + +``V4L2_CID_DGAIN_MULTI (__u32 array)`` + Same as V4L2_CID_DIGITAL_GAIN, but for multiple exposure sensors. Each + element of the array holds the digital gain value for one capture, from + the longest to the shortest exposure. Drivers for HDR sensors that + implement the V4L2_CID_DGAIN_MULTI control should not implement + V4L2_CID_DIGITAL_GAIN. --=20 2.43.0 From nobody Sat Oct 4 09:39:53 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013033.outbound.protection.outlook.com [40.107.159.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0908B337689; Mon, 18 Aug 2025 15:58:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532717; cv=fail; b=IzwcYRsomo0YlpDQB/iqaO7ub1Z2ga+JvsQaTjhGURgsu48H4W2nq99Y8PjiZmk9DBl98+Me3d3o7BemPuhWmDkPswGL46WJrG+UGjDCTypTaCpo1iaFXWog164P/mOEWtkWL+cW4kyJx+D0pwt+wZ7UfcjoQLztl2B2rmVZ9zs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532717; c=relaxed/simple; bh=gJup2OenG6Gv9wXPeaUJiGNFkcdorynAXof2X9TbYlI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=T1wVNdqHIkIfMBAsgitle+ExkXhjDluwDEz7cfG8ufRqpayZtoq+5GxnXWYMKhnTuPBzTN5N3n5dcTzqjGncJednQBoZrervbtdCdlwfOD96lnOoP4/RFktgrO0cGzaswcv++ZI+BSmUWNzkgGUdnJOlokLiaYNkEMPVzAHvBio= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=fr/qI3AJ; arc=fail smtp.client-ip=40.107.159.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="fr/qI3AJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sdRMuSKVmCDHp97IQ0f/lhCBZOK5r/sH+aJmvVAXyUpR6rteikMRLDbt6+VXnMshc6D1sdacZyx1qe8v55oRG5Is6k1WXAPCej26kcbpAs6hOw5gY/hJNeGKHJkE04o2b6HDPqVgzFGeJDgXLJI/ihrPcq43jhEspXS0GDE6jKwvkQPRDRhHgyPxgZz5aaUJKYhsjMVFI/bvfwsZ/qSIhcpYFJDFe5pYzvu/V1LZdu0XRhAh9b+I3FwrMFEco1WFwvoNw1TXJhUcmPmZDAfOThnLwboNY3Aiq9nApjNiYYKdzpSBOh293/8sJm6U6K3xipKor4Qr+jaUskRYW+OvrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BABxXEwJ6FJBh8G4gori2MttkrlFKhA96Zn12fgt0aA=; b=FlgIHxWEE95gUSnodg4uFrh3o+4Au06Rc4izcsVYg3W34HL/qLB+KtMpEZ59ndm8rEJUGWlMqEA1VQ+EBunxpUAW2NhW8s4luqaCyr5P1tQzALm/sNmBvg8HmGMtsaw1POh4/BI8TVaHT1NZ+cI1xvq2CG/a9FFNYIBYaZ0JA+oimJ93tcwv4NZ0pkX+XZc4VSKi8Yv+pwh2g/VaDchX4S/dW8D7PNqp6RuzxRQlm+LD4hCwWT+eqanaLnWmtqZ7XeQvVGvNdA/9YBXLuOcH1Alon34BsYgUnxgFcc3e+K9TXEU7l44VQbZyoQU12SXGO+Yf8VnSCdMZ7oWau3LvWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BABxXEwJ6FJBh8G4gori2MttkrlFKhA96Zn12fgt0aA=; b=fr/qI3AJz6n1Rgn/MPR+C1GxdPA+aXMo+zBTsYF38LVb9PAjv5+v60dMPTcFT2Xio46cDGsxOJxJzUyN0/hmTpsbQvd9Bjce8ZmYrcimGG8C8GQ6b/RnLcG/aV4P2XJXxKpp/mlRNgGSYZDgdcjaIGKCb6/+uXevGax4Bccntyy2RUqOidlv8zuePout17OKx5X2HOYIWghGXH+WfnHAIKs+rFj3fNc1jW2z+MpK3q7o16XfElPuu1ZxEYipNVt+bGuHM0gQFQdu4f/Sx/tRU5b4PpPgMHrNc8Nd18Q/5zXszoghPrh1Am14bCvoJoJ0JxEuoBvRcHSuRVA/IIVA9g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) by GV4PR04MB11305.eurprd04.prod.outlook.com (2603:10a6:150:297::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.12; Mon, 18 Aug 2025 15:58:28 +0000 Received: from AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1]) by AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1%5]) with mapi id 15.20.9052.011; Mon, 18 Aug 2025 15:58:28 +0000 From: Mirela Rabulea To: mchehab@kernel.org, sakari.ailus@linux.intel.com, hverkuil-cisco@xs4all.nl, laurent.pinchart+renesas@ideasonboard.com, ribalda@chromium.org, jai.luthra@ideasonboard.com, laurentiu.palcu@nxp.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, LnxRevLi@nxp.com, julien.vuillaumier@nxp.com, celine.laurencin@nxp.com Subject: [RFC v2 3/5] media: v4l2-ctrls: Add v4l2 helper functions for single-capture controls Date: Mon, 18 Aug 2025 18:58:07 +0300 Message-ID: <20250818155809.469479-4-mirela.rabulea@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250818155809.469479-1-mirela.rabulea@nxp.com> References: <20250818155809.469479-1-mirela.rabulea@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0256.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e8::19) To AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9244:EE_|GV4PR04MB11305:EE_ X-MS-Office365-Filtering-Correlation-Id: 1330cb71-8f3c-4f5a-7d32-08ddde70127d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|19092799006|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?y0S700zuwDSRsXWTsK6z0QcSZJrfqgTdGs7t9Q/Y2rnQg5lx3NiffzF0FXTo?= =?us-ascii?Q?YQKNboSO8vo9IgdFEJc8uJb6w2ZfwJ3o/u/C9Ex1SRavS/Om4BwFvREJKpt/?= =?us-ascii?Q?KdRbZf6ppF7wR+kyMGm7o+xy+dhN4VZQb+gGuumf2FZmquXRdGsPOt/4A6l9?= =?us-ascii?Q?uvfQbwLSB868/X/HCwaqWttfQTDBwrhe2fbGTcRP9lC9U6XxqUGAllChcC4q?= =?us-ascii?Q?7ILNZOr7QlRid5GXxCRA1Vk6/cTG+VR1iL+S0hmcwLmJ7+GMolDoiuwZzeZx?= =?us-ascii?Q?7oLOK5yb29vQj7p2Tsb7Z7NuSgaOlw15kiphIeRXnwHGY+RIHMFk9R4MW0FI?= =?us-ascii?Q?uyVz37B+ZHZNTjDLujV4Pjbidysl0NWCYevHwoYggRm0OVU9NCmGe9IILSyx?= =?us-ascii?Q?ym1JHMPZnVGzq+bhcpZJHHFMOnf9fZ7JWfoLWPfeo+ni4Z/SUODT/+Yaw0AJ?= =?us-ascii?Q?xMr6ah2RYPQFRePavYDuysuzYzD/IUqBx5V6rEK2SbmUh4bc40SBGl9iAYNN?= =?us-ascii?Q?dvT+P5MiTtz2tRnVODj3QRB3jw7L+c6CvxUiHMzrjtC/2S/WRUnBWsnEBeOQ?= =?us-ascii?Q?XXGfpK10gAvQvTVETIcR2K3Y8MncOzLdARQ9BjM76Gh1NLOrEwfPtk5g25m+?= =?us-ascii?Q?4RoVWQxj1vk3KkrcAhvzNSN0cjnVaubcOOaHEjyGmXKtkSbcHpHUQAYRjQM5?= =?us-ascii?Q?hBltZp9pUlCM2C0c6zB1k4p+7pyIjSp5HqnTpPkdTomdBw4vVDGz2pOC7avy?= =?us-ascii?Q?K/i3GLJpZFg6Y5Ddb1wywwVIFduGbZyFuQl+rTI/dIPBbT6zIunFoGTyYbjM?= =?us-ascii?Q?hRp87o3c34knyfz+ROvmmpy5OXrvPh7YoEI4SwWse56mCCXeU/LT2to6C92G?= =?us-ascii?Q?kv9z+OWhSYMVaQWRhcS6bCthSNY/aZXBAuk/COYqS6aqjj5vicXpazTeYXnD?= =?us-ascii?Q?n+iKiwD0y1Bx0X9k/ShElD1liEUrvU01HgfZ+GR8Id92aj7WRsFrUnJbzgnJ?= =?us-ascii?Q?Qbw/GyDbe9OnSJbFEqnlLkbfiQkeD4xBfZxnAMiJOt1R1CSN2KTzlQOPtF6M?= =?us-ascii?Q?dFOCkY/zpjh0pXrBvod9ma0stDf+wYlzdzUL49Ty5CXUEWrb4FYT6Dw1P7js?= =?us-ascii?Q?FEemdtRGmvczoj9az5ocC1lsG54Tsptg1L8ErpGZeqwxzH8F3ivqbJeah0iq?= =?us-ascii?Q?kl01EsetN/rOam3zu9IMhmh8sLwPqBPRLF6o6z0igBOzHcnsmTKEu6ZxvR5g?= =?us-ascii?Q?3gBX8ol6iDKnFLE+Bfzl9ZCxIRQOfqy0rY/5ZDOociXWZra3/VISUosFfY6x?= =?us-ascii?Q?O3j94+t6Ffcxi6cHGrnyxkpNiF+S+MeAQ/azuxy5vxD0eytIpBbNpUFo6nEM?= =?us-ascii?Q?bgkLaCcfdb73g5X3PsgTvkIEMVLMDT59iPVkjnEkR1iZXZvlvlDWQXiwu/gu?= =?us-ascii?Q?WwawOOXP1pNbYaqG7n6lr/eJmX+yf4bHbHYlPHzbl3uC6MQxlVA7Wg=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9244.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(19092799006)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Nu9RyCQzzn4+OhHO8U+vAwppa4U6KV+81SkbnRK/A2Ud3ZkY9ZxTmRZcy8RC?= =?us-ascii?Q?uwiPmVVtislDQrnZQcg+tb2bxdCP1kRHS/2mSCZSvBzPI32UplNabDwbA8hS?= =?us-ascii?Q?3/C699UUo4ca/gAoTsn1UFlbUTUExQloakHzL2i1KVbRTM59lwC8Bn1Gu8Dz?= =?us-ascii?Q?rXOmT2UoPKnFieYyWLMvSDrY+ul0hD6/2+/6kuP287j1odl0lNDhlhg1/+Gf?= =?us-ascii?Q?xkWJUTrbMNuCYsHUgStEllSskYis1kC3r7ErId0ZhniX/fZyuZ/tR0C0KCw2?= =?us-ascii?Q?iFf7O6uqZETVeMEA32aAQWZudX3kNa6X66/ocpXD3lwJdX0qdetb6Gk9n4ar?= =?us-ascii?Q?GKYApyFEXZAT09Gr/CCcwc96p6O1fDlVh/JgKN5Dl6xVedFRPOwGZ9Mr0CLB?= =?us-ascii?Q?pyNEQjOfBkPPlvqQt7S9Hl2nhTQipHjQtmnVvU6xx/Dax5AdYLohIijbEBgQ?= =?us-ascii?Q?RdqidgxjxkFEEPe3qzKk7vIIGYu1mO/R1Dx4atYIf6zC0nu71Ghh0EowsCh7?= =?us-ascii?Q?n4ZcLsx5Q1KQ9ZOfItnPFhfbV1IBV6WikH+OQWn84vIKXIIcDqMuB7j39/IL?= =?us-ascii?Q?PIahMyeUrRBmpxpNUsF9uUer58vZ4YrXsQIE7QzPXo9v6Yiv+CJoB6Iuh6py?= =?us-ascii?Q?aTYRqe3Ao8krrRwQ1yPToZdNdMK2Vbg/6TuMAZBlxYcHRuWBDdbbg2inWjvE?= =?us-ascii?Q?1Qv17MXfLTtUg8MlUBf1izrmFaCoR4Y9f+YD6Bzs+v/rljHyLdmGD9sgVYOO?= =?us-ascii?Q?oogF3sVeNJAwD5hks1UNUqxZWz2pR77sdL9dlmWMqdcp69tKD+rk1Le2f7+0?= =?us-ascii?Q?+Bme0klGwzBr9T/VWJXFe0Su7OKVEiFSmsN1b8qUEJk+NObrxbRlWYvXFbjV?= =?us-ascii?Q?38uCeyYzerEGXqzt7im7UhqEtzqhUrqNu7oVCzsukyPLN6UoROaLVzJjexID?= =?us-ascii?Q?DfvsfmT6z6FE5r1UcmziBJ2Bv6Tz0+6aV1pLcYU6HblckM3q/VjSUXTnsvcB?= =?us-ascii?Q?TB/x6xW41sDohYqIJnMi+8/6uHKyLu8nXIeqlGqCKMt8bHPuN+ObV/0rXi4n?= =?us-ascii?Q?LRXlAMazEIbq5T7CbgUbkYH+MEKax8OMUeT1+PxoRzlgTZYqvvWXtLEA8dFD?= =?us-ascii?Q?98AdNuTn3g1z03ZOloZbq5AboSBsvgCzkD4c9E7hAen6r0rI0RjsiWpGqTwt?= =?us-ascii?Q?pkV04T8QHwWIfEVRKFR6TinnpybBbn4yUlAOpw8WjfTi/jJ1sqtANCKDISNk?= =?us-ascii?Q?Jm3agcmNpbWUJ8a4v+cS8nlGpRdKXL5wPe82vXnL6qrAK4GJkEWFpQ1YmdEz?= =?us-ascii?Q?T0jN6KQzGGQl7m1VXY6WwnruSA5tB6JubTP+Me9c7UMK6nEMn9eAUqSCJGVI?= =?us-ascii?Q?BKbuk9lvzFRfQRSP6cMsnXl2GnKfx1PLwFNUZUN8PxZuB/WSZ/QHadtraCCT?= =?us-ascii?Q?cpjGf18VpimCBy6ZHFVZxL7FGCXhzf3teX++aopgR9To1DpXsGKbidA+gqDN?= =?us-ascii?Q?sGgocJZPC1XWXCU2PbeHle1RXGCnlbIpO48/xzbyhukIHMkC3ps94duUAF6e?= =?us-ascii?Q?aOI3kHogVbeNkT3b7XgtrgosOfCU7z6NpU/lWCzQz9E5Kl/j5l6X2ppaGovN?= =?us-ascii?Q?Vg=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1330cb71-8f3c-4f5a-7d32-08ddde70127d X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 15:58:28.6863 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LhA/bN3jiQyQGOm2NaVQjfH8syDd7T6LgBFLUOfUIbcz+vuXwwRCmGgEFrD3FiqsmuPaktyAALs2a5RUjKpDvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11305 Content-Type: text/plain; charset="utf-8" Add v4l2 helper functions to support backward compatibility with older user-space applications that are still using the single-capture exposure and gain controls. After the addition of multi-capture exposure and gain controls, the following scenarios are possible: 1. Old applications & old sensor drivers Both the application and the driver are using single-capture controls, no problem here. 2. Old applications & new sensor drivers The application is using single-capture controls and we want the drivers to implement only the new multi-capture controls. In this case the driver should use the v4l2_ctrl_new_single_cap_ctrls helper to create the old single-capture controls, for backward compatibility. 3. New application & old sensor drivers The new application can query if the driver supports multi-capture controls, if it doesn't, the application may fallback to single-capture controls. 4. New application & new sensor drivers Both the application and the driver are using multi-capture controls, again, no problem here. Signed-off-by: Mirela Rabulea --- Changes in v2: New patch drivers/media/v4l2-core/v4l2-ctrls-core.c | 85 +++++++++++++++++++++++ include/media/v4l2-ctrls.h | 76 ++++++++++++++++++++ 2 files changed, 161 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2= -core/v4l2-ctrls-core.c index 98b960775e87..41f307e3afa6 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-core.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c @@ -2719,3 +2719,88 @@ int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl= _handler *hdl, return hdl->error; } EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties); + +int v4l2_ctrl_new_single_cap_ctrls(struct v4l2_ctrl_handler *hdl, + const struct v4l2_ctrl_ops *ctrl_ops) +{ + if (hdl->error) + return hdl->error; + + v4l2_ctrl_new_std(hdl, ctrl_ops, V4L2_CID_EXPOSURE, + 0, 0, 1, 0); + + v4l2_ctrl_new_std(hdl, ctrl_ops, V4L2_CID_ANALOGUE_GAIN, + 0, 0, 1, 0); + + v4l2_ctrl_new_std(hdl, ctrl_ops, V4L2_CID_DIGITAL_GAIN, + 0, 0, 1, 0); + + return hdl->error; +} +EXPORT_SYMBOL(v4l2_ctrl_new_single_cap_ctrls); + +struct v4l2_ctrl *__v4l2_get_multi_ctrl(struct v4l2_ctrl *ctrl_single) +{ + struct v4l2_ctrl_handler *hdl =3D ctrl_single->handler; + struct v4l2_ctrl_ref *ref; + + switch (ctrl_single->id) { + case V4L2_CID_EXPOSURE: + ref =3D find_ref(hdl, V4L2_CID_EXPOSURE_MULTI); + break; + case V4L2_CID_ANALOGUE_GAIN: + ref =3D find_ref(hdl, V4L2_CID_AGAIN_MULTI); + break; + case V4L2_CID_DIGITAL_GAIN: + ref =3D find_ref(hdl, V4L2_CID_DGAIN_MULTI); + break; + default: + return NULL; + } + + return ref->ctrl; +} +EXPORT_SYMBOL(__v4l2_get_multi_ctrl); + +struct v4l2_ctrl *__v4l2_get_single_ctrl(struct v4l2_ctrl *ctrl_multi) +{ + struct v4l2_ctrl_handler *hdl =3D ctrl_multi->handler; + struct v4l2_ctrl_ref *ref; + + switch (ctrl_multi->id) { + case V4L2_CID_EXPOSURE_MULTI: + ref =3D find_ref(hdl, V4L2_CID_EXPOSURE); + break; + case V4L2_CID_AGAIN_MULTI: + ref =3D find_ref(hdl, V4L2_CID_ANALOGUE_GAIN); + break; + case V4L2_CID_DGAIN_MULTI: + ref =3D find_ref(hdl, V4L2_CID_DIGITAL_GAIN); + break; + default: + return NULL; + } + + return ref->ctrl; +} +EXPORT_SYMBOL(__v4l2_get_single_ctrl); + +int __v4l2_s_ctrl_multi_to_single(struct v4l2_ctrl *ctrl_multi) +{ + struct v4l2_ctrl *ctrl_single =3D NULL; + + if (!ctrl_multi) + return -EINVAL; + + ctrl_single =3D __v4l2_get_single_ctrl(ctrl_multi); + /* don't fail if no corresponding single control is found */ + if (!ctrl_single) + return 0; + + /* update the value of the single control, without calling s_ctrl */ + ctrl_single->cur.val =3D ctrl_multi->p_cur.p_u32[0]; + + return 0; +} +EXPORT_SYMBOL(__v4l2_s_ctrl_multi_to_single); + diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h index 4a294a5c7bdd..d3a9dde47349 100644 --- a/include/media/v4l2-ctrls.h +++ b/include/media/v4l2-ctrls.h @@ -1587,6 +1587,82 @@ int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl= _handler *hdl, const struct v4l2_ctrl_ops *ctrl_ops, const struct v4l2_fwnode_device_properties *p); =20 +/** + * v4l2_ctrl_new_single_cap_ctrls() - Register single capture controls for + * backward compatibility + * + * @hdl: pointer to &struct v4l2_ctrl_handler to register controls on + * @ctrl_ops: pointer to &struct v4l2_ctrl_ops to register controls with + * + * This function registers the single capture controls for exposure + * and gains, for backward compatibility with userspace applications that + * do not use yet the new, multi-capture controls. + * + * Currently, the following v4l2 controls are parsed and registered: + * - V4L2_CID_EXPOSURE + * - V4L2_CID_ANALOGUE_GAIN + * - V4L2_CID_DIGITAL_GAIN; + * + * Controls already registered by the caller with the @hdl control handler= are + * not overwritten. Callers should register the controls they want to hand= le + * themselves before calling this function. + * + * Return: 0 on success, a negative error code on failure. + */ +int v4l2_ctrl_new_single_cap_ctrls(struct v4l2_ctrl_handler *hdl, + const struct v4l2_ctrl_ops *ctrl_ops); + +/** + * __v4l2_get_multi_ctrl() - Return the multi-capture controls for a given + * single-capture control + * + * @ctrl_single: pointer to &struct v4l2_ctrl for the single-capture contr= ol + * + * This function finds the corresponding multi-capture control for a given + * single-capture control. + * + * This function assumes the control's handler is already locked, + * allowing it to be used from within the &v4l2_ctrl_ops functions. + * + * Return: a pointer to the multi-capture control if found, NULL otherwise. + */ +struct v4l2_ctrl *__v4l2_get_multi_ctrl(struct v4l2_ctrl *ctrl_single); + +/** + * __v4l2_get_single_ctrl() - Return the single-capture controls for a giv= en + * multi-capture control + * + * @ctrl_multi: pointer to &struct v4l2_ctrl for the multi-capture control + * + * This function finds the corresponding single-capture control for a given + * multi-capture control. + * + * This function assumes the control's handler is already locked, + * allowing it to be used from within the &v4l2_ctrl_ops functions. + * + * Return: a pointer to the single-capture control if found, NULL otherwis= e. + */ +struct v4l2_ctrl *__v4l2_get_single_ctrl(struct v4l2_ctrl *ctrl_multi); + +/** + * __v4l2_s_ctrl_multi_to_single() - Set the single-capture control for a + * given multi-capture control + * + * @ctrl_multi: pointer to &struct v4l2_ctrl for the multi-capture control + * + * This function finds the corresponding single-capture control for a given + * multi-capture control, and updates single-capture control with the value + * from the first element of the multie-capture control, to ensure + * backward compatibility with older user-space applications that still use + * the single-capture exposure and gain controls. + * + * This function assumes the control's handler is already locked, + * allowing it to be used from within the &v4l2_ctrl_ops functions. + * + * Return: 0 on success, a negative error code on failure. + */ +int __v4l2_s_ctrl_multi_to_single(struct v4l2_ctrl *ctrl_multi); + /** * v4l2_ctrl_type_op_equal - Default v4l2_ctrl_type_ops equal callback. * --=20 2.43.0 From nobody Sat Oct 4 09:39:53 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013033.outbound.protection.outlook.com [40.107.159.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 466043375A7; Mon, 18 Aug 2025 15:58:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532719; cv=fail; b=IGfDvSxq900T/WyUiWsnNqBv7C3ClXjttmJFyTrsWbHSeKTl8dhqx4k0ODTn32qEtLGtAwTpUXawODjF1X1ZtgKYXBOfZrZti0nP4darz3OVQ7uQD4aXQ8iykRpFyLHpjoRxeJ9GnbgBUiwvKNQ0A5J9sSBrw3pIEg3O0jolpDE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532719; c=relaxed/simple; bh=PHVg7YDloTRdtlb/n5GleyKS6rJ9797U7BPYk3dLaOI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bynWaIeXYZFRtYE+4kynrMZc1SIt86531gwLRl9jMJ3nAVJ00nhpU70PDGEumeTGO7X1GEOc4xumANTF1dXHyX116+WwXL69NGAr2cAb/mbrrgU+ecQ2SRMAXE6prWB7FVBf/Gegic2/Nal8mBx8tPxjz13KF9XkhNKRL9D8qS8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=EgN/0kdu; arc=fail smtp.client-ip=40.107.159.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="EgN/0kdu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AZ24K9Kj3V3VnBpEEDCnRWQFeVsmDLq0XvYEIBviLBX7bWicuXwbrS9Sq8eh2BRz6CGeS7GvcqoDd081g4iOI25JkwioVuiFukbKbWFGhu28/EvTNHG78N9uwVrtUYn8GdDKctl0J1mS2/rEld1vsHIFgfX5RqE//SgcBdG1hzSeIqKMQAY45JADzt7BhNANtv4/vHE6kgM5gJEiG9yx1J3RYqWL4Whur3d/pYmZqvzoVwWyVEBAwNdxI0Y/1Vs/Fx/IWdsLulejbxhvotSYF+8TFh5k1eVIWsnc64O9j6XLh1FBdTTXhiEb63EnPa0GI2zeneR4543zgzARj/j75Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+G6gmO9vpu5cn7zFjW+eMCDWqeSBXLIZnddwGzN1LLU=; b=cRe81Id9fHO7MoT57d+ryl+LnXbfKZVdroX6LEZCFelepM7BGTFOEeo2/JU14pnb98Oi9IyC0T6RMBh3J5Q9exAb0mv/gWz0vOSck9bHdxPtPZV4LNNgJkUN/0BTSJU9oDJ0X9m977crmlZlZ1c8K2d+d5Tg2s74hdXr5rVj2Pa6x0WZ0gH/+8DNspq59EIt6qpuTfaS2YX/xuN2UUU87daZ2DokTXXmEz1LIOR8/4sG+j4KYNEV74b+o+VHapxDajNP84ekF37q2mDytRg9HziLBKu3o/rlkCbxjdeUkz3OiIwjiZ4E93+K82aNQV26yUP9h6tswKqcyTxrl6wtxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+G6gmO9vpu5cn7zFjW+eMCDWqeSBXLIZnddwGzN1LLU=; b=EgN/0kdua9JpwsA8L8aSh/0QMJ0v315EHIQuS/KvACoIFFW5zQpWw9xSR5T4tfEUj1Gqt2YVbj8FIIy7nYE9t9aYvkNTeS6KciPaukXwYgapv40bwlyC8RvVNqxp73jvAT+DM3X4XznkM9w7H+FieDheQK+LsL1+OuNro/SabPa/pLiV9HdmmrexKce8VRMf1eRdw7DI2NH+jJKTiXnFtIgDhaOJpPBPMYgwC2PTysALPC0yM/ZdWlAK9wZ3JtdiTp+xUrLOvwy92x1lgHPmXhuX0BDqv1A+0DQIA3N3ywZzuKmCFNKchYG8wSBkofcJt6bKniH5d+drfFYEBw9Y5g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) by GV4PR04MB11305.eurprd04.prod.outlook.com (2603:10a6:150:297::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.12; Mon, 18 Aug 2025 15:58:30 +0000 Received: from AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1]) by AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1%5]) with mapi id 15.20.9052.011; Mon, 18 Aug 2025 15:58:30 +0000 From: Mirela Rabulea To: mchehab@kernel.org, sakari.ailus@linux.intel.com, hverkuil-cisco@xs4all.nl, laurent.pinchart+renesas@ideasonboard.com, ribalda@chromium.org, jai.luthra@ideasonboard.com, laurentiu.palcu@nxp.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, LnxRevLi@nxp.com, julien.vuillaumier@nxp.com, celine.laurencin@nxp.com Subject: [RFC v2 4/5] media: v4l2-ctrls: Use the single-capture control helpers in v4l2 core Date: Mon, 18 Aug 2025 18:58:08 +0300 Message-ID: <20250818155809.469479-5-mirela.rabulea@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250818155809.469479-1-mirela.rabulea@nxp.com> References: <20250818155809.469479-1-mirela.rabulea@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0256.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e8::19) To AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9244:EE_|GV4PR04MB11305:EE_ X-MS-Office365-Filtering-Correlation-Id: 68e17a3c-e7da-45cd-27f5-08ddde701387 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|19092799006|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wDK3PKayVTgZoAnf7RaygAy/JHrDgrQc+zpTjXL5lcsV0K2N3/h0rTX5oaqh?= =?us-ascii?Q?Fw0uhW1yzxaFGuc943/OMUDjlqXUDPUFebm2NeqBPwcpTGJp0T/pKD/hyDBO?= =?us-ascii?Q?TOi/K+/FkRRBGupZktIyz5LbEIH7Tl0/MSzNNoWkTXoiKlGeH689xC74FmxI?= =?us-ascii?Q?1pqO6xzLF4Ez+X9r1rdxKSqYZlDjqeFynkjrDu3EsmjGrcRFNzj7wR8jLyly?= =?us-ascii?Q?soXsn6Y7op7l+N7AoipEMTyIX6VDklWtxcTMeba9UBXdxW54qlRehKQCOUv1?= =?us-ascii?Q?NkC1VIW25hq6MwGR0pX+7jUd0NcOyZGJfCKKSdwEGF21m6WZLfCKj/m8k5VC?= =?us-ascii?Q?3Vn/pOQtfMbEjZQYi2MmIOi2e1soTymgnmvbx5CRF504lQf0VK2/A8kNZIMI?= =?us-ascii?Q?SyTY77YdjYPJc4sNguLSoTYD17rtmn1zZEJjyrpk/e7WBCnrUne0BUUz8u+7?= =?us-ascii?Q?jtqHKyPN7Gsfquqfm16dW8VheRJsxFETB+SIkH3csRWirfo2/ft4JHsnXT6s?= =?us-ascii?Q?39hvJW6OU9wiIvtdjbC5Jc0hYpdzC3hMl7bDO4LQelxbzs8d3M+xOukfztzU?= =?us-ascii?Q?zsYR316JcrKqwlob5Asjx3hQAgj6vIUvSC9HEFOnBolw+b7WZbemm2Ne7upr?= =?us-ascii?Q?L7nPQtnpzwN+zyJMrH+q90z7YQIzC8SQ/AeQbzRGFkDS8nixtYAtbQl25wPL?= =?us-ascii?Q?aD7f3D2/7/pNzpJdKc69p2xkMiIBxbLj6jBBYnjxbBQ+Pq7v/W7HOkaLmtBB?= =?us-ascii?Q?HeopnGmcJDoboAlRjZvysiTjGwulCwfJIe/TttjX7X3v7GDKm7lKNLR+wfvK?= =?us-ascii?Q?1K/qi2lCIDfkc3fWSuppP4KkyEUtCvP9TUhm2pY/ss9MyrADYTYcwx9Miph+?= =?us-ascii?Q?Dd5Lh4ClO1EDdd7rMPGBbSQhq8tj4TgEV3nvv/z4qPPEyvJJDkpYadWbv+pD?= =?us-ascii?Q?5w39U/RLe7HT/YVBLyB7pnc61XXVcC5QPQvQ5NYSVUd2HoVwWjLgtttnZShs?= =?us-ascii?Q?luKnOv6OX2+eWAkV0fp1dFZ0AZYl69/P8n2p1euRBQmTxusmZuukWmNPRCIa?= =?us-ascii?Q?r3mW8o3K8N3xOLQXUrgDLFEP7UYqcd0d4kWXdGdjdy86tqrHvdCt5XfIdNAZ?= =?us-ascii?Q?GKNZWYf1UPdjyVdC9vWb8nme0d5bk0xTYkcoePUnLucyb7bVilJx+ADN8tEn?= =?us-ascii?Q?ssaeb2eSmOn1rgziO01EhomhgdTVKOLBBNoD+8bUjg5hhaHznw8/bkUb9Y7t?= =?us-ascii?Q?0ALg2Vex3D4MQIHFHiTkgbfmW8+ug5XidFS7hqdmoiw0bRiz6cUgzCKE4zvG?= =?us-ascii?Q?EDqyWh7Rd2o+Cj49yQ3nqBjKVTFi2LaVgCpz8MqEDX44yoQFSHPVbO5L8YwC?= =?us-ascii?Q?P6/rgneOfy6uDDbTBs7a+eY7VlLUI3HRIy85cXxTQprnu+EAwykciN1ch/b5?= =?us-ascii?Q?7OB/jSHEYJvEM7kFJhztYighgSuIFY0z2B2Tun2ONvxVVrYpNROSSg=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9244.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(19092799006)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lbwVk6Xx0Q9OapLyVfDYqM68zIZ0NAYXxGqUDrnMGaoU6CSxPCrLOG/DY/Px?= =?us-ascii?Q?1SCzxRZYf4DpH/ruzzWiypEpJcIEbU0qnxEzLA/Z8C/QUNLgIoPkJ9RhbZwU?= =?us-ascii?Q?3zKlgdeo6Z0ymVXbDPLufbalRNl68hjwepXxAJUz407tOSc2FmiX836GOeN9?= =?us-ascii?Q?wJjNrXr4bO91x6Ljih9q7QwXb5NQLAf+u+vWmEZeghWBVfpsiEPo0cCEaK8w?= =?us-ascii?Q?+2ZrYA+woHVL17BuawUhsJplAdQpSeOfp8AYsgjDExQyVoGrpPL2Hr70X+Qx?= =?us-ascii?Q?C6E9GvHUops9EmusU1SlyqCPBrVloFdJPrCXsa5RSlmNlntLdCrjIytGQpwW?= =?us-ascii?Q?PgFY4Btk1y3xdXgy1frTa3WzWpwU2s5/k02Xwyx+Su/WpKZJse47MnTEwqVu?= =?us-ascii?Q?OSPmmJb9LN0nm8cI9P42n4AXNQeapW96Upg3ZLuoXrAdKG1HVjZUupRYMpON?= =?us-ascii?Q?5Sfm3x90SidoSTk9JWGl/9dIJ15hazbucFmdXKfCYG0S3Lpa3PB+wkoAt5Rx?= =?us-ascii?Q?IPpLnuPUioofwWL/9O9gnhCz1az+DYPlMBvJiqY+q8vOX6Ic8TwuKRTH8Ux0?= =?us-ascii?Q?YpQIRDwnxYyzBvGA+jJKJKaWvUyqX7eqqrIdeaJPmcnxzFtsuBZ1hy++8maC?= =?us-ascii?Q?A7XiqwmMdi5wK6JhcKp6lrr8AI5rIfjGw+yU5rIzC6liLMjiuYxNlS8p9hJi?= =?us-ascii?Q?xTqBV2qBNq+9njfZhlaZf64GQzIBRB659zbjUsE07OrQAuhi2kBdfCl9Osuh?= =?us-ascii?Q?pL5wyuP8oBjMKE0sIID+WxZ3JTvQ4LZmLWo2dke5/keg2ODrioy4mFydfF9B?= =?us-ascii?Q?3IQE5qr0x0zDrqXmdDhNNfO/LnNz//bXEVm69UidGF8RmFaWasAcneyZhImn?= =?us-ascii?Q?wOB6nnKg6GrEsL6i5HDv8Fewg9CUeFmAV6kB/IqA/IU6tTLSrjz3Wdru8EcY?= =?us-ascii?Q?J1S425k9eQ5GJmpWK2c2rnDdyZSurmkhpPIWsf5TjjfBx9+J407fCcO6oD/o?= =?us-ascii?Q?vzMHbnWZHw6dDniaY8vgrhb9ZGrx/xmxNv7w+qGatG5Hl7zfPCPdBf4vw81G?= =?us-ascii?Q?CwpGafGypPb2d/YI/VSAre+1w0UupeIPzgHjGJvtma486lezbibOcF1EFPZb?= =?us-ascii?Q?WxuCfMleyTtCrTUnxT5jEpSmqkkPLX3Y1m8xTyR3B2pADzeC6GExPf4rBhC+?= =?us-ascii?Q?U5Q4jAWIowTdEcyYLbesbZnx31dLHB6G5Jt22yFTAtba3iRz1wFGfLOvsAQN?= =?us-ascii?Q?o+F9nu2dJfQLrOfwRahlh1cfH2PDCRcUQEQi8mp/8s5EtMX6Hr8d3w2hVBMf?= =?us-ascii?Q?8ZAlY+Z+WiSWy9fvJMp2ai8Z02jvQq06RKXi9tpmOhbgxXNza9R1McAkh4zh?= =?us-ascii?Q?RjjD6O1eqi+TGVBhaPfWSrwJoeLN1XT2wWp8E6q5vkBxnuOVhaolFXdaRHME?= =?us-ascii?Q?tOtoIRtIdzTabcG9WzBYJSQay1jr4+RnUKKdJPChA7C96RIv3D8LBnVGiY2c?= =?us-ascii?Q?1jAuFG+ABfLMJe6N36HuliqCHP+Zdu4Ky1JNkV443VYREoF8+XLub7xRoQBx?= =?us-ascii?Q?0LhZUK3E2AllqqhRaWOTf/su4anzbULDM4Fg/Z0GCbzJQeJfOLwoEP6USt+o?= =?us-ascii?Q?pw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68e17a3c-e7da-45cd-27f5-08ddde701387 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 15:58:30.4659 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +knGgv3HgTXzRznDbGw8xvfvPDOTmG/xh3ESmm00NT9e/VSfPt3yDOFqbLNI6CtBBQEMRJ+0lkalf3CXrS8LRQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11305 Content-Type: text/plain; charset="utf-8" Use the following v4l2 helpers to support backward compatibility with single-capture controls, such that new drivers that only implement explicitly the multi-capture control won't have to worry about keeping them in sync with old single capture controls: __v4l2_get_multi_ctrl Used by the v2l2 core in try_or_set_cluster and __v4l2_ctrl_handler_setup to redirect s_ctrl towards the multi controls instead of single controls, so that the new sensor drivers do not need to implement the single-capture controls in s_ctrl. __v4l2_get_single_ctrl Used by the v2l2 core in __v4l2_ctrl_modify_range, to modify also the range of single-capture control when multi-capture control range changes, so drivers won't have to worry about it. __v4l2_s_ctrl_multi_to_single Used by the v2l2 core in __v4l2_ctrl_s_ctrl_compound, to transparently keep the value of single-capture control in sync with the value of the multi-capture control, so drivers won't have to worry about it. The __v4l2_ctrl_s_ctrl_compound() and __v4l2_ctrl_modify_range() are usually called during sensor mode change to update the exposure according to the current mode, the sensor driver only needs to update the multi-controls, and the v4l2-core will update the single-controls. Signed-off-by: Mirela Rabulea --- Changes in v2: New patch We need to choose either this patch (do as much as we can in the v4l2 core for backward compatibility for old userspace apps using single-capture con= trols) or patch #5 (let the new drivers still implement s_ctrl for single-capture= controls, but using the helpers, also driver needs to take care to keep ranges and v= alues=20 in sync) drivers/media/v4l2-core/v4l2-ctrls-api.c | 28 ++++++++++++++++++++--- drivers/media/v4l2-core/v4l2-ctrls-core.c | 23 +++++++++++++++++-- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-ctrls-api.c b/drivers/media/v4l2-= core/v4l2-ctrls-api.c index 49a5c7538a09..4f4cb53b8fb0 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-api.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-api.c @@ -947,6 +947,8 @@ EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string); int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl, enum v4l2_ctrl_type type, const void *p) { + int ret; + lockdep_assert_held(ctrl->handler->lock); =20 /* It's a driver bug if this happens. */ @@ -956,7 +958,14 @@ int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl, if (WARN_ON(ctrl->is_dyn_array)) return -EINVAL; memcpy(ctrl->p_new.p, p, ctrl->elems * ctrl->elem_size); - return set_ctrl(NULL, ctrl, 0); + ret =3D set_ctrl(NULL, ctrl, 0); + if (!ret) + return ret; + /* + * this can be removed when backward compatibility with legacy + * single exposure and gain controls is no longer needed + */ + return __v4l2_s_ctrl_multi_to_single(ctrl); } EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_compound); =20 @@ -968,6 +977,7 @@ int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, { bool value_changed; bool range_changed =3D false; + struct v4l2_ctrl *ctrl_single =3D NULL; int ret; =20 lockdep_assert_held(ctrl->handler->lock); @@ -982,8 +992,11 @@ int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, case V4L2_CTRL_TYPE_U8: case V4L2_CTRL_TYPE_U16: case V4L2_CTRL_TYPE_U32: - if (ctrl->is_array) - return -EINVAL; + if (ctrl->is_array) { + ctrl_single =3D __v4l2_get_single_ctrl(ctrl); + if (!ctrl_single) + return -EINVAL; + } ret =3D check_range(ctrl->type, min, max, step, def); if (ret) return ret; @@ -1015,6 +1028,15 @@ int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, ret =3D set_ctrl(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE); else if (range_changed) send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE); + if (ret) + return ret; + /* + * this can be removed when backward compatibility with legacy + * single exposure and gain controls is no longer needed + */ + if (ctrl_single) + ret =3D __v4l2_ctrl_modify_range(ctrl_single, min, max, step, def); + return ret; } EXPORT_SYMBOL(__v4l2_ctrl_modify_range); diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2= -core/v4l2-ctrls-core.c index 41f307e3afa6..8d706070c041 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-core.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c @@ -2478,6 +2478,7 @@ int try_or_set_cluster(struct v4l2_fh *fh, struct v4l= 2_ctrl *master, bool update_flag; int ret; int i; + struct v4l2_ctrl *master_multi =3D NULL; =20 /* * Go through the cluster and either validate the new value or @@ -2508,7 +2509,16 @@ int try_or_set_cluster(struct v4l2_fh *fh, struct v4= l2_ctrl *master, /* Don't set if there is no change */ if (ret || !set || !cluster_changed(master)) return ret; - ret =3D call_op(master, s_ctrl); + + /* + * for sensor drivers that no longer handle single-capture controls in + * s_ctrl, set the corresponding multi-capture control instead + */ + master_multi =3D __v4l2_get_multi_ctrl(master); + if (master_multi) + ret =3D call_op(master_multi, s_ctrl); + else + ret =3D call_op(master, s_ctrl); if (ret) return ret; =20 @@ -2590,6 +2600,7 @@ int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handle= r *hdl) =20 list_for_each_entry(ctrl, &hdl->ctrls, node) { struct v4l2_ctrl *master =3D ctrl->cluster[0]; + struct v4l2_ctrl *master_multi =3D __v4l2_get_multi_ctrl(master); int i; =20 /* Skip if this control was already handled by a cluster. */ @@ -2605,7 +2616,15 @@ int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handl= er *hdl) master->cluster[i]->done =3D true; } } - ret =3D call_op(master, s_ctrl); + /* + * for sensor drivers that no longer handle single-capture + * controls in s_ctrl, set the corresponding multi-capture + * control instead + */ + if (master_multi) + ret =3D call_op(master_multi, s_ctrl); + else + ret =3D call_op(master, s_ctrl); if (ret) break; } --=20 2.43.0 From nobody Sat Oct 4 09:39:53 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013033.outbound.protection.outlook.com [40.107.159.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D4FE3376B8; Mon, 18 Aug 2025 15:58:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532721; cv=fail; b=gMtl7FkmmofkSTwevHP0e9Qq7UXkVDzxZ+FVKBkKbpojnRiE2xydyBGyPk6bT/sGE/Hr/yRdS22TCFiEpcQuRiUi9bksVR3LViOvB2i+6Nlw/IgNvwhWIwLHFNEAZRYX4NI80BkOA2ijrDaE04zC8TE+RcDiKtRzPJhSr33rRM0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755532721; c=relaxed/simple; bh=PUURog6llueML+dCSIbpfv65rK4Lyo/Azu3/VhTYRas=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=s8GE1zxWON3tdDSnYf+GNi47wtAK/06vE+inYwwU7/csyVIB0NJbzomeNqZ1ssQlgLueUpkrVmTxhOpabWSdMI3j7LG71lHL5H6qyZZUaOqibZ1LhPemTzJdADDEYgD8yelcyNJNxLzrtFM+IZ+Gxlz0QBuwGtXI4nrfCuQ42QA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=L8BFccHk; arc=fail smtp.client-ip=40.107.159.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="L8BFccHk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QQU3oBGAXdEFS+9We0oVKZZhzHuz72gXfUoNJXbRkkhaBgpTeQ9EIlH6f8F4s03PjbjAoD/cAQ+XjL2NpVMwwiKoOcDsu8PpPZuD4xV9OszHI3WgsjZxqeuFoJqSDTuJC/AQriPPl+kocwBWkQt5DFE7d4faZnPwYgwXGRx+KKSHEZmU4HFvq6m1b7Jxn5Yhe1wReGWvQgHDDzD/pvZpZxV40deDDSp0gca5/QBSxZSwY82MXmLkFCY/e/Y/MzdGC2p9ZKI+pm/GitIxriayb1g5tgs3cAS7ar23DjUR1+I0JmdB2dT0W7mfD/zYLxHbsgDXQ93q0HLcDjkoSh3KCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=u3UdjBB/XMxRalbAO3NVlpLboKYQUx3jlyvs7SB47MM=; b=EVVdtB5CsNrX8+e6ldjCBJZkYykjHGqNqaybebdAge9sp5+u011sbLqHumtRA2LFl/aWQkVvUJx7dqg9oVuvzR/wIN04qbVhULMosLTbbGiU2EFI4RT6ccQ3vkP+rNzUIWYaL+np+7sIytlqk5ZuwGRsgKgUBkLeTCXilJvqEMHrvhTBRYRQzrAEpTYpo3KdPIwL1AtMFQBT8Ezbb2tYqZTXBGn6I3afWqo6RDX1QdYB6xYgF9W/f2b1crXeRETGF0VuuFLnflrbF8Cx3TzSda1mykNcbmSaN8iArHRJKFcG3Fkf0p0YPsLfS86+r1yiLvObYgg6uqo/CeTuhSfdDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u3UdjBB/XMxRalbAO3NVlpLboKYQUx3jlyvs7SB47MM=; b=L8BFccHkPSPg5kEx4URdevL8DqC5BgYeSEG4MrpA8/lgpB6xh2pFq3FBwg2ACJ3TlIDTjMChyJEPZQNADrTQ2UvMSFied6YI/pa0mKMX1ykrPoR4hax+L8UpuV0sALc2tjA+dfv8ITgBMotAlonIQzHeuOP1X18ZYQhHBL1lmeWrDo5lcAxaldnKPPCzXhjzlMOCjCNwKv94Qi4m3j+EuubeASWBW6M70BbrAlw4VrnN9tYLbtAATr/0g33H0GyMiDPxEy8yi6LLSA9Jio1LDKw/ZllvWcIx4wFA+/DQn6uGt6TjiBqlzHyTrkR+ccbpr3WBIM0MMpPEusL2IP9xEw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) by GV4PR04MB11305.eurprd04.prod.outlook.com (2603:10a6:150:297::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.12; Mon, 18 Aug 2025 15:58:32 +0000 Received: from AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1]) by AS4PR04MB9244.eurprd04.prod.outlook.com ([fe80::7303:2cc8:d109:d7c1%5]) with mapi id 15.20.9052.011; Mon, 18 Aug 2025 15:58:32 +0000 From: Mirela Rabulea To: mchehab@kernel.org, sakari.ailus@linux.intel.com, hverkuil-cisco@xs4all.nl, laurent.pinchart+renesas@ideasonboard.com, ribalda@chromium.org, jai.luthra@ideasonboard.com, laurentiu.palcu@nxp.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, LnxRevLi@nxp.com, julien.vuillaumier@nxp.com, celine.laurencin@nxp.com Subject: [RFC v2 5/5] media: v4l2-ctrls: Add __v4l2_s_ctrl_single_to_multi helper function Date: Mon, 18 Aug 2025 18:58:09 +0300 Message-ID: <20250818155809.469479-6-mirela.rabulea@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250818155809.469479-1-mirela.rabulea@nxp.com> References: <20250818155809.469479-1-mirela.rabulea@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0256.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e8::19) To AS4PR04MB9244.eurprd04.prod.outlook.com (2603:10a6:20b:4e3::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS4PR04MB9244:EE_|GV4PR04MB11305:EE_ X-MS-Office365-Filtering-Correlation-Id: 66e14593-f6c9-4312-94c5-08ddde701492 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|19092799006|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kyf6OOknCnVEUIL04AdE+N3RA7SdZSipe6BlY0+f6VgXiB4TE/hBzECaiCxO?= =?us-ascii?Q?pWk+yPJaiSqRDyPS6Dq2sm7C5ulmljq0pNQzZoOzHl4AFMU/WbxBjeGXEK9X?= =?us-ascii?Q?15m5CJXP1BZNR/QL1vxRh+mUDqy1ysAAr3sJV898ahjF9d/M1pZUofj+4xyM?= =?us-ascii?Q?wj2kJmQ+OAP7zvvYFsqM8vouqrUuQGtuce/6FfJXdAcQqDPydnb2wscW7E9f?= =?us-ascii?Q?w8+QpwnZyxQGy2RHZQl7er54DhI4VKkkC2wAiWfxydg6ExNsC6CQ14lBPWNz?= =?us-ascii?Q?GYRaj1XUl1y3HfoZIlUfbser3ix0zBCtDnTbekUUiUZxWTprFYI/9S9oguHd?= =?us-ascii?Q?fOeK0Ncst9LI3RX+uYkY4b+L+JyikQVOeJ3B+2Or6z0qgNYhvBpP+J8L2+aV?= =?us-ascii?Q?PzAOp1J6bvmniVkrbSTL8r8rXZWeWUXT7Rob4N2WJwAHELlctoOOVh/nvGoR?= =?us-ascii?Q?l25iakiOkFjo2Byv9dNAW2BgSYYOpnk5Z0QRNXsTnJSD/ZkXb7yV5bhVZ2eI?= =?us-ascii?Q?ABcg6cYyl2fjQ5rwMwrW+sjqydlXcLeR9rU3xyaqnwIUMOQ3k5zY6NZMzCT7?= =?us-ascii?Q?UTxCzOJZah+3M2n9nlvjFqBvjBZY6q952JBf6lUWFkI3+0cAnRjfR0f0AqRG?= =?us-ascii?Q?omj5V6ZyXTB1FDWNSU7MMm6QqeBIj9Wg/wgyWGoHmgjfEPdwm7z3gdKihUaP?= =?us-ascii?Q?6WW9NRVkTzf+TQBEav0anWpmTbpWgIrItjg3FcGOwY0dJD+BBeaMKujGlKyQ?= =?us-ascii?Q?MQMeCDTFl7UrXs+ptFGjHyywAiUYVXBUGdjEEnBfyV2cfBdlCYyLLY2Yyw1y?= =?us-ascii?Q?Ds63CitXB58P6YyoQ9dOkIT5tIpQTNvi1FGUYrPrmtwNrDZSQUUlvbz3eZus?= =?us-ascii?Q?E5b2XzQCt9lD12cn/qxFnFmZW/1WnlLsRXItBKAbtnTDvnEZ9ri3Jci2FdDk?= =?us-ascii?Q?/5/OFCKZeVCQUDbKO1Fda8nIZlQmwGxJ6NmkjG35PWR4/CHDMKqiuCnIR3q2?= =?us-ascii?Q?rTRepiWnJs6rMxLgJw8UK3RFFWuW8iKVKzTsHtCfnCijMVfWAHfYSReYBrz8?= =?us-ascii?Q?/poAAm8Za4uBEvD2gX135+sJ99u8H6w8ohHGMBzZQC3LWPkzYCEnY8EEIlPU?= =?us-ascii?Q?0pklIySZjfvWEPJ3ueQSS47Q8+m6Kf3RoRNt5Z3CIq5S9++sR21AlNIALf79?= =?us-ascii?Q?7PFLYsA8gIWtq25F/VNbnID5V7uPc4rDKVB/VvFt2Kje4jiBR1M7Y7xqATi5?= =?us-ascii?Q?GY4EXy7I/3on41zvVnLOXmjxqtv4RsXr/unylcZwGdSSZDlPRp/6hGc17lDw?= =?us-ascii?Q?IA2DyYPy/c4zxTVF/e6D3VVmd2iB+h5RMff/qAyhL/NYBplAGWd6puSUKRVv?= =?us-ascii?Q?JFLvBxDBHYHlplsE4TjSfxPz9fgJ5ny8Uv1vUE8VaSgiDZ9yCO343Ai/8tL8?= =?us-ascii?Q?ihfcJpD971FBaPZjH7eC+lALVF2Rw0qKGW8Hn+ebFYE9RRigldZS/g=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9244.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(19092799006)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MCmwUocif3imXOsUfYI3UZunOqvPBSAOomG8R6O7Np5tWXp45xi1Djux9wMj?= =?us-ascii?Q?P6d27LkoieueerwwEPVX/YDl4iR/YsYI+IRWw4Mc861ON97b1OSmCfdchKzL?= =?us-ascii?Q?hJ3MucsmZoMntoXRLkkIq/dh9gpbiBmbcQRz4VJrpWJcZ9sCbxN0ZOks0XrW?= =?us-ascii?Q?WwTNrKajqlwrRw3kviKcH3t7q3s/fiIk+E5+qdJPJzQU43Vwaj6ooW4ngkMk?= =?us-ascii?Q?HoRFBqIPh20EuThcG8lrxZWXPPGuA0/87MuwXHXDBJIZcuNM+VWXxlr0tWzl?= =?us-ascii?Q?tIWN9+3CHWN0Pc3n1IzOul6KfEIEE1TounSdtHsQgtMmE+6zKezny1xNtXya?= =?us-ascii?Q?Mz0rPUlb85kXLvmiw/dRKnH0MxSzlipy2CLewOff9iHKvuq/+KPZTz/2tnrb?= =?us-ascii?Q?1QrzI0KymDD67WHdnUahz4S+XOT29r52HfIP+lIMLQmkKCNDpS0Z4SNAFE4D?= =?us-ascii?Q?eFdVY89BMI9C+VoYeUW04TCs7tdWiuzsI8zWsj8zrEMKWnAml6x0AdHlEHD8?= =?us-ascii?Q?wPKyFfWGQoVKHooB6ZWN93ixFTXqQCD/a7BUDMlSobK+HrdHHovReocTllt3?= =?us-ascii?Q?MDue0myX9/50rK+UuMpRhC1A1oiy2KckEvKwAeT6kqqb/wTEFJ/Ub6wU3b9P?= =?us-ascii?Q?DsHIPLfuE2LKveTwcUNvFO2eFdFJtPiYLy3ez6Kjq4NqREBEweITCySfdXXu?= =?us-ascii?Q?utawSfKLWQEMNynRSkdLYlxwbEM9c5ye2uDIRunQswcHT3WiJzzazPuq6h/A?= =?us-ascii?Q?zzbmzSzepPo4J9m6nN1WGNlHH+1j/WyrSYjaabzc7n7K1MYFte0MPXLA+SAI?= =?us-ascii?Q?KC6js2x8O8pzQCXDwNoofvbZ3SSco6dfADaBUlGwCjYyTaQPFKU8mxgdcGkG?= =?us-ascii?Q?rogUNGl75iDCGVGaa6VgVvFvEOnnGsj1vtGim0+GRDvgIqFbjzkRF5ZJxNWF?= =?us-ascii?Q?Ost5NKYCRkfQx33HzLucjBrzNASJmUC2Z5p+XC8edeIn8H2BxxSYB1kIZjaL?= =?us-ascii?Q?9sVXciqBCvJfTVzSbSB83HCxCJIsVfIA4vTYJTw6ldK5/IaFF3+Pa3tASBZz?= =?us-ascii?Q?RshL9bQnfxqR1gJoZSg5eT/ZyuuiBW6p7yas5fJY2V1y9gawZ9O0tHzsrKjz?= =?us-ascii?Q?mKIHuq8oyzs4BGZkKQLlwJqGL5Be2wcuHRiwdozyTgc7WkcXhTwV9crmfo8d?= =?us-ascii?Q?SPMAt7WO6dLiwMRx5NP59WZ3IyKFzbV31F5zzpdJU4JCeCuV/YbhMfeK8jMT?= =?us-ascii?Q?uKCTClu1c7TA/RL52K1BW28keG4utC9CElqF5rIur7e1RBnZJqtAJTCScsJJ?= =?us-ascii?Q?81tDLUfWBGB8h6klQzCoAYsqVN4sJohzIlDXpjYpFLqv3QZ3OxOB6KM+Hz5S?= =?us-ascii?Q?Ah+Rj9jvCcgELWhAf7PjhHMg/HjSu1F4Ybt5BKV1BRBqqHqwZxekSkQDnANk?= =?us-ascii?Q?E0nU7YVTMTafBLa2lfuK27YZwA5umV1ObNDJfgu94RdnlPZ9PIppHL6r8Qk7?= =?us-ascii?Q?jxFnWcYEgZVeUCNhaksWVbvuIYq+Rr5UnjuYbd60s9MoeI9ui2kOK7BicDEa?= =?us-ascii?Q?n63FBYlxDR1m3LjALIyMQs8PvJ0SI7oo78xDjKfGMqqFWRsIWQDooMz9SzGz?= =?us-ascii?Q?wQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 66e14593-f6c9-4312-94c5-08ddde701492 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2025 15:58:32.1895 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NCW2W1ikaQ1kLbd3Q3sDHlRNT2u7+qNgKIy3dQRq1FS88pvZ+BccgqQLn58gwK6B7Lk3TnWH6dCGJGPuBVlNhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV4PR04MB11305 Content-Type: text/plain; charset="utf-8" Helper function to be used in new sensor drivers to implement s_ctrl for single controls for backward compatibility. This function finds the corresponding multi-capture control for a given single-capture control, and updates only the value corresponding to the first capture with the same value as the single-capture control value. Signed-off-by: Mirela Rabulea --- Changes in v2: New patch We need to choose either this patch or patch #4 drivers/media/v4l2-core/v4l2-ctrls-core.c | 12 ++++++++++++ include/media/v4l2-ctrls.h | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2= -core/v4l2-ctrls-core.c index 8d706070c041..f16809a04c29 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-core.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c @@ -2823,3 +2823,15 @@ int __v4l2_s_ctrl_multi_to_single(struct v4l2_ctrl *= ctrl_multi) } EXPORT_SYMBOL(__v4l2_s_ctrl_multi_to_single); =20 +int __v4l2_s_ctrl_single_to_multi(struct v4l2_ctrl *ctrl_single) +{ + struct v4l2_ctrl *ctrl_multi =3D __v4l2_get_multi_ctrl(ctrl_single); + + if (!ctrl_multi || !ctrl_single) + return -EINVAL; + + ctrl_multi->p_cur.p_u32[0] =3D ctrl_single->val; + return __v4l2_ctrl_s_ctrl_compound(ctrl_multi, V4L2_CTRL_TYPE_U32, + ctrl_multi->p_cur.p_u32); +} +EXPORT_SYMBOL(__v4l2_s_ctrl_single_to_multi); diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h index d3a9dde47349..ea9973178556 100644 --- a/include/media/v4l2-ctrls.h +++ b/include/media/v4l2-ctrls.h @@ -1663,6 +1663,23 @@ struct v4l2_ctrl *__v4l2_get_single_ctrl(struct v4l2= _ctrl *ctrl_multi); */ int __v4l2_s_ctrl_multi_to_single(struct v4l2_ctrl *ctrl_multi); =20 +/** + * __v4l2_s_ctrl_single_to_multi() - Set the multi-capture control for a + * given single-capture control + * + * @ctrl_single: pointer to &struct v4l2_ctrl for the single-capture contr= ol + * + * This function finds the corresponding multi-capture control for a given + * single-capture control, and updates only the value corresponding to the + * first capture with the same value as the single-capture control value. + * + * This function assumes the control's handler is already locked, + * allowing it to be used from within the &v4l2_ctrl_ops functions. + * + * Return: 0 on success, a negative error code on failure. + */ +int __v4l2_s_ctrl_single_to_multi(struct v4l2_ctrl *ctrl_single); + /** * v4l2_ctrl_type_op_equal - Default v4l2_ctrl_type_ops equal callback. * --=20 2.43.0