From nobody Mon Feb 9 08:12:19 2026 Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021129.outbound.protection.outlook.com [40.107.51.129]) (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 A33F81D5AD9; Mon, 10 Mar 2025 07:20:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.51.129 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591203; cv=fail; b=DhoD6qun2qBy+9+mqJBIAk/VyNewY6VN8t39YwSqf/xkoPLE9fcHk6CgkwN9GAFxCKWd+IwWBb03GbOt0ZdyVr97zytKIK0UDv86v1XY8hkbpyrCbqFM7d06VGop7EAdvkn9HgzRRWe+R0BmC5Vfi+iH3FPP0k8+7m5UQxCiPrk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591203; c=relaxed/simple; bh=s1GPMlOovNRVYsCTzswDj7ZglxioGOMSlitTdMKG2K8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PZj7u7MN1HIA0lIqGCis/Q3MLrF6+Z71CcegVnIesdE2HSG68jrKrtSvP+qD5wwurElDhhAsQyPTFSFkaxR9CVbfUYpoy4bObPPbU5xO/LbUpb4gnKilN6r2v4vM+CHb9f8gPdAOWFurOMr17AlBEJfVMtY1wKIPV5BDHH66+Rc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io; spf=pass smtp.mailfrom=siliconsignals.io; arc=fail smtp.client-ip=40.107.51.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=siliconsignals.io ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qeFbxKspOABRn3Xi0zQ6YS2uvbHXeVgOYoxhPbbQwlCxuDjDXpfx46SG2kmVgZ2hf5Gm+BngtNLT+CETkPrdUv3Q3IK6ZVOYbFyMvZot1p6KRqbzmkM41KLlntPNV/cUAmaHByGXrOEeDHq9BJm+umAQlL8bK2hSlBbkMVbh6M7rtjiEIQWtO106NjfeyaT12YRmTkm37obMSXndxMy8NxOmgB5Y7+trwjsSLbbRNq3qb2ou4Zpvk4Oau3ZdF09zzj5wGPZpRuxDGG0iWYUasEdQx5GO5sLTkLKFI55MWVhwEJYjAZoiRPietYeJ7RSYj4mbzAzbpPFlVmO3ogcJzA== 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=azlX4BaSHk8ee9LeL2wg8X0j41EQ3hOwgyCu2CY8QAs=; b=cZaH5Qtq56pbGd+B8APkhPkXooKMQasKOeZqK9H9hBoDJOJoD7sk7BlwBij/iHg4csqOXeKNMBH3iJuZksQF3S2STS+WridLwUCWaU1OUdgA0UnBiZ1+Gc+I6DtXa8CrhLk6obYw6C79euhWqpMIfKWPDQkKrSVPxSl4KkHFO7/fHNXSXcAqRtMFZ2XJyVAiPZKJAJJPIUTWbcXkvirJQaBimfpjqTHgqIyhJKmC58hYNo9xlBRixbhsvLJwLhkl4oCFLF/heieQ66VkGCiR+awWCudB4y/zwJWKb+fDBxo5eZ8g9T+I+s1+PuQ2wPkc7BseZxrY37q9ZRjswtX4wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siliconsignals.io; dmarc=pass action=none header.from=siliconsignals.io; dkim=pass header.d=siliconsignals.io; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siliconsignals.io; Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) by MA0P287MB1385.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:fd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.26; Mon, 10 Mar 2025 07:19:59 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%3]) with mapi id 15.20.8511.025; Mon, 10 Mar 2025 07:19:59 +0000 From: Tarang Raval To: sakari.ailus@linux.intel.com, kieran.bingham@ideasonboard.com Cc: Shravan.Chippa@microchip.com, Tarang Raval , Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Julien Massot , AngeloGioacchino Del Regno , Zhi Mao , Luis Garcia , Kory Maincent , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/6] media: i2c: imx334: Simplify with dev_err_probe() Date: Mon, 10 Mar 2025 12:47:43 +0530 Message-Id: <20250310071751.151382-2-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250310071751.151382-1-tarang.raval@siliconsignals.io> References: <20250310071751.151382-1-tarang.raval@siliconsignals.io> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN3PEPF00000180.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c04::50) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) 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: PN3P287MB1829:EE_|MA0P287MB1385:EE_ X-MS-Office365-Filtering-Correlation-Id: ef1b4531-0ce9-446c-8a57-08dd5fa3f7bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?A3oBCIZOj5G96jfXmxATfm7t6NLlRPEU/5RCtiecM3NAoY300tDRRB+26M7W?= =?us-ascii?Q?1uNeiodSIJKgk//+M2NsxiSfWYgYDYoLo7Q/dowZ5P8LuruBgo4xeNMZBlqj?= =?us-ascii?Q?mvqT2fZvpA1+hj2kt29NINgcOw4wBeMtpN1sfxQVatgNKBduo2Cb40ANs1vp?= =?us-ascii?Q?y25HIO7fALFpsEn23cBfNLzvMvXjJ5/kA4XS+gzrPmNZoDPAXQ/Y8yYSFF64?= =?us-ascii?Q?g0+N5wifDmx8PG4PIndHX3+NqtDNMpVyVFP9XzK/2WvxlPwg7WiO864LnU2G?= =?us-ascii?Q?bkNtkVHjMKfAcVTzUJmAi6F3r93lU7LDcxpQ6TzBll1LR6UTa6eGZywWIH3r?= =?us-ascii?Q?y20zdqZ1jaEwz9pCkL7VLOh3LB1dh2XMeCH16Px+1uV6z808w1uv6P1eYY/c?= =?us-ascii?Q?AZ24hpnRtjFGyi2yDwRkhnYZECeZYDmRii9W2VV0fOTVTUuinifUH3KFwLw+?= =?us-ascii?Q?B47U13mJnBIcwnl1xfQAzng8ztcp/1VjtHfULeSzElQRzJL7qj9S8Z4hgkIJ?= =?us-ascii?Q?xHaz/MYoGlqRCYI3YIUBzLAw2N5xd26WCqx7WSVkgb7/Auacq4MKeMTyqLDF?= =?us-ascii?Q?sDysvKQn8JDHmTGtFcsP81KfXru/18n/1wDRoCIa2W+US+wUxU3PoiwcNynU?= =?us-ascii?Q?TQGGANapUuPzxbRzS5Mc4PcODrp8+x/xzt6EROdnVNG4qQxpDpwBQ/cwlWRU?= =?us-ascii?Q?PJ3UKqaYfaGfjDBAq0cARE2siKkdzjlyQh5vrqm+h/dyFW0XCnL6naimQ03k?= =?us-ascii?Q?rpHJ3XeWVNszYktkLZA1r8/QWkNLkWzBFiEXR6YrAYFiETaHsh/q1UtHMXvc?= =?us-ascii?Q?+m7hJsePMbZAI17t1sWBvimUKiySEjVIXOgc76gJ2htwQn8tLdwmW9XvTGzi?= =?us-ascii?Q?1jREV+PFRYPy7gvg5BaFHRSRI5nUzAUL5H5r5slilLZkyLXTE3TjBJ1I/DC2?= =?us-ascii?Q?iDB8w0JZmxmbrexM7EJAFsJAwCv84fNjTpOROZ8NJBxyJ9XXAoMMLaURwMsA?= =?us-ascii?Q?ptfCKsA9dqTkJfqyhImuDEdenmN+vRLeSsSXhJEPBxFTD4INmAq/8l78jBSM?= =?us-ascii?Q?LCjf1EHm3QaLZpYp/DcI2lmCPrYNfOsgRsVdFyQhTXyX8lneQwiUf/92+NUX?= =?us-ascii?Q?4mmt+fRnKEVdKWYRXk4a/Kf6VEZBQqvNJK8/KWH9qvwdcw1N99b4KFymQqgW?= =?us-ascii?Q?4U2L+iRgLxGatyvrQoj5UxUF1DbsOXmOBjdaxAZu7dvVYSZkW5T1694QPGMd?= =?us-ascii?Q?ZSw+y/wEg6/KGvGLFCa9izWgClVwS5vf5ynjJ97m84nkO8fs07P0C75oMdYg?= =?us-ascii?Q?tRwPPdhujWOzTXQlu26dTbLNGYg9FBGrARvUBgntvDnQCvkooBJ7hipCWbnD?= =?us-ascii?Q?qV/Vxl4z3q/m2ufBbwTsG7KUqC/GkcxdcHILCQW7w9jxwsaFSKqge1/Z3Qt4?= =?us-ascii?Q?6NWqDtWTO514eXhkWbq2ipezGWWLgat2?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PN3P287MB1829.INDP287.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ep/tRUPcVLesUAelelXBC3y5s/r6eKsK+A+PpOfykiklMPV6L6cj1cXuYtnm?= =?us-ascii?Q?z2D7FlpvXBnM7+u/il6dm2RMB3id5M4/9WdCFeD5z5oIRsBJokmZRG+/B81z?= =?us-ascii?Q?v0xBt8fpblfpCMyyD+4npLzUFg0LxYtsuQ8BdP7aZ4VbWsaSH6kPDdbENEOk?= =?us-ascii?Q?RiweX2kNSPSvPcvfzpSYujaCoQ0ALFoU9paCrnywe9wdw8B7lUPbKXEVrTl3?= =?us-ascii?Q?pK5WFi95X/eZN2GtXlWdOyMr2q2CdPTuBeUek39KwDfrcWQ133N2IH9WHWgz?= =?us-ascii?Q?V+YWAJCV5H1ft13k0rFBx9NtIcG7IGD7i/xxeJv1u+jDv24Kge6OnKiIyOGM?= =?us-ascii?Q?+Zndc1ZjHTrL7ZqfC0MZu4j27mBF9IjlOXWgNg3NRKmMhAs5iXNcv3SLmq+g?= =?us-ascii?Q?69omo9wmw6bkcJrKVAbqMRIgSrnyxbgIzqTGOVxCRsDb+VZmwTNL4iEEbbx8?= =?us-ascii?Q?qKTwX9M+Tp1PKVkid/glp+5X7pthVTiOkrqr/pqAj9xW8ZfMj/FNDsH8XK0y?= =?us-ascii?Q?UbwL0kYJ0S3gPf9KRcFuZUGFu/qxfi1/SVyqroXsUyGln8oTkjpwJelb1sxj?= =?us-ascii?Q?+2W3pHxbz/VQMUMCp4OnB8m6lA2vHY/L1zoxhrqUMk/Ui7HMh5undpQLxZZJ?= =?us-ascii?Q?onrqzK9hA7JWEn6jWdRzmHSArT0saHuG19pZgSxeQpmmbMFhJjb1Yo4i8ZWd?= =?us-ascii?Q?3OroyV2DJa8h6a4pYmDCQ+BN9mhc0HpMy/RWYQ5EOVdCqghyGUBJ8AnaiAkF?= =?us-ascii?Q?c5Lxhetf+yAXodv5kCgXDMbEZq2+/ondZOT+hvJO5/3Eu42y86mkLFBl7C9/?= =?us-ascii?Q?XUKNg8LJR297laXC1As+uv0NpgFj9c4hoXn3nkjQcq5boGTwIQ4jIq3SggMF?= =?us-ascii?Q?VGtYEJDxsgfPpsqinw1btkSi8+IipXcMl3oiKom/ESvgDGLR9pRtBx3ca9IW?= =?us-ascii?Q?ht3GTjozNqUGfR7/bPsuWg17qYSYqFY9yel7bztrWZBQyL59rREEOFosJFBw?= =?us-ascii?Q?5fml6jH4u2NHGEqYXaHmDOJ1kfishIyPwj9kvihLMPRY9mtv/kOfE+rl3HXJ?= =?us-ascii?Q?D6XCfK+jaTsxYwsjhqUbZMdUGc1qJLrYuj+xSmbqn6MIfZ9ZZjUrZm9IdMX0?= =?us-ascii?Q?VmxlKdScRga6YQmvgw6dvoucP9zIgPGiun2NPINEY+w8AaiNkrAgH5H3Nfmp?= =?us-ascii?Q?PQxX9WlUe70ZlpVyi6GoQ367E98uy3S3ssE6CfM/+C4LR1wfHRi2n1k2mgkK?= =?us-ascii?Q?N72M+0mopcInicw5EcfqBWC3dUNt/8mHzmG6Hl9vEqO4ty158ITht9tLTfeZ?= =?us-ascii?Q?h5GYPjVQEZuXhiYVqh6XNB9jkm3pSuf2apTc+Jr/uqBqqWZaLtr3AspLQOnF?= =?us-ascii?Q?i2aFCsZDPrvMZXAgOF4au5O1dfI1xuLBDdzEpJvsT2sJv+osIJb3g2zYQTNa?= =?us-ascii?Q?Pnl1Oivld20sP5so2fKNdf6IYGSb2VH0bST4wHF9KiPb3jx3n6VsBloSnfnN?= =?us-ascii?Q?RwO1UKdO9dHQcIWv2RQfvp9sh4m82BEAKI+wEOmj/IO41rmMEjj4rpkveQmz?= =?us-ascii?Q?7ZcQzdwPH2vrUdbJI17/kidaUNIeARt89INt2WZBxibdjd8D5Ca/6vBfuOym?= =?us-ascii?Q?BQ=3D=3D?= X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: ef1b4531-0ce9-446c-8a57-08dd5fa3f7bb X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2025 07:19:59.8493 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ec5089e-a433-4bd1-a638-82ee62e21d37 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mOqsg2ZYYdFNWq1CI6ArcIkFgEKpzkPNq2PhSekrIeFQO0KESoJaJq5af8In/Moufo6QpozBRtwTaBUzdS62KT/d6yf409FaP47Jpvk5m4M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MA0P287MB1385 Content-Type: text/plain; charset="utf-8" Error handling in probe() can be a bit simpler with dev_err_probe(). also, Added missing newline characters (\n) in error messages. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 61 +++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 8cd1eecd0143..ad0b03a3f573 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -658,7 +658,7 @@ static int imx334_update_exp_gain(struct imx334 *imx334= , u32 exposure, u32 gain) lpfr =3D imx334->vblank + imx334->cur_mode->height; shutter =3D lpfr - exposure; =20 - dev_dbg(imx334->dev, "Set long exp %u analog gain %u sh0 %u lpfr %u", + dev_dbg(imx334->dev, "Set long exp %u analog gain %u sh0 %u lpfr %u\n", exposure, gain, shutter, lpfr); =20 ret =3D imx334_write_reg(imx334, IMX334_REG_HOLD, 1, 1); @@ -705,7 +705,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) case V4L2_CID_VBLANK: imx334->vblank =3D imx334->vblank_ctrl->val; =20 - dev_dbg(imx334->dev, "Received vblank %u, new lpfr %u", + dev_dbg(imx334->dev, "Received vblank %u, new lpfr %u\n", imx334->vblank, imx334->vblank + imx334->cur_mode->height); =20 @@ -725,7 +725,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) exposure =3D ctrl->val; analog_gain =3D imx334->again_ctrl->val; =20 - dev_dbg(imx334->dev, "Received exp %u analog gain %u", + dev_dbg(imx334->dev, "Received exp %u analog gain %u\n", exposure, analog_gain); =20 ret =3D imx334_update_exp_gain(imx334, exposure, analog_gain); @@ -759,7 +759,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) ret =3D 0; break; default: - dev_err(imx334->dev, "Invalid control %d", ctrl->id); + dev_err(imx334->dev, "Invalid control %d\n", ctrl->id); ret =3D -EINVAL; } =20 @@ -986,7 +986,7 @@ static int imx334_start_streaming(struct imx334 *imx334) ret =3D imx334_write_regs(imx334, common_mode_regs, ARRAY_SIZE(common_mode_regs)); if (ret) { - dev_err(imx334->dev, "fail to write common registers"); + dev_err(imx334->dev, "fail to write common registers\n"); return ret; } =20 @@ -995,7 +995,7 @@ static int imx334_start_streaming(struct imx334 *imx334) ret =3D imx334_write_regs(imx334, reg_list->regs, reg_list->num_of_regs); if (ret) { - dev_err(imx334->dev, "fail to write initial registers"); + dev_err(imx334->dev, "fail to write initial registers\n"); return ret; } =20 @@ -1009,7 +1009,7 @@ static int imx334_start_streaming(struct imx334 *imx3= 34) /* Setup handler will write actual exposure and gain */ ret =3D __v4l2_ctrl_handler_setup(imx334->sd.ctrl_handler); if (ret) { - dev_err(imx334->dev, "fail to setup handler"); + dev_err(imx334->dev, "fail to setup handler\n"); return ret; } =20 @@ -1017,7 +1017,7 @@ static int imx334_start_streaming(struct imx334 *imx3= 34) ret =3D imx334_write_reg(imx334, IMX334_REG_MODE_SELECT, 1, IMX334_MODE_STREAMING); if (ret) { - dev_err(imx334->dev, "fail to start streaming"); + dev_err(imx334->dev, "fail to start streaming\n"); return ret; } =20 @@ -1091,7 +1091,7 @@ static int imx334_detect(struct imx334 *imx334) return ret; =20 if (val !=3D IMX334_ID) { - dev_err(imx334->dev, "chip id mismatch: %x!=3D%x", + dev_err(imx334->dev, "chip id mismatch: %x!=3D%x\n", IMX334_ID, val); return -ENXIO; } @@ -1121,24 +1121,20 @@ static int imx334_parse_hw_config(struct imx334 *im= x334) /* Request optional reset pin */ imx334->reset_gpio =3D devm_gpiod_get_optional(imx334->dev, "reset", GPIOD_OUT_LOW); - if (IS_ERR(imx334->reset_gpio)) { - dev_err(imx334->dev, "failed to get reset gpio %ld", - PTR_ERR(imx334->reset_gpio)); - return PTR_ERR(imx334->reset_gpio); - } + if (IS_ERR(imx334->reset_gpio)) + return dev_err_probe(imx334->dev, PTR_ERR(imx334->reset_gpio), + "failed to get reset gpio\n"); =20 /* Get sensor input clock */ imx334->inclk =3D devm_clk_get(imx334->dev, NULL); - if (IS_ERR(imx334->inclk)) { - dev_err(imx334->dev, "could not get inclk"); - return PTR_ERR(imx334->inclk); - } + if (IS_ERR(imx334->inclk)) + return dev_err_probe(imx334->dev, PTR_ERR(imx334->inclk), + "could not get inclk\n"); =20 rate =3D clk_get_rate(imx334->inclk); - if (rate !=3D IMX334_INCLK_RATE) { - dev_err(imx334->dev, "inclk frequency mismatch"); - return -EINVAL; - } + if (rate !=3D IMX334_INCLK_RATE) + return dev_err_probe(imx334->dev, -EINVAL, + "inclk frequency mismatch\n"); =20 ep =3D fwnode_graph_get_next_endpoint(fwnode, NULL); if (!ep) @@ -1151,7 +1147,7 @@ static int imx334_parse_hw_config(struct imx334 *imx3= 34) =20 if (bus_cfg.bus.mipi_csi2.num_data_lanes !=3D IMX334_NUM_DATA_LANES) { dev_err(imx334->dev, - "number of CSI2 data lanes %d is not supported", + "number of CSI2 data lanes %d is not supported\n", bus_cfg.bus.mipi_csi2.num_data_lanes); ret =3D -EINVAL; goto done_endpoint_free; @@ -1205,7 +1201,7 @@ static int imx334_power_on(struct device *dev) =20 ret =3D clk_prepare_enable(imx334->inclk); if (ret) { - dev_err(imx334->dev, "fail to enable inclk"); + dev_err(imx334->dev, "fail to enable inclk\n"); goto error_reset; } =20 @@ -1349,23 +1345,22 @@ static int imx334_probe(struct i2c_client *client) imx334->sd.internal_ops =3D &imx334_internal_ops; =20 ret =3D imx334_parse_hw_config(imx334); - if (ret) { - dev_err(imx334->dev, "HW configuration is not supported"); - return ret; - } + if (ret) + return dev_err_probe(imx334->dev, ret, + "HW configuration is not supported\n"); =20 mutex_init(&imx334->mutex); =20 ret =3D imx334_power_on(imx334->dev); if (ret) { - dev_err(imx334->dev, "failed to power-on the sensor"); + dev_err_probe(imx334->dev, ret, "failed to power-on the sensor\n"); goto error_mutex_destroy; } =20 /* Check module identity */ ret =3D imx334_detect(imx334); if (ret) { - dev_err(imx334->dev, "failed to find sensor: %d", ret); + dev_err(imx334->dev, "failed to find sensor: %d\n", ret); goto error_power_off; } =20 @@ -1376,7 +1371,7 @@ static int imx334_probe(struct i2c_client *client) =20 ret =3D imx334_init_controls(imx334); if (ret) { - dev_err(imx334->dev, "failed to init controls: %d", ret); + dev_err(imx334->dev, "failed to init controls: %d\n", ret); goto error_power_off; } =20 @@ -1388,14 +1383,14 @@ static int imx334_probe(struct i2c_client *client) imx334->pad.flags =3D MEDIA_PAD_FL_SOURCE; ret =3D media_entity_pads_init(&imx334->sd.entity, 1, &imx334->pad); if (ret) { - dev_err(imx334->dev, "failed to init entity pads: %d", ret); + dev_err(imx334->dev, "failed to init entity pads: %d\n", ret); goto error_handler_free; } =20 ret =3D v4l2_async_register_subdev_sensor(&imx334->sd); if (ret < 0) { dev_err(imx334->dev, - "failed to register async subdev: %d", ret); + "failed to register async subdev: %d\n", ret); goto error_media_entity; } =20 --=20 2.34.1 From nobody Mon Feb 9 08:12:19 2026 Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020091.outbound.protection.outlook.com [52.101.225.91]) (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 4FE671D5AAD; Mon, 10 Mar 2025 07:20:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.225.91 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591212; cv=fail; b=oKv35Zmu9il9UKTOjdqMhLu9o3Lo3jcUEk3AgLg3dUoxFfxcIxf8SfEMm32ysL7ihZkgA7rqUMJjPD7EZ01smThaRbsSAiYBTuzfLjA0UwgH5AhDrkUB6rl9i4zk5kRbzrjugUYXdQeeS9elaPQn7IfWk21WrwAKkGvQTtiHa40= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591212; c=relaxed/simple; bh=6osBSMI0G/pNBK3OwsXZk+49NEowNgBZZdLue+zjuXI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=hq7h3AS8jXSUTsVCH8rA4DQwI7Izy5zlz4+zQRdqDmNC7lxZVtuauH/mCJttFbGb4RDUsEMW7f3NJUXqizym7uE3BBxrhiKiRqQuu32d2E+z+rYIwvxXPV7Da1DPKoi8/lzv0wRRf+lCuHSiVGO4fN1wkIh7bv8JQ8s5inrnYvc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io; spf=pass smtp.mailfrom=siliconsignals.io; arc=fail smtp.client-ip=52.101.225.91 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=siliconsignals.io ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VXFboLmyizhY7ENtqmfL65Oa0/pussZgQ+Well6jVfqrRgBkCO8rswOKFKzx+6vBHiYZRFSkdYm3eEdDVGHI6ZLCStR522ZijNSYtFELQWfH49QQ29eN8a3Scie3s5T3g/RXJ+Xf2MheRXKxRJelpZ32KpAdrQZMffEmGGhmLJ8lHhPFY9XBIOco0Z2dreZRDcxjxBOhECWWV+dEiPDnkqhxFepAFmatlMijuWuUnWHA+9TErUPKE7HM9ZMQ4L2j8v8z+9mRuy2Jc3yKwLZ4+ZHOAyfAxumnuOqf0P5glNKr/2rh7h6ZdZUH1JRntJvkk6dKUcdkzrCuk+fr8y37ZA== 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=/PLtFoxPtJ1rPs3ppaDiTf6CFjdZIMVLNjCxv9+z1Qo=; b=Iprt35lpjY4DX+Jibo9Y9KoXKhjl5J8QeoxEh5cHcb9TWP1sSDkCA5YIFi5Twj6U6/wzVxTNbW0hVKVpiQb+Csudqv/k7GEXi8b6semuwRkb6DwbujAzw7gTUcm3P+7xr/+Yz80x8HAYlC95nVPUAXbcluxzQKesivjEMXs1hjI1f7itQm1BvUddbTgsyMCG0LD0DwQz5NxMtQoXoapUIRZDk7KnlRcD//t+bF17KVNQ3DmoWKXpGMLsn6CLoQTQ7zp6cdMZJCe0eGL951p7xOjEd42Bz7wIn/amTUlVxjUdMw7HLBLNPK5/Cmi8RyrHwgLF9kG+soiKZuDFE5neQQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siliconsignals.io; dmarc=pass action=none header.from=siliconsignals.io; dkim=pass header.d=siliconsignals.io; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siliconsignals.io; Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) by MA0P287MB1385.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:fd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.26; Mon, 10 Mar 2025 07:20:05 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%3]) with mapi id 15.20.8511.025; Mon, 10 Mar 2025 07:20:05 +0000 From: Tarang Raval To: sakari.ailus@linux.intel.com, kieran.bingham@ideasonboard.com Cc: Shravan.Chippa@microchip.com, Tarang Raval , Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Umang Jain , Zhi Mao , Julien Massot , Mikhail Rudenko , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/6] media: i2c: imx334: Convert to CCI register access helpers Date: Mon, 10 Mar 2025 12:47:44 +0530 Message-Id: <20250310071751.151382-3-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250310071751.151382-1-tarang.raval@siliconsignals.io> References: <20250310071751.151382-1-tarang.raval@siliconsignals.io> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN3PEPF00000180.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c04::50) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) 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: PN3P287MB1829:EE_|MA0P287MB1385:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e594d34-1e08-4951-c70d-08dd5fa3faf6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MSeRkmjJp4L7ipK5pihfNwWDKa/7ZAv6ztKCSDhQIfeOJ4tsoBpt36fXwiDx?= =?us-ascii?Q?0ipe4aDArZDD4Ti4+GEZMSu7o0sR2g4nHzpfvFhWcjRgJYjZcqIb/MPQSUy4?= =?us-ascii?Q?NIsF2x3QMSy6oNTxNc5LZbqlxB7/HKrdGO1q/Y1LC3IPf1iHoqD9hf/6LsuA?= =?us-ascii?Q?1YePQk+EAPyUrsSoF7MUqg30l1oQ0N2dCVStYcZbQgNTe571iYM7kaOXdQmN?= =?us-ascii?Q?jqs4fnqevhKGgiWGDiEtupaukamqhSISlAGfBaXUML1uH6w3zNHOIkkw82lb?= =?us-ascii?Q?kfhviKYckyBrHY8ScveC7W4wQgflKgPh8BJAFRZ4H4jsrmC3mLubp8HDg9cA?= =?us-ascii?Q?bXl/SOGN3EMofDneZGW9JZdoIUXl4pLixboWq5kBc3IbgNPAr3SChOumZEtJ?= =?us-ascii?Q?xRPdepVwc+xCtI8dtMlBqeeFoE3lILL7R4KtFH5G0jrUnTo+2WKCkK+1eW0S?= =?us-ascii?Q?B/vMrhaycGwMykBDWgzih0GacPsBX45uo3PosQ16V+h6i2tpWzmTt2/oFatS?= =?us-ascii?Q?7i8Pai759F8mK5EZeyH2nn1oZGTWwwEf2vUbxmV1bXZCSSTAY7njgGFmyM4X?= =?us-ascii?Q?Xr/gZU/GWrevi9dIcu4eXbJzopDB8vjexEh+PDFwNjaoEdPc1YEQ3+MSnJmx?= =?us-ascii?Q?d/rYNu/jnXjfb/U1xTKrTXFWnL8Jg9enAAsrZFwD3HbqGnIUdrp0rjNy6QIT?= =?us-ascii?Q?466KJ84oL6MIol6Rjbtu4Rj8d8UT+KaTfNQHu2eLPE4LPGWBlnaSnCdXwLv6?= =?us-ascii?Q?nKnYjzGlSVu69o5rVbVys5Tdm7FoJoA5mpW01RVPKiqcQj0JYE8lb1OTHauB?= =?us-ascii?Q?wP0ISv82U6JBV22ojCU4IyzSF7wPBtohg8VDEsau1lUG7tPJrOqXxxMtDHWC?= =?us-ascii?Q?/f8zkKh4VKGQ8Jpg0A3rGtcc+ekhYwVObdP+31hXyceg4Sh1zZdIChueK/Gn?= =?us-ascii?Q?no0iM41oi3lsErI82gipOPufm9eR3FqFis94RsEM4Ovadkcehd3QM4OoiTRp?= =?us-ascii?Q?/toOaVI2Ylid9xMp76PMrAfxxPkvMLaAlJ7nRTWc9GmhUWdUm1BOiYQ5sQUH?= =?us-ascii?Q?7zCl2ieBQ8QjR592Ffl1oXiottLQrT0EQtCawRgTD16Z/Zp/iGLvXQkilW+x?= =?us-ascii?Q?kpQAoEMCgV9nNvBFK6xbS86dcFeG4aS4DFcaqjdv+QcdYVgNmeBbOCtvdMuL?= =?us-ascii?Q?BoIKkO4GlqwvzyyipRPZSjUvo5xa4et9hULcTPwAxRc768XMKfPz1B8YCa79?= =?us-ascii?Q?+9gz97cfkamzy9nulMXfq4G1dNWof7J9/eCbRCNZoXB1gcYNm+e9p09Hsb5N?= =?us-ascii?Q?m7bofP+PDiCv6iSA9qdBjwHZDYVLFpJk/nT9McDs9exBrpkb9GfQBLRre0V8?= =?us-ascii?Q?N7Be5v1tKBYXC9WZxmjZSv4tW/KLVMJ0OtZMQEGAPR/183C5UyWhilVLGU9e?= =?us-ascii?Q?wTKLZbvpyVhSYEkETzk1U5mzDLVAMa3I?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PN3P287MB1829.INDP287.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CEMpTKlabvIJYVXmdGHbHWiKbuT2HKXuyYJxuVczr9ApCjRB+R8i/EUhu81F?= =?us-ascii?Q?Hm8DGhgZZ7h1iQhiGZz6Zssdj9Twu5F5XUXEmZIIx9B+3d/qVRYFLRbjNatj?= =?us-ascii?Q?Ayu37MxIXW9X64DauqzAF6NNwhjV90b9Y1xlr23mx33W76jDcE3Vw0sW4Bv8?= =?us-ascii?Q?2fq/Ws4egAhUfbw1Ur1/wQlbD9AVv+R6HBwqNSkVQFwD0bcUOaHvGxOyhtQu?= =?us-ascii?Q?EKMAbE8JoHEQbRlnwvXFiyhnmbCPHmtIPpspHLpamYuCZ/OHfDPtET2URB6k?= =?us-ascii?Q?RzRCnqV71xfnUNzUhoiaYskOsrB/EQKgt2PY0E/Qtg2c4Qo6gqR8Rk5fyvdq?= =?us-ascii?Q?lsBe01Z8vi5UzNqVxguwnNNJ/xZoJ2Y8S4nMcNsyALwiCIF3PomikyL/vcVY?= =?us-ascii?Q?ZuFI57jJLtTzdZF0UJy6lxFA8RzAPrJ8GgiXCCllH/B5/neNKREHaQ21JYxb?= =?us-ascii?Q?kurLx/jUFbgKk+lI19J2h/Fo2mvGHp+n+q1i5heJGitUeJ9GAEQpmm/OvLsd?= =?us-ascii?Q?UpHiyWqgxTeuY68Rd6eRfrBAvEiWxTlCnIbgoWLPH9kLqBKdr5tSyjxzw1zW?= =?us-ascii?Q?b05mJ+KZGp1xjJeFp6MHCaZy35ew5APQE5JVenOOUsKngN44HlifiPde7SV0?= =?us-ascii?Q?Asw6rNRKbOqVeP/ERl5+nyculRabP99oQ8vnlxEG0KLoUGSilERAWwNWGMJ5?= =?us-ascii?Q?wkfcjlREA1CWoJeoZ8UbA4PxmiwUCukQMJk2/CG3S2bjJdtkvO2SST76q5u7?= =?us-ascii?Q?8ngj+jJ21b192kgL7O+jOcV2lBwOCD/WLvhxxczh+lFFHwc+/1drAjbnw/zT?= =?us-ascii?Q?sFsc1pVFs0ccV1d5MptoaESrCma8s+Dxu1wL1Zrxp1df0OGEDXHjkxNV+5+O?= =?us-ascii?Q?hQx9sv3RyMOTmglvHhC2xOp5AJdJtrelK/DbDJ7GYLw8reGPXbpiVGOfjAtG?= =?us-ascii?Q?joAUaPPGhaUZ0pqvTYzAnVFj6HHFy7Bbdw3cdaLBzHWIOsEbtuch5D542iP4?= =?us-ascii?Q?jcAcNN8w49NpDQGyyaiMj1kU6Dh3doK3CFpDcNufHGAhSc1HrVhTboigKHrU?= =?us-ascii?Q?/jytJeg2B9WOZYeSi8BdLZu7EzQt5JZxkFo2g5gVr+pcjrWa4X+ps04gRNL/?= =?us-ascii?Q?qMGsOG6rOYwMsKA0+VsfIQwsIypBwSZ0DSF6bxJTBLLfL0xANyh5M5pZ4HX2?= =?us-ascii?Q?4pHSldV7ieRX7cszf7fEh24+dVg7j3HQuynSqOAkVvhucnuyF0sn06pVae5y?= =?us-ascii?Q?7wML3uCkrOQZa9ei30KTIWHZH01KTV20Tw+SRWXzx3gpeXkv/zRaIHgYpohs?= =?us-ascii?Q?Yr4IlXHT49kht+1g9gVkzAo5pZ1w2NxVaprq/tpKLROtmkYpb3VRj3I92HWs?= =?us-ascii?Q?LyrJPdoYvw96WIC8wz1/d1/KfJ5lro6UIYyUmNSHxIw/r2sir1cb+yq6nZLz?= =?us-ascii?Q?1nYGhtvbl1kauRbBPdugmnq+Xbt5qSsvc3378QmK0Fi+8FBpcYDNWkGYBMxs?= =?us-ascii?Q?BhoaKjzPF3XeLxrQ3Y7lszarfUkZY4HBUgMtJfmRZizrL9koFGueQ9RuGsG5?= =?us-ascii?Q?kkSG3bvMJrUmEDxO12lbGBZQQACSAaaW4myVyyk/8SFn3cDTRYTlU6txlqe6?= =?us-ascii?Q?cA=3D=3D?= X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 6e594d34-1e08-4951-c70d-08dd5fa3faf6 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2025 07:20:05.3031 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ec5089e-a433-4bd1-a638-82ee62e21d37 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Pt6tag12x3XCgnda4Zu9Ci0r3auGuF+kkNPIxxmPbwaEOsevZCqhopQeuPVLcXQgT0f40dSNXbLGVTFoGmdDP6rtZM7oZPzeZntha4uG4EY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MA0P287MB1385 Content-Type: text/plain; charset="utf-8" Use the new common CCI register access helpers to replace the private register access helpers in the imx334 driver. This simplifies the driver by reducing the amount of code. Signed-off-by: Tarang Raval --- drivers/media/i2c/Kconfig | 1 + drivers/media/i2c/imx334.c | 698 ++++++++++++++++--------------------- 2 files changed, 295 insertions(+), 404 deletions(-) diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 85ecb2aeefdb..c8138c1079fd 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -217,6 +217,7 @@ config VIDEO_IMX319 config VIDEO_IMX334 tristate "Sony IMX334 sensor support" depends on OF_GPIO + select V4L2_CCI_I2C help This is a Video4Linux2 sensor driver for the Sony IMX334 camera. diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index ad0b03a3f573..1fed03494813 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -12,42 +12,98 @@ #include #include =20 +#include #include #include #include =20 /* Streaming Mode */ -#define IMX334_REG_MODE_SELECT 0x3000 +#define IMX334_REG_MODE_SELECT CCI_REG8(0x3000) #define IMX334_MODE_STANDBY 0x01 #define IMX334_MODE_STREAMING 0x00 =20 /* Lines per frame */ -#define IMX334_REG_LPFR 0x3030 +#define IMX334_REG_VMAX CCI_REG24_LE(0x3030) + +#define IMX334_REG_HMAX CCI_REG16_LE(0x3034) + +#define IMX334_REG_OPB_SIZE_V CCI_REG8(0x304c) +#define IMX334_REG_ADBIT CCI_REG8(0x3050) +#define IMX334_REG_MDBIT CCI_REG8(0x319d) +#define IMX334_REG_ADBIT1 CCI_REG16_LE(0x341c) +#define IMX334_REG_Y_OUT_SIZE CCI_REG16_LE(0x3308) +#define IMX334_REG_XVS_XHS_OUTSEL CCI_REG8(0x31a0) +#define IMX334_REG_XVS_XHS_DRV CCI_REG8(0x31a1) =20 /* Chip ID */ -#define IMX334_REG_ID 0x3044 +#define IMX334_REG_ID CCI_REG8(0x3044) #define IMX334_ID 0x1e =20 /* Exposure control */ -#define IMX334_REG_SHUTTER 0x3058 +#define IMX334_REG_SHUTTER CCI_REG24_LE(0x3058) #define IMX334_EXPOSURE_MIN 1 #define IMX334_EXPOSURE_OFFSET 5 #define IMX334_EXPOSURE_STEP 1 #define IMX334_EXPOSURE_DEFAULT 0x0648 =20 +#define IMX334_REG_LANEMODE CCI_REG8(0x3a01) + +/* Window cropping Settings */ +#define IMX334_REG_AREA3_ST_ADR_1 CCI_REG16_LE(0x3074) +#define IMX334_REG_AREA3_ST_ADR_2 CCI_REG16_LE(0x308e) +#define IMX334_REG_UNREAD_PARAM5 CCI_REG16_LE(0x30b6) +#define IMX334_REG_AREA3_WIDTH_1 CCI_REG16_LE(0x3076) +#define IMX334_REG_AREA3_WIDTH_2 CCI_REG16_LE(0x3090) +#define IMX334_REG_BLACK_OFSET_ADR CCI_REG16_LE(0x30c6) +#define IMX334_REG_UNRD_LINE_MAX CCI_REG16_LE(0x30ce) +#define IMX334_REG_UNREAD_ED_ADR CCI_REG16_LE(0x30d8) +#define IMX334_REG_UNREAD_PARAM6 CCI_REG16_LE(0x3116) + +#define IMX334_REG_VREVERSE CCI_REG8(0x304f) +#define IMX334_REG_HREVERSE CCI_REG8(0x304e) + +/* Binning Settings */ +#define IMX334_REG_HADD_VADD CCI_REG8(0x3199) +#define IMX334_REG_VALID_EXPAND CCI_REG8(0x31dd) +#define IMX334_REG_TCYCLE CCI_REG8(0x3300) + /* Analog gain control */ -#define IMX334_REG_AGAIN 0x30e8 +#define IMX334_REG_AGAIN CCI_REG16_LE(0x30e8) #define IMX334_AGAIN_MIN 0 #define IMX334_AGAIN_MAX 240 #define IMX334_AGAIN_STEP 1 #define IMX334_AGAIN_DEFAULT 0 =20 /* Group hold register */ -#define IMX334_REG_HOLD 0x3001 +#define IMX334_REG_HOLD CCI_REG8(0x3001) + +#define IMX334_REG_MASTER_MODE CCI_REG8(0x3002) +#define IMX334_REG_WINMODE CCI_REG8(0x3018) +#define IMX334_REG_HTRIMMING_START CCI_REG16_LE(0x302c) +#define IMX334_REG_HNUM CCI_REG16_LE(0x302e) =20 /* Input clock rate */ #define IMX334_INCLK_RATE 24000000 =20 +/* INCK Setting Register */ +#define IMX334_REG_BCWAIT_TIME CCI_REG8(0x300c) +#define IMX334_REG_CPWAIT_TIME CCI_REG8(0x300d) +#define IMX334_REG_INCKSEL1 CCI_REG16_LE(0x314c) +#define IMX334_REG_INCKSEL2 CCI_REG8(0x315a) +#define IMX334_REG_INCKSEL3 CCI_REG8(0x3168) +#define IMX334_REG_INCKSEL4 CCI_REG8(0x316a) +#define IMX334_REG_SYS_MODE CCI_REG8(0x319e) + +#define IMX334_REG_TCLKPOST CCI_REG16_LE(0x3a18) +#define IMX334_REG_TCLKPREPARE CCI_REG16_LE(0x3a1a) +#define IMX334_REG_TCLKTRAIL CCI_REG16_LE(0x3a1c) +#define IMX334_REG_TCLKZERO CCI_REG16_LE(0x3a1e) +#define IMX334_REG_THSPREPARE CCI_REG16_LE(0x3a20) +#define IMX334_REG_THSZERO CCI_REG16_LE(0x3a22) +#define IMX334_REG_THSTRAIL CCI_REG16_LE(0x3a24) +#define IMX334_REG_THSEXIT CCI_REG16_LE(0x3a26) +#define IMX334_REG_TPLX CCI_REG16_LE(0x3a28) + /* CSI2 HW configuration */ #define IMX334_LINK_FREQ_891M 891000000 #define IMX334_LINK_FREQ_445M 445500000 @@ -57,32 +113,22 @@ #define IMX334_REG_MAX 0xfffff =20 /* Test Pattern Control */ -#define IMX334_REG_TP 0x329e +#define IMX334_REG_TP CCI_REG8(0x329e) #define IMX334_TP_COLOR_HBARS 0xA #define IMX334_TP_COLOR_VBARS 0xB =20 -#define IMX334_TPG_EN_DOUT 0x329c +#define IMX334_TPG_EN_DOUT CCI_REG8(0x329c) #define IMX334_TP_ENABLE 0x1 #define IMX334_TP_DISABLE 0x0 =20 -#define IMX334_TPG_COLORW 0x32a0 +#define IMX334_TPG_COLORW CCI_REG8(0x32a0) #define IMX334_TPG_COLORW_120P 0x13 =20 -#define IMX334_TP_CLK_EN 0x3148 +#define IMX334_TP_CLK_EN CCI_REG8(0x3148) #define IMX334_TP_CLK_EN_VAL 0x10 #define IMX334_TP_CLK_DIS_VAL 0x0 =20 -#define IMX334_DIG_CLP_MODE 0x3280 - -/** - * struct imx334_reg - imx334 sensor register - * @address: Register address - * @val: Register value - */ -struct imx334_reg { - u16 address; - u8 val; -}; +#define IMX334_DIG_CLP_MODE CCI_REG8(0x3280) =20 /** * struct imx334_reg_list - imx334 sensor register list @@ -91,7 +137,7 @@ struct imx334_reg { */ struct imx334_reg_list { u32 num_of_regs; - const struct imx334_reg *regs; + const struct cci_reg_sequence *regs; }; =20 /** @@ -121,6 +167,7 @@ struct imx334_mode { /** * struct imx334 - imx334 sensor device structure * @dev: Pointer to generic device + * @cci: CCI register map * @client: Pointer to i2c client * @sd: V4L2 sub-device * @pad: Media pad. Only one pad supported @@ -141,6 +188,7 @@ struct imx334_mode { */ struct imx334 { struct device *dev; + struct regmap *cci; struct i2c_client *client; struct v4l2_subdev sd; struct media_pad pad; @@ -168,250 +216,191 @@ static const s64 link_freq[] =3D { }; =20 /* Sensor common mode registers values */ -static const struct imx334_reg common_mode_regs[] =3D { - {0x3000, 0x01}, - {0x3018, 0x04}, - {0x3030, 0xca}, - {0x3031, 0x08}, - {0x3032, 0x00}, - {0x3034, 0x4c}, - {0x3035, 0x04}, - {0x30c6, 0x00}, - {0x30c7, 0x00}, - {0x30ce, 0x00}, - {0x30cf, 0x00}, - {0x304c, 0x00}, - {0x304e, 0x00}, - {0x304f, 0x00}, - {0x3050, 0x00}, - {0x30b6, 0x00}, - {0x30b7, 0x00}, - {0x3116, 0x08}, - {0x3117, 0x00}, - {0x31a0, 0x20}, - {0x31a1, 0x0f}, - {0x300c, 0x3b}, - {0x300d, 0x2a}, - {0x314c, 0x29}, - {0x314d, 0x01}, - {0x315a, 0x06}, - {0x3168, 0xa0}, - {0x316a, 0x7e}, - {0x319e, 0x02}, - {0x3199, 0x00}, - {0x319d, 0x00}, - {0x31dd, 0x03}, - {0x3300, 0x00}, - {0x341c, 0xff}, - {0x341d, 0x01}, - {0x3a01, 0x03}, - {0x3a18, 0x7f}, - {0x3a19, 0x00}, - {0x3a1a, 0x37}, - {0x3a1b, 0x00}, - {0x3a1c, 0x37}, - {0x3a1d, 0x00}, - {0x3a1e, 0xf7}, - {0x3a1f, 0x00}, - {0x3a20, 0x3f}, - {0x3a21, 0x00}, - {0x3a20, 0x6f}, - {0x3a21, 0x00}, - {0x3a20, 0x3f}, - {0x3a21, 0x00}, - {0x3a20, 0x5f}, - {0x3a21, 0x00}, - {0x3a20, 0x2f}, - {0x3a21, 0x00}, - {0x3078, 0x02}, - {0x3079, 0x00}, - {0x307a, 0x00}, - {0x307b, 0x00}, - {0x3080, 0x02}, - {0x3081, 0x00}, - {0x3082, 0x00}, - {0x3083, 0x00}, - {0x3088, 0x02}, - {0x3094, 0x00}, - {0x3095, 0x00}, - {0x3096, 0x00}, - {0x309b, 0x02}, - {0x309c, 0x00}, - {0x309d, 0x00}, - {0x309e, 0x00}, - {0x30a4, 0x00}, - {0x30a5, 0x00}, - {0x3288, 0x21}, - {0x328a, 0x02}, - {0x3414, 0x05}, - {0x3416, 0x18}, - {0x35Ac, 0x0e}, - {0x3648, 0x01}, - {0x364a, 0x04}, - {0x364c, 0x04}, - {0x3678, 0x01}, - {0x367c, 0x31}, - {0x367e, 0x31}, - {0x3708, 0x02}, - {0x3714, 0x01}, - {0x3715, 0x02}, - {0x3716, 0x02}, - {0x3717, 0x02}, - {0x371c, 0x3d}, - {0x371d, 0x3f}, - {0x372c, 0x00}, - {0x372d, 0x00}, - {0x372e, 0x46}, - {0x372f, 0x00}, - {0x3730, 0x89}, - {0x3731, 0x00}, - {0x3732, 0x08}, - {0x3733, 0x01}, - {0x3734, 0xfe}, - {0x3735, 0x05}, - {0x375d, 0x00}, - {0x375e, 0x00}, - {0x375f, 0x61}, - {0x3760, 0x06}, - {0x3768, 0x1b}, - {0x3769, 0x1b}, - {0x376a, 0x1a}, - {0x376b, 0x19}, - {0x376c, 0x18}, - {0x376d, 0x14}, - {0x376e, 0x0f}, - {0x3776, 0x00}, - {0x3777, 0x00}, - {0x3778, 0x46}, - {0x3779, 0x00}, - {0x377a, 0x08}, - {0x377b, 0x01}, - {0x377c, 0x45}, - {0x377d, 0x01}, - {0x377e, 0x23}, - {0x377f, 0x02}, - {0x3780, 0xd9}, - {0x3781, 0x03}, - {0x3782, 0xf5}, - {0x3783, 0x06}, - {0x3784, 0xa5}, - {0x3788, 0x0f}, - {0x378a, 0xd9}, - {0x378b, 0x03}, - {0x378c, 0xeb}, - {0x378d, 0x05}, - {0x378e, 0x87}, - {0x378f, 0x06}, - {0x3790, 0xf5}, - {0x3792, 0x43}, - {0x3794, 0x7a}, - {0x3796, 0xa1}, - {0x37b0, 0x37}, - {0x3e04, 0x0e}, - {0x30e8, 0x50}, - {0x30e9, 0x00}, - {0x3e04, 0x0e}, - {0x3002, 0x00}, +static const struct cci_reg_sequence common_mode_regs[] =3D { + { IMX334_REG_MODE_SELECT, IMX334_MODE_STANDBY}, + { IMX334_REG_WINMODE, 0x04}, + { IMX334_REG_VMAX, 0x0008ca}, + { IMX334_REG_HMAX, 0x044c}, + { IMX334_REG_BLACK_OFSET_ADR, 0x0000}, + { IMX334_REG_UNRD_LINE_MAX, 0x0000}, + { IMX334_REG_OPB_SIZE_V, 0x00}, + { IMX334_REG_HREVERSE, 0x00}, + { IMX334_REG_VREVERSE, 0x00}, + { IMX334_REG_ADBIT, 0x00}, + { IMX334_REG_UNREAD_PARAM5, 0x0000}, + { IMX334_REG_UNREAD_PARAM6, 0x0008}, + { IMX334_REG_XVS_XHS_OUTSEL, 0x20}, + { IMX334_REG_XVS_XHS_DRV, 0x0f}, + { IMX334_REG_BCWAIT_TIME, 0x3b}, + { IMX334_REG_CPWAIT_TIME, 0x2a}, + { IMX334_REG_INCKSEL1, 0x0129}, + { IMX334_REG_INCKSEL2, 0x06}, + { IMX334_REG_INCKSEL3, 0xa0}, + { IMX334_REG_INCKSEL4, 0x7e}, + { IMX334_REG_SYS_MODE, 0x02}, + { IMX334_REG_HADD_VADD, 0x00}, + { IMX334_REG_MDBIT, 0x00}, + { IMX334_REG_VALID_EXPAND, 0x03}, + { IMX334_REG_TCYCLE, 0x00}, + { IMX334_REG_ADBIT1, 0x01ff}, + { IMX334_REG_LANEMODE, 0x03}, + { IMX334_REG_TCLKPOST, 0x007f}, + { IMX334_REG_TCLKPREPARE, 0x0037}, + { IMX334_REG_TCLKTRAIL, 0x0037}, + { IMX334_REG_TCLKZERO, 0xf7}, + { IMX334_REG_THSPREPARE, 0x003f}, + { IMX334_REG_THSPREPARE, 0x006f}, + { IMX334_REG_THSPREPARE, 0x003f}, + { IMX334_REG_THSPREPARE, 0x005f}, + { IMX334_REG_THSPREPARE, 0x002f}, + { CCI_REG8(0x3078), 0x02}, + { CCI_REG8(0x3079), 0x00}, + { CCI_REG8(0x307a), 0x00}, + { CCI_REG8(0x307b), 0x00}, + { CCI_REG8(0x3080), 0x02}, + { CCI_REG8(0x3081), 0x00}, + { CCI_REG8(0x3082), 0x00}, + { CCI_REG8(0x3083), 0x00}, + { CCI_REG8(0x3088), 0x02}, + { CCI_REG8(0x3094), 0x00}, + { CCI_REG8(0x3095), 0x00}, + { CCI_REG8(0x3096), 0x00}, + { CCI_REG8(0x309b), 0x02}, + { CCI_REG8(0x309c), 0x00}, + { CCI_REG8(0x309d), 0x00}, + { CCI_REG8(0x309e), 0x00}, + { CCI_REG8(0x30a4), 0x00}, + { CCI_REG8(0x30a5), 0x00}, + { CCI_REG8(0x3288), 0x21}, + { CCI_REG8(0x328a), 0x02}, + { CCI_REG8(0x3414), 0x05}, + { CCI_REG8(0x3416), 0x18}, + { CCI_REG8(0x35Ac), 0x0e}, + { CCI_REG8(0x3648), 0x01}, + { CCI_REG8(0x364a), 0x04}, + { CCI_REG8(0x364c), 0x04}, + { CCI_REG8(0x3678), 0x01}, + { CCI_REG8(0x367c), 0x31}, + { CCI_REG8(0x367e), 0x31}, + { CCI_REG8(0x3708), 0x02}, + { CCI_REG8(0x3714), 0x01}, + { CCI_REG8(0x3715), 0x02}, + { CCI_REG8(0x3716), 0x02}, + { CCI_REG8(0x3717), 0x02}, + { CCI_REG8(0x371c), 0x3d}, + { CCI_REG8(0x371d), 0x3f}, + { CCI_REG8(0x372c), 0x00}, + { CCI_REG8(0x372d), 0x00}, + { CCI_REG8(0x372e), 0x46}, + { CCI_REG8(0x372f), 0x00}, + { CCI_REG8(0x3730), 0x89}, + { CCI_REG8(0x3731), 0x00}, + { CCI_REG8(0x3732), 0x08}, + { CCI_REG8(0x3733), 0x01}, + { CCI_REG8(0x3734), 0xfe}, + { CCI_REG8(0x3735), 0x05}, + { CCI_REG8(0x375d), 0x00}, + { CCI_REG8(0x375e), 0x00}, + { CCI_REG8(0x375f), 0x61}, + { CCI_REG8(0x3760), 0x06}, + { CCI_REG8(0x3768), 0x1b}, + { CCI_REG8(0x3769), 0x1b}, + { CCI_REG8(0x376a), 0x1a}, + { CCI_REG8(0x376b), 0x19}, + { CCI_REG8(0x376c), 0x18}, + { CCI_REG8(0x376d), 0x14}, + { CCI_REG8(0x376e), 0x0f}, + { CCI_REG8(0x3776), 0x00}, + { CCI_REG8(0x3777), 0x00}, + { CCI_REG8(0x3778), 0x46}, + { CCI_REG8(0x3779), 0x00}, + { CCI_REG8(0x377a), 0x08}, + { CCI_REG8(0x377b), 0x01}, + { CCI_REG8(0x377c), 0x45}, + { CCI_REG8(0x377d), 0x01}, + { CCI_REG8(0x377e), 0x23}, + { CCI_REG8(0x377f), 0x02}, + { CCI_REG8(0x3780), 0xd9}, + { CCI_REG8(0x3781), 0x03}, + { CCI_REG8(0x3782), 0xf5}, + { CCI_REG8(0x3783), 0x06}, + { CCI_REG8(0x3784), 0xa5}, + { CCI_REG8(0x3788), 0x0f}, + { CCI_REG8(0x378a), 0xd9}, + { CCI_REG8(0x378b), 0x03}, + { CCI_REG8(0x378c), 0xeb}, + { CCI_REG8(0x378d), 0x05}, + { CCI_REG8(0x378e), 0x87}, + { CCI_REG8(0x378f), 0x06}, + { CCI_REG8(0x3790), 0xf5}, + { CCI_REG8(0x3792), 0x43}, + { CCI_REG8(0x3794), 0x7a}, + { CCI_REG8(0x3796), 0xa1}, + { CCI_REG8(0x37b0), 0x37}, + { CCI_REG8(0x3e04), 0x0e}, + { IMX334_REG_AGAIN, 0x0050}, + { CCI_REG8(0x3e04), 0x0e}, + { IMX334_REG_MASTER_MODE, 0x00}, }; =20 /* Sensor mode registers for 640x480@30fps */ -static const struct imx334_reg mode_640x480_regs[] =3D { - {0x302c, 0x70}, - {0x302d, 0x06}, - {0x302e, 0x80}, - {0x302f, 0x02}, - {0x3074, 0x48}, - {0x3075, 0x07}, - {0x308e, 0x49}, - {0x308f, 0x07}, - {0x3076, 0xe0}, - {0x3077, 0x01}, - {0x3090, 0xe0}, - {0x3091, 0x01}, - {0x3308, 0xe0}, - {0x3309, 0x01}, - {0x30d8, 0x30}, - {0x30d9, 0x0b}, +static const struct cci_reg_sequence mode_640x480_regs[] =3D { + {IMX334_REG_HTRIMMING_START, 0x0670}, + {IMX334_REG_HNUM, 0x0280}, + {IMX334_REG_AREA3_ST_ADR_1, 0x0748}, + {IMX334_REG_AREA3_ST_ADR_2, 0x0749}, + {IMX334_REG_AREA3_WIDTH_1, 0x01e0}, + {IMX334_REG_AREA3_WIDTH_2, 0x01e0}, + {IMX334_REG_Y_OUT_SIZE, 0x01e0}, + {IMX334_REG_UNREAD_ED_ADR, 0x0b30}, }; =20 /* Sensor mode registers for 1280x720@30fps */ -static const struct imx334_reg mode_1280x720_regs[] =3D { - {0x302c, 0x30}, - {0x302d, 0x05}, - {0x302e, 0x00}, - {0x302f, 0x05}, - {0x3074, 0x84}, - {0x3075, 0x03}, - {0x308e, 0x85}, - {0x308f, 0x03}, - {0x3076, 0xd0}, - {0x3077, 0x02}, - {0x3090, 0xd0}, - {0x3091, 0x02}, - {0x3308, 0xd0}, - {0x3309, 0x02}, - {0x30d8, 0x30}, - {0x30d9, 0x0b}, +static const struct cci_reg_sequence mode_1280x720_regs[] =3D { + {IMX334_REG_HTRIMMING_START, 0x0530}, + {IMX334_REG_HNUM, 0x0500}, + {IMX334_REG_AREA3_ST_ADR_1, 0x0384}, + {IMX334_REG_AREA3_ST_ADR_2, 0x0385}, + {IMX334_REG_AREA3_WIDTH_1, 0x02d0}, + {IMX334_REG_AREA3_WIDTH_2, 0x02d0}, + {IMX334_REG_Y_OUT_SIZE, 0x02d0}, + {IMX334_REG_UNREAD_ED_ADR, 0x0b30}, }; =20 /* Sensor mode registers for 1920x1080@30fps */ -static const struct imx334_reg mode_1920x1080_regs[] =3D { - {0x302c, 0xf0}, - {0x302d, 0x03}, - {0x302e, 0x80}, - {0x302f, 0x07}, - {0x3074, 0xcc}, - {0x3075, 0x02}, - {0x308e, 0xcd}, - {0x308f, 0x02}, - {0x3076, 0x38}, - {0x3077, 0x04}, - {0x3090, 0x38}, - {0x3091, 0x04}, - {0x3308, 0x38}, - {0x3309, 0x04}, - {0x30d8, 0x18}, - {0x30d9, 0x0a}, +static const struct cci_reg_sequence mode_1920x1080_regs[] =3D { + {IMX334_REG_HTRIMMING_START, 0x03f0}, + {IMX334_REG_HNUM, 0x0780}, + {IMX334_REG_AREA3_ST_ADR_1, 0x02cc}, + {IMX334_REG_AREA3_ST_ADR_2, 0x02cd}, + {IMX334_REG_AREA3_WIDTH_1, 0x0438}, + {IMX334_REG_AREA3_WIDTH_2, 0x0438}, + {IMX334_REG_Y_OUT_SIZE, 0x0438}, + {IMX334_REG_UNREAD_ED_ADR, 0x0a18}, }; =20 /* Sensor mode registers for 3840x2160@30fps */ -static const struct imx334_reg mode_3840x2160_regs[] =3D { - {0x3034, 0x26}, - {0x3035, 0x02}, - {0x315a, 0x02}, - {0x302c, 0x3c}, - {0x302d, 0x00}, - {0x302e, 0x00}, - {0x302f, 0x0f}, - {0x3074, 0xb0}, - {0x3075, 0x00}, - {0x308e, 0xb1}, - {0x308f, 0x00}, - {0x30d8, 0x20}, - {0x30d9, 0x12}, - {0x3076, 0x70}, - {0x3077, 0x08}, - {0x3090, 0x70}, - {0x3091, 0x08}, - {0x3308, 0x70}, - {0x3309, 0x08}, - {0x319e, 0x00}, - {0x3a00, 0x01}, - {0x3a18, 0xbf}, - {0x3a1a, 0x67}, - {0x3a1c, 0x6f}, - {0x3a1e, 0xd7}, - {0x3a1f, 0x01}, - {0x3a20, 0x6f}, - {0x3a21, 0x00}, - {0x3a22, 0xcf}, - {0x3a23, 0x00}, - {0x3a24, 0x6f}, - {0x3a25, 0x00}, - {0x3a26, 0xb7}, - {0x3a27, 0x00}, - {0x3a28, 0x5f}, - {0x3a29, 0x00}, +static const struct cci_reg_sequence mode_3840x2160_regs[] =3D { + {IMX334_REG_HMAX, 0x0226}, + {IMX334_REG_INCKSEL2, 0x02}, + {IMX334_REG_HTRIMMING_START, 0x003c}, + {IMX334_REG_HNUM, 0x0f00}, + {IMX334_REG_AREA3_ST_ADR_1, 0x00b0}, + {IMX334_REG_AREA3_ST_ADR_2, 0x00b1}, + {IMX334_REG_UNREAD_ED_ADR, 0x1220}, + {IMX334_REG_AREA3_WIDTH_1, 0x0870}, + {IMX334_REG_AREA3_WIDTH_2, 0x0870}, + {IMX334_REG_Y_OUT_SIZE, 0x0870}, + {IMX334_REG_SYS_MODE, 0x0100}, + {IMX334_REG_TCLKPOST, 0x00bf}, + {IMX334_REG_TCLKPREPARE, 0x0067}, + {IMX334_REG_TCLKTRAIL, 0x006f}, + {IMX334_REG_TCLKZERO, 0x1d7}, + {IMX334_REG_THSPREPARE, 0x006f}, + {IMX334_REG_THSZERO, 0x00cf}, + {IMX334_REG_THSTRAIL, 0x006f}, + {IMX334_REG_THSEXIT, 0x00b7}, + {IMX334_REG_TPLX, 0x005f}, }; =20 static const char * const imx334_test_pattern_menu[] =3D { @@ -426,18 +415,16 @@ static const int imx334_test_pattern_val[] =3D { IMX334_TP_COLOR_VBARS, }; =20 -static const struct imx334_reg raw10_framefmt_regs[] =3D { - {0x3050, 0x00}, - {0x319d, 0x00}, - {0x341c, 0xff}, - {0x341d, 0x01}, +static const struct cci_reg_sequence raw10_framefmt_regs[] =3D { + {IMX334_REG_ADBIT, 0x00}, + {IMX334_REG_MDBIT, 0x00}, + {IMX334_REG_ADBIT1, 0x01ff}, }; =20 -static const struct imx334_reg raw12_framefmt_regs[] =3D { - {0x3050, 0x01}, - {0x319d, 0x01}, - {0x341c, 0x47}, - {0x341d, 0x00}, +static const struct cci_reg_sequence raw12_framefmt_regs[] =3D { + {IMX334_REG_ADBIT, 0x01}, + {IMX334_REG_MDBIT, 0x01}, + {IMX334_REG_ADBIT1, 0x0047}, }; =20 static const u32 imx334_mbus_codes[] =3D { @@ -513,101 +500,6 @@ static inline struct imx334 *to_imx334(struct v4l2_su= bdev *subdev) return container_of(subdev, struct imx334, sd); } =20 -/** - * imx334_read_reg() - Read registers. - * @imx334: pointer to imx334 device - * @reg: register address - * @len: length of bytes to read. Max supported bytes is 4 - * @val: pointer to register value to be filled. - * - * Big endian register addresses with little endian values. - * - * Return: 0 if successful, error code otherwise. - */ -static int imx334_read_reg(struct imx334 *imx334, u16 reg, u32 len, u32 *v= al) -{ - struct i2c_client *client =3D v4l2_get_subdevdata(&imx334->sd); - struct i2c_msg msgs[2] =3D {0}; - u8 addr_buf[2] =3D {0}; - u8 data_buf[4] =3D {0}; - int ret; - - if (WARN_ON(len > 4)) - return -EINVAL; - - put_unaligned_be16(reg, addr_buf); - - /* Write register address */ - msgs[0].addr =3D client->addr; - msgs[0].flags =3D 0; - msgs[0].len =3D ARRAY_SIZE(addr_buf); - msgs[0].buf =3D addr_buf; - - /* Read data from register */ - msgs[1].addr =3D client->addr; - msgs[1].flags =3D I2C_M_RD; - msgs[1].len =3D len; - msgs[1].buf =3D data_buf; - - ret =3D i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret !=3D ARRAY_SIZE(msgs)) - return -EIO; - - *val =3D get_unaligned_le32(data_buf); - - return 0; -} - -/** - * imx334_write_reg() - Write register - * @imx334: pointer to imx334 device - * @reg: register address - * @len: length of bytes. Max supported bytes is 4 - * @val: register value - * - * Big endian register addresses with little endian values. - * - * Return: 0 if successful, error code otherwise. - */ -static int imx334_write_reg(struct imx334 *imx334, u16 reg, u32 len, u32 v= al) -{ - struct i2c_client *client =3D v4l2_get_subdevdata(&imx334->sd); - u8 buf[6] =3D {0}; - - if (WARN_ON(len > 4)) - return -EINVAL; - - put_unaligned_be16(reg, buf); - put_unaligned_le32(val, buf + 2); - if (i2c_master_send(client, buf, len + 2) !=3D len + 2) - return -EIO; - - return 0; -} - -/** - * imx334_write_regs() - Write a list of registers - * @imx334: pointer to imx334 device - * @regs: list of registers to be written - * @len: length of registers array - * - * Return: 0 if successful, error code otherwise. - */ -static int imx334_write_regs(struct imx334 *imx334, - const struct imx334_reg *regs, u32 len) -{ - unsigned int i; - int ret; - - for (i =3D 0; i < len; i++) { - ret =3D imx334_write_reg(imx334, regs[i].address, 1, regs[i].val); - if (ret) - return ret; - } - - return 0; -} - /** * imx334_update_controls() - Update control ranges based on streaming mode * @imx334: pointer to imx334 device @@ -653,7 +545,7 @@ static int imx334_update_controls(struct imx334 *imx334, static int imx334_update_exp_gain(struct imx334 *imx334, u32 exposure, u32= gain) { u32 lpfr, shutter; - int ret; + int ret, ret_hold; =20 lpfr =3D imx334->vblank + imx334->cur_mode->height; shutter =3D lpfr - exposure; @@ -661,22 +553,14 @@ static int imx334_update_exp_gain(struct imx334 *imx3= 34, u32 exposure, u32 gain) dev_dbg(imx334->dev, "Set long exp %u analog gain %u sh0 %u lpfr %u\n", exposure, gain, shutter, lpfr); =20 - ret =3D imx334_write_reg(imx334, IMX334_REG_HOLD, 1, 1); - if (ret) - return ret; - - ret =3D imx334_write_reg(imx334, IMX334_REG_LPFR, 3, lpfr); - if (ret) - goto error_release_group_hold; - - ret =3D imx334_write_reg(imx334, IMX334_REG_SHUTTER, 3, shutter); - if (ret) - goto error_release_group_hold; - - ret =3D imx334_write_reg(imx334, IMX334_REG_AGAIN, 1, gain); + cci_write(imx334->cci, IMX334_REG_HOLD, 1, &ret); + cci_write(imx334->cci, IMX334_REG_VMAX, lpfr, &ret); + cci_write(imx334->cci, IMX334_REG_SHUTTER, shutter, &ret); + cci_write(imx334->cci, IMX334_REG_AGAIN, gain, &ret); =20 -error_release_group_hold: - imx334_write_reg(imx334, IMX334_REG_HOLD, 1, 0); + ret_hold =3D cci_write(imx334->cci, IMX334_REG_HOLD, 0, NULL); + if (ret_hold) + return ret_hold; =20 return ret; } @@ -740,21 +624,21 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) break; case V4L2_CID_TEST_PATTERN: if (ctrl->val) { - imx334_write_reg(imx334, IMX334_TP_CLK_EN, 1, - IMX334_TP_CLK_EN_VAL); - imx334_write_reg(imx334, IMX334_DIG_CLP_MODE, 1, 0x0); - imx334_write_reg(imx334, IMX334_TPG_COLORW, 1, - IMX334_TPG_COLORW_120P); - imx334_write_reg(imx334, IMX334_REG_TP, 1, - imx334_test_pattern_val[ctrl->val]); - imx334_write_reg(imx334, IMX334_TPG_EN_DOUT, 1, - IMX334_TP_ENABLE); + cci_write(imx334->cci, IMX334_TP_CLK_EN, + IMX334_TP_CLK_EN_VAL, NULL); + cci_write(imx334->cci, IMX334_DIG_CLP_MODE, 0x0, NULL); + cci_write(imx334->cci, IMX334_TPG_COLORW, + IMX334_TPG_COLORW_120P, NULL); + cci_write(imx334->cci, IMX334_REG_TP, + imx334_test_pattern_val[ctrl->val], NULL); + cci_write(imx334->cci, IMX334_TPG_EN_DOUT, + IMX334_TP_ENABLE, NULL); } else { - imx334_write_reg(imx334, IMX334_DIG_CLP_MODE, 1, 0x1); - imx334_write_reg(imx334, IMX334_TP_CLK_EN, 1, - IMX334_TP_CLK_DIS_VAL); - imx334_write_reg(imx334, IMX334_TPG_EN_DOUT, 1, - IMX334_TP_DISABLE); + cci_write(imx334->cci, IMX334_DIG_CLP_MODE, 0x1, NULL); + cci_write(imx334->cci, IMX334_TP_CLK_EN, + IMX334_TP_CLK_DIS_VAL, NULL); + cci_write(imx334->cci, IMX334_TPG_EN_DOUT, + IMX334_TP_DISABLE, NULL); } ret =3D 0; break; @@ -961,12 +845,13 @@ static int imx334_set_framefmt(struct imx334 *imx334) { switch (imx334->cur_code) { case MEDIA_BUS_FMT_SRGGB10_1X10: - return imx334_write_regs(imx334, raw10_framefmt_regs, - ARRAY_SIZE(raw10_framefmt_regs)); + return cci_multi_reg_write(imx334->cci, raw10_framefmt_regs, + ARRAY_SIZE(raw10_framefmt_regs), NULL); + =20 case MEDIA_BUS_FMT_SRGGB12_1X12: - return imx334_write_regs(imx334, raw12_framefmt_regs, - ARRAY_SIZE(raw12_framefmt_regs)); + return cci_multi_reg_write(imx334->cci, raw12_framefmt_regs, + ARRAY_SIZE(raw12_framefmt_regs), NULL); } =20 return -EINVAL; @@ -983,8 +868,8 @@ static int imx334_start_streaming(struct imx334 *imx334) const struct imx334_reg_list *reg_list; int ret; =20 - ret =3D imx334_write_regs(imx334, common_mode_regs, - ARRAY_SIZE(common_mode_regs)); + ret =3D cci_multi_reg_write(imx334->cci, common_mode_regs, + ARRAY_SIZE(common_mode_regs), NULL); if (ret) { dev_err(imx334->dev, "fail to write common registers\n"); return ret; @@ -992,8 +877,8 @@ static int imx334_start_streaming(struct imx334 *imx334) =20 /* Write sensor mode registers */ reg_list =3D &imx334->cur_mode->reg_list; - ret =3D imx334_write_regs(imx334, reg_list->regs, - reg_list->num_of_regs); + ret =3D cci_multi_reg_write(imx334->cci, reg_list->regs, + reg_list->num_of_regs, NULL); if (ret) { dev_err(imx334->dev, "fail to write initial registers\n"); return ret; @@ -1014,8 +899,8 @@ static int imx334_start_streaming(struct imx334 *imx33= 4) } =20 /* Start streaming */ - ret =3D imx334_write_reg(imx334, IMX334_REG_MODE_SELECT, - 1, IMX334_MODE_STREAMING); + ret =3D cci_write(imx334->cci, IMX334_REG_MODE_SELECT, + IMX334_MODE_STREAMING, NULL); if (ret) { dev_err(imx334->dev, "fail to start streaming\n"); return ret; @@ -1032,8 +917,8 @@ static int imx334_start_streaming(struct imx334 *imx33= 4) */ static int imx334_stop_streaming(struct imx334 *imx334) { - return imx334_write_reg(imx334, IMX334_REG_MODE_SELECT, - 1, IMX334_MODE_STANDBY); + return cci_write(imx334->cci, IMX334_REG_MODE_SELECT, + IMX334_MODE_STANDBY, NULL); } =20 /** @@ -1084,14 +969,14 @@ static int imx334_set_stream(struct v4l2_subdev *sd,= int enable) static int imx334_detect(struct imx334 *imx334) { int ret; - u32 val; + u64 val; =20 - ret =3D imx334_read_reg(imx334, IMX334_REG_ID, 2, &val); + ret =3D cci_read(imx334->cci, IMX334_REG_ID, &val, NULL); if (ret) return ret; =20 if (val !=3D IMX334_ID) { - dev_err(imx334->dev, "chip id mismatch: %x!=3D%x\n", + dev_err(imx334->dev, "chip id mismatch: %x!=3D%llx\n", IMX334_ID, val); return -ENXIO; } @@ -1339,6 +1224,11 @@ static int imx334_probe(struct i2c_client *client) return -ENOMEM; =20 imx334->dev =3D &client->dev; + imx334->cci =3D devm_cci_regmap_init_i2c(client, 16); + if (IS_ERR(imx334->cci)) { + dev_err(imx334->dev, "Unable to initialize I2C\n"); + return -ENODEV; + } =20 /* Initialize subdev */ v4l2_i2c_subdev_init(&imx334->sd, client, &imx334_subdev_ops); --=20 2.34.1 From nobody Mon Feb 9 08:12:19 2026 Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021092.outbound.protection.outlook.com [40.107.51.92]) (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 40A3E1D79B8; Mon, 10 Mar 2025 07:20:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.51.92 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591220; cv=fail; b=Y/AyccwIBYhscS8A5qJA9rAiNZjo4BTy48P2m2YMcnwbARg8KLFOr4AoaQOwWqYq2dLLMgmFG+mK1v/5yEWdGDe7E+oBixObQEH0u4HfxozjSYHLEvZrSJnb/ORJdE0FkS78C1hM7o6rdQneupsh4vkuQaHN4bXa2qEE7dEbGXc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591220; c=relaxed/simple; bh=qxSDoGR4K65y3pSaLQihAzYHsJTCKMzw5SUuG85A0Aw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=s2grXUD5pNwQ/OjO5Y3bFiQbMHppoTrcEhyA+7P228TeG6Kb0fcrhJrUadL1YjzBFCj3RjatBYuEzy5ttzz65lKcvFz1w2CG2/CEALCO69X19ufHpJDReGoPBBlV94HM6/Sjb4ojsG8X7QVU+k9+DvawOm+G5QaD5fZDIZyA3CM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io; spf=pass smtp.mailfrom=siliconsignals.io; arc=fail smtp.client-ip=40.107.51.92 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=siliconsignals.io ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nKf0g/CWhzmKWhyFCqw6vjGwvyB/G1YyTzP1sRCRc4Yj2N0OJYMBVAIlIezK3dwdD63qRSzz02HXyhNDcJdD68aNYl9BKx6RM7MspyQMZ1r6fqKLw9D/de85FWNtc+rk+DhH2djCDs9ouDp6ry02DtdSdRMtPT/aIJT0p8FeY0MCc+nEigGx/6v3xy5Ci+fiPTX6KovrpH0UivsiaXQh2z0Tg4zEsew270N/k/VSA7BPTQokCmdXmc0rcdhaHo4fFGBHDPHZwcWP+/cLg+FZoRb+BK90yhlxrMqQyrWV1OgGrasx4WsFCRnDGrRntrwuVZyofVGkOsgBaCaEbV5qBQ== 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=SWxONxZB8oT3Ra4WOOOcRYTtxnxRR6sDGO+cu+Kk8mM=; b=qw7lmr4ZzEtRGZ9+kGor87cNpVi+0R6axF7l+2XugSbHknEO5plr2UPH44+au/5RgLybz4Sf/9vNu0aHAF2qGYMl8ktfyLHmvbeaLXCHnakY7QhsmOb93rstdkSC8J4glKMnCtaF3+XhjY1A8STCMZuRu3FLO9emUbUhsQRyhZB9GjTubLV2WIg6YdAZbdLtvaBevXh+LOZ7ciOmZdmLp4HrhH0A3oO0wddSSr9Zh/5CwoXsMjXS9TtQRjTxKSVriemQW8R29HkQpDV7qKl4rJhhyG/wRdavgwxYa1YtjFnga1PsWSYtE0ngFWCUoPBA6Ph6YgHCVouRvC4mbjJ1Yw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siliconsignals.io; dmarc=pass action=none header.from=siliconsignals.io; dkim=pass header.d=siliconsignals.io; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siliconsignals.io; Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) by PN2P287MB1311.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:1ad::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.26; Mon, 10 Mar 2025 07:20:10 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%3]) with mapi id 15.20.8511.025; Mon, 10 Mar 2025 07:20:10 +0000 From: Tarang Raval To: sakari.ailus@linux.intel.com, kieran.bingham@ideasonboard.com Cc: Shravan.Chippa@microchip.com, Tarang Raval , Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Julien Massot , Umang Jain , Zhi Mao , Luis Garcia , Mikhail Rudenko , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/6] media: i2c: imx334: Remove redundant register entries Date: Mon, 10 Mar 2025 12:47:45 +0530 Message-Id: <20250310071751.151382-4-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250310071751.151382-1-tarang.raval@siliconsignals.io> References: <20250310071751.151382-1-tarang.raval@siliconsignals.io> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN3PEPF00000180.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c04::50) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) 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: PN3P287MB1829:EE_|PN2P287MB1311:EE_ X-MS-Office365-Filtering-Correlation-Id: 239a4e1e-b80d-42d5-3f61-08dd5fa3fddf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1KjiJ0fYDMou/pfIYXmOCq3dybuaBUIXn/xrV3zfpjqHkhW2nDwUb+IVygGc?= =?us-ascii?Q?WdehS9icsNYS0bqhNqBvDk9FSACPX9eAgRtEOuv/4C+wZVP/A5DfIJz8NYZx?= =?us-ascii?Q?pxAzLR5Uv8C6seLyL9Qkr2l8N4w/J3Z8v3vR5O/Gxu/XJuyBsTRy9npgmEUo?= =?us-ascii?Q?3I5NozKJFxYmqQi1Ag2JOo5xyXFZQ1W8MKdMsUvl2HkE3J0Qow+IZkYetoYH?= =?us-ascii?Q?8UphCeVzqXQNkgHl0uXNCY6w6mLVligZ/kqoj6Fvhvcx4o4sRDu/qa308Fik?= =?us-ascii?Q?13YWUS8eeA86b/yLRquvhzzrug1v6iPZlSi2TuFDb5N8+PB+wHZ8ar8GrCsY?= =?us-ascii?Q?MbX1YCDrzfe6AE9PDFOYJtOwxxz/PMIb7fp7WYnyp+ohXlh1ggqnQr5GYwIK?= =?us-ascii?Q?ctZaqjmAKtIUMY6KfrS526wVCICb1iuiaib59lZ1EsFR3ut2aqs72FSIVfVt?= =?us-ascii?Q?21Xmif94QGGx1TIxkruX4JDxCWIWCD9sMSD9ZBsAwO7ERPQtFjydcS5bukil?= =?us-ascii?Q?uhMzznSSLrKEc0Nw9d3rGuQu3yIv76GVk0NVrLZSpHBwSjxHOGOyV7TD410P?= =?us-ascii?Q?Yl/DuwZW8N8Ixyp9gveMLg3H4F7XeZAsJqb4SfIn7GnI0lQmmvfzCROoLFsj?= =?us-ascii?Q?2EQszGB8b496mA7qGdduOIHdS03xiCHTMOh54EphnJBX+YHP5ZwgwkxWiYWy?= =?us-ascii?Q?D8eT8v7vuVrnA8Q/WVGTjechAVETr2+nFHyMB/smXKaN8EQASeLDpThlqfuo?= =?us-ascii?Q?jKPDXq/9NBMsDfnNv55DQ86qwPtUEdZTXcfsFLqTDzW+6G7prA67tw1Fndh2?= =?us-ascii?Q?XwemRnetOiHgvTWL7WnfTYgQMtys9KpwBJ5q8aEgy9UFiqnLNA5P9X8qIhCf?= =?us-ascii?Q?kzfb5Uu8bcFNrzH0fXRldQro6grJoKOku+jVJ+FU8mzx92CzrGIURxFgsLil?= =?us-ascii?Q?e/+TR+M6w6R3MsJwcOYgdLmcoa2uSk0l72AJ6fb5HE+u09A9wwD1RMK1dU4L?= =?us-ascii?Q?Vzd3gSDbsxA2LvVTzTzgA+vix6kDr+McNbZSvcW2d5QZ4pT9xwWPckb4qfrX?= =?us-ascii?Q?oZuF/ZpYkZiK/SebrHmMtI8W3bs+FQXhVyX1qY7PHh7P2AFYArlUSt5C5yGF?= =?us-ascii?Q?uEg6fA1IT7a/gI2B3UWL+xUVAYufaL7+kQJGIrXcZUNkNJVJpXy+o4O3TF+R?= =?us-ascii?Q?QUFhcliXns/PP0Kms1P9tyYT3BcFEyC8V6BXW7gHLEn97HKZGVAuJSd3Jrzr?= =?us-ascii?Q?690VYZe2xF6lHsqUq7Ro1+qmH/ZaGVwsQMta9lDgQQm0mXCcX4KF3eG63EKq?= =?us-ascii?Q?xSIgWxUuC9sNtu53UIlj4b+Rj2WBZT8TskYiszkCX84QDmipSLyvWAU8iKRo?= =?us-ascii?Q?++HVq/nalV9y9NU5I+9i97eSu3qRV6o38WJopyNJE57KH8k4DegcI443yzND?= =?us-ascii?Q?y+YphU2lDpA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PN3P287MB1829.INDP287.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?k2nvlXxJgZZKMVZDCUrmygnnOuCvU3tIAMPCrTAT3aSOPz9opTsd5Abmc0E1?= =?us-ascii?Q?wOUqE77nbgLSRDXY2w7mHbgXzD6LmCamo//pLt59mNxi/1mRGrkQlXAmi77m?= =?us-ascii?Q?Cd9SvucmQnunWYG/rcxWQLnGmWklwj5fAjhUmO74AdNgOMJUahlBlj24sJ3y?= =?us-ascii?Q?uPHsYkD/LlxLmjatlxjmRAgDUR/M1lrb//9RUQM//cuXjedU6wAXukqwSIxR?= =?us-ascii?Q?Liv7mRD7Snwk4qQwu52/vtKTzzOVWwZC0nMSPWM3/sSIus2pMjuu+DRDU8k8?= =?us-ascii?Q?kksF2EqjiUN5R8LaTuAga2aWdZzS0Mjo2hoAnpzWjdLNfwjOduAvUfjjvENL?= =?us-ascii?Q?QRhhFkQYlmsyl2d7y+9fJyCQrqQHlL3WeijKPSqwHWDDAWy1Ok2SvNuGH1Y4?= =?us-ascii?Q?jR7EQloAwjdRefWT6erp9IPNC/rLYUgAn9RTwRCoa1Ww2kzoGHhCjkTuJGPp?= =?us-ascii?Q?UJ4tKsFaPyu8DN4sUO0TaoMzlogN7J8fjzm1BmvH9SXvEEKj0E4l4SdpNZ0U?= =?us-ascii?Q?Z3FQT0Y/JuQKJ7jd+SllDvyBu+U5EOI0wm8zlXGpTLSvbFCFNmZlnvoC4ZFR?= =?us-ascii?Q?mksDhUleghnLjRiQylyoCM9EFgEHSqdpLJb+7ndP+bRUEXEOk2VOwVipGHXz?= =?us-ascii?Q?JqgKTR3T0fX8KbsorDtrIw6Siauu4TeY4+RgY7o634yed20n+ChzVMfKNmiJ?= =?us-ascii?Q?Z+633NNahUR0lRmng1HEbajxxfc1ddULDoZEM9vRTD3vvhVVt261QinXDoP8?= =?us-ascii?Q?3tQzUPsGRYbG6lAOoJIT+2qnyMhpidUdEH53vDrvZQYNxC3U9jiAGXKdnlXe?= =?us-ascii?Q?Uy5SA8pBbi7Pkt2ZGHA2Vw6Q1rO7MCvEhZ9E38sr3IsnJhbnG7WHQjC3AYjB?= =?us-ascii?Q?k30mLH73BgTfCaOqVbSBY13CbkABukE0jd0naMRpR8mjWZPcMVRGF44rWK7P?= =?us-ascii?Q?/K/qe9jSQK85NCLPcVURXDjuDE2ora+XGVJCvMezfEylIxbNHApw7rtkzzFa?= =?us-ascii?Q?M9c3uxjBYCCwFfzqzVa52inJoqKTgraaQV/EWUj0d8VGJx66E/j99pCPEkWG?= =?us-ascii?Q?fe6yVdAQe+AzQPsJ7bjF9QUngtv3Zhpw0l9Z+rwg5qZd75CSRi1bIHxSvdMS?= =?us-ascii?Q?jsWp10KViOeFH7EYGSUY4LeETRW1KkCykiFsmoAbQ+Ui7chO/kQb9rm2eKUE?= =?us-ascii?Q?mozQrKtoUILKbZEof8m0+DGYm3SF+rMKjwE2rWmGUYK+hCCZTNa8IGbDzZyU?= =?us-ascii?Q?HTu3U16xxUgbG4KB057BTVJAQ1DZ5h/ek3dO/nTW0ktqzrlKooRsoF9KFthQ?= =?us-ascii?Q?61gOG3HFb6VxHVrIWoMqV/oVtXxoLdcVnYwgWSolDKUGuPgQsZdvNcSyaAwp?= =?us-ascii?Q?21KvQOoY61Ak8jdLcgg1op65Wh0d+c7xC3cmnblnKL7JmgYMdRLRNkqsbFjT?= =?us-ascii?Q?49Pe5Oo0GrqWoIF55Q1iGAIfy5tC6rOVd66y5fk16+0EOn8T+0BbPq55hiFu?= =?us-ascii?Q?P4Uw0plAbOugaR5k1wWU449hXz00LKCt9BaHk0Uu8WrvIOB0BRw2hT/WdLGA?= =?us-ascii?Q?Eyi7XsR+CpBmNO6P55Pi1qzGysKAoG5Js3UU5L5m16ISUAR9K1AWbiVXqjpe?= =?us-ascii?Q?xw=3D=3D?= X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 239a4e1e-b80d-42d5-3f61-08dd5fa3fddf X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2025 07:20:10.1092 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ec5089e-a433-4bd1-a638-82ee62e21d37 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nzZerQa3kTvuduuS1aJ6DPOPWsUlK8lhW1re81B3dwunKzYsXdDVHFSKWRL26XzAkxP5zntGGlYAwVtEBK/Hu+Qb5EcDcwdlzjVhCH+s69Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN2P287MB1311 Content-Type: text/plain; charset="utf-8" IMX334_REG_{ADBIT, MDBIT, ADBIT1}: Already written in imx334_set_framefmt function. IMX334_REG_THSPREPARE: Unnecessary repeated writes removed. CCI_REG8(0x3e04): Unnecessary repeated writes removed. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 1fed03494813..24ccfd1d0986 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -226,7 +226,6 @@ static const struct cci_reg_sequence common_mode_regs[]= =3D { { IMX334_REG_OPB_SIZE_V, 0x00}, { IMX334_REG_HREVERSE, 0x00}, { IMX334_REG_VREVERSE, 0x00}, - { IMX334_REG_ADBIT, 0x00}, { IMX334_REG_UNREAD_PARAM5, 0x0000}, { IMX334_REG_UNREAD_PARAM6, 0x0008}, { IMX334_REG_XVS_XHS_OUTSEL, 0x20}, @@ -239,19 +238,13 @@ static const struct cci_reg_sequence common_mode_regs= [] =3D { { IMX334_REG_INCKSEL4, 0x7e}, { IMX334_REG_SYS_MODE, 0x02}, { IMX334_REG_HADD_VADD, 0x00}, - { IMX334_REG_MDBIT, 0x00}, { IMX334_REG_VALID_EXPAND, 0x03}, { IMX334_REG_TCYCLE, 0x00}, - { IMX334_REG_ADBIT1, 0x01ff}, { IMX334_REG_LANEMODE, 0x03}, { IMX334_REG_TCLKPOST, 0x007f}, { IMX334_REG_TCLKPREPARE, 0x0037}, { IMX334_REG_TCLKTRAIL, 0x0037}, { IMX334_REG_TCLKZERO, 0xf7}, - { IMX334_REG_THSPREPARE, 0x003f}, - { IMX334_REG_THSPREPARE, 0x006f}, - { IMX334_REG_THSPREPARE, 0x003f}, - { IMX334_REG_THSPREPARE, 0x005f}, { IMX334_REG_THSPREPARE, 0x002f}, { CCI_REG8(0x3078), 0x02}, { CCI_REG8(0x3079), 0x00}, @@ -339,7 +332,6 @@ static const struct cci_reg_sequence common_mode_regs[]= =3D { { CCI_REG8(0x37b0), 0x37}, { CCI_REG8(0x3e04), 0x0e}, { IMX334_REG_AGAIN, 0x0050}, - { CCI_REG8(0x3e04), 0x0e}, { IMX334_REG_MASTER_MODE, 0x00}, }; =20 --=20 2.34.1 From nobody Mon Feb 9 08:12:19 2026 Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021092.outbound.protection.outlook.com [40.107.51.92]) (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 D63171DDC35; Mon, 10 Mar 2025 07:20:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.51.92 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591222; cv=fail; b=l7KEtUrXiAHKP4XI0ouFYxYQVa2RheQQYN3FviwCWTczrufJCeo8YeRNqC3e1gTEyp0Wp6RpHqk8PVb1al9gEhh8OzFVtstmgakfpPAAYmKxQ/uZy1r/DivPUTw3P3ezEQHuMWM3KaW66HsXDmeET6D9F1MWQBRt7hy5UIockmM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591222; c=relaxed/simple; bh=ewWxnjPNDBo3Ieghsw94WQ3xRvsJ0/TPoYNmTlt7+/k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ItS0VEv6HR/K7q6kUt66ffx/fY8IcMqovmXEvP3ShUAC2x17FoXAMInvX+4IeACO3jXo02m5BM9QFWeIoMIiXyicGjnDwwpL2fuk8zRkaX5BVp1QlvxZGKxX5tdNvEkIs768QCWns3vxgkPV3NcHC7FXLRlu+BgGkbHJikfjsOU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io; spf=pass smtp.mailfrom=siliconsignals.io; arc=fail smtp.client-ip=40.107.51.92 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=siliconsignals.io ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l2K89zDL3nvopUEtI1yBo+3YUHK52CUHtsBtk/SHImbHwgIBYWQpMpakZExD4/Vb5ayYym9fItN+pTTFjMjQj7u22WpgiwNB9+SwRqRFDwrWJqQSv4G93fg/E++cMi/KfDhoj/FRLWmgIIapmKG49zvAXsmm+hi5fOIPIgciZB1r8Y1bUrjz/cFQj9FNbAb/lZVIhyPKTKAA82ZFZnfebX1QiovYfEHiM9Njt1fIkAvIDyM4pGIott3wjBbVpt1Dc7Y7Ee82DIyZxJVQIwQGUiL/GhD0RqDzp3/UKh2KDohke/U98ZX994S3ADC8mWYkCwBJW45a7O6tSmThsKGi9w== 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=13AEPMgvU85jOuFrFuRPqX51b1bvxuHi/BqqRKrU3nk=; b=EHw3+jvg3n1LzmOJLHYxAgA3AcRPxBFigTFobvhDmc0nP6dYwBnRA+0dSEUsU4McIjjQIchKxU956btUQoawuI5c1VG3X12fJ9kbm6k0LBYEd4zy+EIxgG87kBcolvNpBvcguypDCKaZtt+SDk344ML+d5xXkBFMsNOnYvphre92GN6tnZtn1h+Jpvg4OggqnFy7ugHJaRVqksQsf+aYa2Q6OWcz70jyL6Fk/Z4ZT0NREUCDh1vzJ5borzOysS/Nv77iXYops+YvufK67Tf8wEA4Emr6qTOd0QSoJFRVYlQdmXGVzRHjcoJLFk7T4Dl0UMb66olz94H3eaQwraLltg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siliconsignals.io; dmarc=pass action=none header.from=siliconsignals.io; dkim=pass header.d=siliconsignals.io; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siliconsignals.io; Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) by PN2P287MB1311.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:1ad::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.26; Mon, 10 Mar 2025 07:20:15 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%3]) with mapi id 15.20.8511.025; Mon, 10 Mar 2025 07:20:14 +0000 From: Tarang Raval To: sakari.ailus@linux.intel.com, kieran.bingham@ideasonboard.com Cc: Shravan.Chippa@microchip.com, Tarang Raval , Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Umang Jain , Zhi Mao , Julien Massot , Luis Garcia , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/6] media: i2c: imx334: Support 4 or 8 lane operation modes Date: Mon, 10 Mar 2025 12:47:46 +0530 Message-Id: <20250310071751.151382-5-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250310071751.151382-1-tarang.raval@siliconsignals.io> References: <20250310071751.151382-1-tarang.raval@siliconsignals.io> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN3PEPF00000180.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c04::50) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) 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: PN3P287MB1829:EE_|PN2P287MB1311:EE_ X-MS-Office365-Filtering-Correlation-Id: ed5c95a7-0fcc-492b-9df8-08dd5fa400a9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?InXvaA0RNdbM7auvTSkCzUMjV/8UDz/juyNgiGgyA4nVIzDpkAVdJ+rltjlp?= =?us-ascii?Q?Jnij/a9GgGJoEWKtZoyyPZAZ/G+QWjBnJEgFlmjnhtyrhiyPY2WbkNX5mN3r?= =?us-ascii?Q?xyp3x+UTmrmtwtVF903vCsbZ0+G3kBxPEfOxNBezrAkdPcNNhBAN2wqM8/46?= =?us-ascii?Q?1AohjBFIRi5aZO4fwARnwRs7SXJmnvMFk0oqpdNNNtS9iG3x4/mMNZpeO3xd?= =?us-ascii?Q?1ru8g1A7CmJjfI2re4GW0p1FMEj4yuPcPKWKs4LhANVoPPw/g6OMBLwIb1dk?= =?us-ascii?Q?0f8T6V1C3wwKRTjO2/DoAkcz8ps5ZT2jGd3rOwlzUTxugsu7MGqgrxMmRF21?= =?us-ascii?Q?7nXfeIjSuAyNQtOW6wYRWmevWdLxNZrPpiPeZiQPlv8MhH8aAZj/Iu1ZxuVA?= =?us-ascii?Q?wDCMVfl+sBtVpIBvzrHe6O+UYjajVYSMtOMAiB618yUw0KiwLre8l4rrVgvR?= =?us-ascii?Q?TRSwloOcCnueKK7zsWO+PiFei8RdqDKtmLNIAvotDR6A6+aVtMraJffMzAC1?= =?us-ascii?Q?TA/sqJYGO6hZmgu5/ZwxBr3g8ztKJOHBsHecxbEIQ4nsvZTWyT8pabm2MRvN?= =?us-ascii?Q?/V2VhRselAOtuORC36+9lW+7m08NtOli2SGka5QI1xsnalseOcN/VIR8fakj?= =?us-ascii?Q?y4uTKiQH18yu+Ba+WOHQP2mbPpy5ElRJMKNBiYPEm14uUqKWNTB7iySmPQD/?= =?us-ascii?Q?l4Ejc6GYk17rjQXT0ECmcTTjtRG4bSz6EhrjfpsNsuZm8Llj/EQLFJEbtUDG?= =?us-ascii?Q?Z7Vo2JGcUSD3BJ2+YbUNVVukV9Da4+ERcs9XqT+BU8ISL1ciGJkz+oo1P1pl?= =?us-ascii?Q?nTVxqx7/ccoftcCxb4JQwgA67zubMHqvzWPlF0wGSca8aMTo49RChFP77mxA?= =?us-ascii?Q?qQhbkrwqaPh/GlsJXqPD1b596ZnnPcd8OcsJkmcrPeEYyRtbxUmhnzkDiY+B?= =?us-ascii?Q?e6hSU87l42X5Fy/yXm573qRQYtwtyJKhIe66PW0SCxdRf2eFg2aOdvczNQOo?= =?us-ascii?Q?IXzVKCtOerothyK5b/vKUMjnLfk7HmYWlDwEm7Rk2j0y2CEK+JC+HqY0VnM+?= =?us-ascii?Q?gS7/sd7tXylV5UkeroBLBmV/idyN1rW2O6sRx0qVXJgdUCJq1f0sILpi1zYn?= =?us-ascii?Q?Acx4e+pZtXtQNrgX8rDblyQrFh7NNg62ceBrOdP/xQfNMZq+Ayeqg5LsyKst?= =?us-ascii?Q?q9m/35XrC5P7Sc1EQkKhKYKaCmbcugIr7AEWJE5NFDtrgZwjNFsMxgkxGRQj?= =?us-ascii?Q?HDxve8BxNG3HWsdPvbiHoihWRWVNX3poRpwaTkFsFmVXbgX0QIE7cZY61tHp?= =?us-ascii?Q?UXPe2Q9rPhoriFjlq3WT/F+OnOxD6kY5qwGzlX2FOd6EeHVIKybECXBVzAql?= =?us-ascii?Q?Qf3YvNHIBECyTZe8D4EuuJb3zgChkOLkQW4gbz2GByY+kKEqNegyT6bdq9dS?= =?us-ascii?Q?FvrC8a6e2QM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PN3P287MB1829.INDP287.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?srrZ5Ur9jgJC0ppCkJ4QlKxESjyW500mQudmx2zPr7parC2et81ZHfhO+iIx?= =?us-ascii?Q?LKqdjlxO25Xqtm1qSibcQN9qwIOeg8bcyRwKJL6CvFy+e/Y/wHPhJTYQN9wU?= =?us-ascii?Q?3fKJKOVjVYeUE5wWSdrW+gLeS55QKVRb6rwIRsA0UvP5OY790uvBkqw6kS76?= =?us-ascii?Q?ykZVtPhRzo+FxKalINI3Wyz8YaQbyQBcB7BfkLxHMtBfCWDgUJNlaOysyY5y?= =?us-ascii?Q?qN9K8iX4ClUoOy99blxsc0N1EldP6ssMTHYqzzEZaGUO1AzWJDC1Ad+H9qZG?= =?us-ascii?Q?UnrJZBxwnlhKascoR0Yj2NmW2EmbltmacyS/MR5r4CccAUwztkoq63j1c1wZ?= =?us-ascii?Q?UffnDnQ6cf7yTE0vSxRvLNtP+BWoLjtGY5d5X7rnENhTUw91M93P4ghs9CQr?= =?us-ascii?Q?xI6Se91oB33MG7eAeCCr42an4FjZfz0b3R7NXaJz04z5TyQP9lp+x8AdtLZV?= =?us-ascii?Q?04PUQV9SorQ3IBioAzlPZKw+Ae1EuezCbmV+cGAVAAMK2Ega05Esinpp/f/P?= =?us-ascii?Q?5Se8Dd+weTn98Ts/UNbBGNQBBt5vTs9rTSccAzQNCe6c/nuAUTMhinyyWLyX?= =?us-ascii?Q?ETUjtwJ53eww2Ry+Io4Mcnr7uL6GWVHb/JOXbbTadDH6ARq0Tzf1Ks1tC36j?= =?us-ascii?Q?MGAHP1lafL+PBNGCRCCIpjput+Rao9vD9ZKSu5RCd3eAu5OjSNUP4fXu+8uz?= =?us-ascii?Q?KMze2jw4VdH+JRn+dn4XeI2owDcUjsYX7KgU0ONAZfFURJKgAkldSsr4GgbO?= =?us-ascii?Q?iICbsQ/+Nm6jaNU1hl1rZXd4PsNgkYhTt6JHupzjNn4B0NWDZVGPga3EwM5g?= =?us-ascii?Q?BfpCnsYtYWOvbzTZJs1Rv5RAcpbszU6qcB0Tm/Q62ehFa6L0u0maSuO8BrN8?= =?us-ascii?Q?ZSOqEFGu98mCC8s/2Px+i8ugQEJ7AvJLRe8jb0K9poFA161aWJLz0D4mQQAL?= =?us-ascii?Q?JT4EAmHqWpUdl0eo3BoALEJgwBwIkq2jbOJBxkUDb5iHYnRAGi2JUG/hNZt7?= =?us-ascii?Q?RhSfzokZXMbW1AWgtKmUcVfyGyTpThFUXHP+AhgbW7bLsx/ZREPreRKkfjyu?= =?us-ascii?Q?f6t1HzTdB91wLb4y6G1CgDSS0TMxaR7UBeCeJ106VCopd+Td862cg85Xnvd7?= =?us-ascii?Q?SMzLZvVSe9ImAyhlwE8UHZk94oGG8GhYQOtLkoiYxIKQnzluJ/n27sXTZbSW?= =?us-ascii?Q?ZhaULsbSFxtBcrv+CQikk8w5FPbg8wuE/n02lJye2/liwgkEaJqrLDfRrsQj?= =?us-ascii?Q?ktNOQrG197y/nd6c74Gxl+G9fJHrRoq18QbVPXrJ3QH7MS9uvOZ3xGrK2sZj?= =?us-ascii?Q?2mtCfkUBq+kbk9D59FgyhXx9rAiof54y86Qwaocy09tr0JxNjAtIqqkneRxi?= =?us-ascii?Q?dQDfvcXCm4jbj+DmD05c3HpIPZ3XiWkLq/dIgsntScoME3emfHd0ZVQP+whb?= =?us-ascii?Q?SBYI3U50HLbXkj/5+76weJFqXyQDA5djgn1LuPSywWnhsr38V4QtloaOPoo2?= =?us-ascii?Q?O27aTcsWRrUkQ7xRq97SFJjkwr17FosZrUTJI8T+zGKlGZtMHu4khP17oXV9?= =?us-ascii?Q?yejOBbSj+zbL68z28FuvugGEv6JBPOgy1kw/+J/RSIevtVxiPusDMhzVVro3?= =?us-ascii?Q?ew=3D=3D?= X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: ed5c95a7-0fcc-492b-9df8-08dd5fa400a9 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2025 07:20:14.8322 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ec5089e-a433-4bd1-a638-82ee62e21d37 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0djX3dcu8369z0bhMEiYV2cwjk2mQzistrXpdrF4n8efkmEUmKgUA05OCxY9gJgnIWQWgItUTrg1TmUSgMd6u8ZAMh08/DteQ05ZjRG3+gA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN2P287MB1311 Content-Type: text/plain; charset="utf-8" imx334 can support both 4 and 8 lane configurations. Extend the driver to configure the lane mode accordingly. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 24ccfd1d0986..23bfc64969cc 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -47,6 +47,8 @@ #define IMX334_EXPOSURE_DEFAULT 0x0648 =20 #define IMX334_REG_LANEMODE CCI_REG8(0x3a01) +#define IMX334_CSI_4_LANE_MODE 3 +#define IMX334_CSI_8_LANE_MODE 7 =20 /* Window cropping Settings */ #define IMX334_REG_AREA3_ST_ADR_1 CCI_REG16_LE(0x3074) @@ -107,7 +109,6 @@ /* CSI2 HW configuration */ #define IMX334_LINK_FREQ_891M 891000000 #define IMX334_LINK_FREQ_445M 445500000 -#define IMX334_NUM_DATA_LANES 4 =20 #define IMX334_REG_MIN 0x00 #define IMX334_REG_MAX 0xfffff @@ -181,6 +182,7 @@ struct imx334_mode { * @exp_ctrl: Pointer to exposure control * @again_ctrl: Pointer to analog gain control * @vblank: Vertical blanking in lines + * @lane_mode: Mode for number of connected data lanes * @cur_mode: Pointer to current selected sensor mode * @mutex: Mutex for serializing sensor controls * @link_freq_bitmap: Menu bitmap for link_freq_ctrl @@ -204,6 +206,7 @@ struct imx334 { struct v4l2_ctrl *again_ctrl; }; u32 vblank; + u32 lane_mode; const struct imx334_mode *cur_mode; struct mutex mutex; unsigned long link_freq_bitmap; @@ -240,7 +243,6 @@ static const struct cci_reg_sequence common_mode_regs[]= =3D { { IMX334_REG_HADD_VADD, 0x00}, { IMX334_REG_VALID_EXPAND, 0x03}, { IMX334_REG_TCYCLE, 0x00}, - { IMX334_REG_LANEMODE, 0x03}, { IMX334_REG_TCLKPOST, 0x007f}, { IMX334_REG_TCLKPREPARE, 0x0037}, { IMX334_REG_TCLKTRAIL, 0x0037}, @@ -876,6 +878,13 @@ static int imx334_start_streaming(struct imx334 *imx33= 4) return ret; } =20 + ret =3D cci_write(imx334->cci, IMX334_REG_LANEMODE, + imx334->lane_mode, NULL); + if (ret) { + dev_err(imx334->dev, "failed to configure lanes\n"); + return ret; + } + ret =3D imx334_set_framefmt(imx334); if (ret) { dev_err(imx334->dev, "%s failed to set frame format: %d\n", @@ -1022,7 +1031,14 @@ static int imx334_parse_hw_config(struct imx334 *imx= 334) if (ret) return ret; =20 - if (bus_cfg.bus.mipi_csi2.num_data_lanes !=3D IMX334_NUM_DATA_LANES) { + switch (bus_cfg.bus.mipi_csi2.num_data_lanes) { + case 4: + imx334->lane_mode =3D IMX334_CSI_4_LANE_MODE; + break; + case 8: + imx334->lane_mode =3D IMX334_CSI_8_LANE_MODE; + break; + default: dev_err(imx334->dev, "number of CSI2 data lanes %d is not supported\n", bus_cfg.bus.mipi_csi2.num_data_lanes); --=20 2.34.1 From nobody Mon Feb 9 08:12:19 2026 Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021092.outbound.protection.outlook.com [40.107.51.92]) (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 C9F691DE3A9; Mon, 10 Mar 2025 07:20:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.51.92 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591224; cv=fail; b=EJIpRLLuSR0b9lyrUd+EL8W5/jVkWEOtbyNkiwF6PWf6bBsXbV73ttuDhab//4p1NcHS3QGnjXXb4rvvyRrEXL5UcORkTzLvk8DqL+MG6haGjcc/Y+PVvsf/qfJ37Klh5rfX5PyY8WLJ0zrguyCPMWcys2TTXtQXt9fBUEd/S2Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591224; c=relaxed/simple; bh=o7lOocXLfGqu1u5vaQ3XgBZFi+1z3tXXNoToA84ZN18=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=U2V/knCFTPvUi0kmYXWjENBpMJ0rF043er9V90s7FaSK2OhmTvuNYeMTkVNzm10TzQEQsvYHPvnBxKscNqSmtjJI6HCPJrrCBuGiN7NXW6q/mccXCls9WQv6xoYa5pcT5tdRDXSzVA1oYGGtaoASmYE5AZM8G9072L3P/ouHh5U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io; spf=pass smtp.mailfrom=siliconsignals.io; arc=fail smtp.client-ip=40.107.51.92 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=siliconsignals.io ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NP9QxYvV15CX7IqSVA5uiHIcKiw3AL6YKUQaDkitk45YFDtydJQ1NavlsCyEKqVIEj5WKIA4D4RVSLYtYlmW/pc/40LRH69ifkEy2rOhWMxTk9Y2P1dk/q/R+fMknNcgw3bRuYEqhfQ5Dj7lm/chQY+jtK4kRldXcTVZX+zE8upO9JAfKVJQmwo5VLMiSKd49awH1tTr19ys5WbEYZ8x/9It99odCgRDqbb54NL9zZ9TpKcakSDRw94pKl0ABtCGk7AyAWAhGHPtj0aFtUE8aT2skvLMVl0pckD5SaCyPbJ78kYGDdUe69215TaYG+F/K/jWdGET1L4dkgjJ+1fZYQ== 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=dZKD1bnhmmeE2dTNjLRyUoxO/owlN39Mraj6KX2bIzI=; b=huX09r3C3m1FziLAkpEAFyWQYKO/tPWBWdgd5DUGCdxVbYD1w473YiaRSygV+xu/m4QQUYMsBYM2yiHZlAn7j7JQBV3tiRE+Uu766jbxzfvUgXQnObSmQBLf37sDuadWT3k2WHvXYHlQiPtR/Y4v0WPA8A9hjVPZLam693FgEe+g0A1I0+WWkc8yXKWbafKQ9wTf21dwQZoUQfyV5j703GAeff7NposMUP2SLHh2TcauSswvuL7hdHbNZbb/fcamGswR0EBYgCso37ae+DLpecNoedu1yTiBkNcil4yQYp2YGpAFCk0DpX3wvB19a9z+gUwnwsBJeRSq5FCHN/M7kA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siliconsignals.io; dmarc=pass action=none header.from=siliconsignals.io; dkim=pass header.d=siliconsignals.io; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siliconsignals.io; Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) by PN2P287MB1311.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:1ad::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.26; Mon, 10 Mar 2025 07:20:20 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%3]) with mapi id 15.20.8511.025; Mon, 10 Mar 2025 07:20:19 +0000 From: Tarang Raval To: sakari.ailus@linux.intel.com, kieran.bingham@ideasonboard.com Cc: Shravan.Chippa@microchip.com, Tarang Raval , Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Umang Jain , Zhi Mao , Julien Massot , Mikhail Rudenko , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/6] media: i2c: imx334: Fix power management and control handling Date: Mon, 10 Mar 2025 12:47:47 +0530 Message-Id: <20250310071751.151382-6-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250310071751.151382-1-tarang.raval@siliconsignals.io> References: <20250310071751.151382-1-tarang.raval@siliconsignals.io> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN3PEPF00000180.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c04::50) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) 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: PN3P287MB1829:EE_|PN2P287MB1311:EE_ X-MS-Office365-Filtering-Correlation-Id: 4405c7b4-5bef-4fd3-c120-08dd5fa40399 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Y/bnhquloFYexjNOh8ZIJSxy0s7H+D+WWNyhrkf45v2Znvqo1bFEc/ZFKZE2?= =?us-ascii?Q?Z/yhJKO6p+QqgJFG+SE4rAIQ+Wvcdg1JvkD/rbsNUbRNoC+4i4KKXpkg+U0o?= =?us-ascii?Q?xrgCcmMQnxzvHaK87Ja9WQItkUgVfAVw6zhKesXKTdRiGcD1ZikXXz6/XSyB?= =?us-ascii?Q?xAPSOO62px7SL3d5dryJbOAvcSL9k0tMCtU04CdtCzFeJst+243TiqvZUFTE?= =?us-ascii?Q?0hsFDlHMuKXAyAb7T5vYXERCoAa02dy2vz68S1J0sLAhVHQAEqGGcvsFGHy+?= =?us-ascii?Q?qHlWpMPc7way4TJJ4jvRvQdcsM5v9sGBxnJyHTNebYlttrTcJ44PfNRY4gxG?= =?us-ascii?Q?rptKYKJUOeGHAKL92WN5A29UM044QgMaHH72I2y+QG181qTQTFcfI5P7/P2d?= =?us-ascii?Q?1K39QCien1HFfNJqALJRRwwgToD1MPynyZbJceHSQYgb/spLswr9Z+XBUmpo?= =?us-ascii?Q?9wXNCFPgNQK0WyvcGFMWHzqUJgxKb8eEbps+ehtaEcicAki14o960/CVOav0?= =?us-ascii?Q?kEc3fdRlBMHT19PrxsPDh28vGkwhpKI72GWB6TZmXL7d3hNKFmSlsGKRmDxx?= =?us-ascii?Q?JsrmERDK2XtqMIGT5+WymZXeW4PtwSA7RqSDtA515vqeRsgaS4UaP5RiovEG?= =?us-ascii?Q?2bwWPDHD7TGFW8uy6bLK3GjtNrvIiJbBhAkCsIELzSX/94iGdlpXKrjfF2VU?= =?us-ascii?Q?vJI2ZGes4cWE4LbYg20MmiIjg2BjiDbfzUm8M9qcXrx+l7lz3xdinCK2lFxN?= =?us-ascii?Q?dU2Mx21jcR71OZh3MjzsDtvRlRhsBg5Etx64r0oQZP73EsODu0KEb5PnHRFU?= =?us-ascii?Q?saDJo2UljKmWOZo8tgTOiGvufzjp/VolcKRuW11+fMiBh7cfoyNU57Z+WdKJ?= =?us-ascii?Q?/0v7B9CiIcvWOSuRXupyVLh2Sgbq+bQScoyO/jKPKPJBVfqxhITCTKaxFkM6?= =?us-ascii?Q?dgcx8OaMHyqapF3o5hafb5U4X4SIQa7gt0wWNNXCeilDsBiby0S21GHzN0xb?= =?us-ascii?Q?6eQRUjaMDRrPb0moux8yKYO97uXzc6QkplrbtbLgp2RwW+GWueYdLgj79jq/?= =?us-ascii?Q?093UWeVGSJaVWnyvzHEQz3shCSqDs9+ysNmJ8FplF0CQUuICu/zFNdmqRGtb?= =?us-ascii?Q?91gUpUl7Jz72czI6AFRb+2x2CXOdtUdmz97T9ckMerrQoR6iV1oynCLc8+k3?= =?us-ascii?Q?qK4qztIQfHaz5vDo5TbcnEFx+Bok+B2LdG+YbzE4QkKuCjF39jNInJ2yROov?= =?us-ascii?Q?0ru+oCbRZya78pFKPSjcSD6ammKRAPqnRJKYWKmRRNTSx45wjyvAOgxozYNf?= =?us-ascii?Q?ixGpjN2uWCCnMZe4+cWVOf5O0YLCyIAuaOyklvfczk8/5X30ggFKd8hOs5Op?= =?us-ascii?Q?YTNIZQxYkN7Mr5leLdokk0Mfgsy4Ty7mKaJMqNrpvxnBvMl7LvmUahiK5x8K?= =?us-ascii?Q?04leeLf1V73CVNbhpGMS2AxLd+FalB+1?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PN3P287MB1829.INDP287.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dvJq0a8WebXTiab9L339i82SeI97x3AmqLU7ULnBDEn+5wta0LE31VpEw8GS?= =?us-ascii?Q?nIISHxHhG8ShhBbfLvIZK+PGKaDBdhEpSxybzBhC4xbfLPsYDMYZwJj0N9NU?= =?us-ascii?Q?9IvrkHdEiPEhtZ8Xr2+VsRajmUjr+1II4IQmwb8TNTujERwt35Dckx6nytfL?= =?us-ascii?Q?Td4D/948/CymvEDa2gsE6Bg+rKJqB1VkJcNZB3TWQMnOmNACgUp3uatP0r4R?= =?us-ascii?Q?cg5C28wG/gjO5NQA2rCQA4yFfZ0zsoDDJtmSMRH8iZqZPVUBeMdkLToWF+C8?= =?us-ascii?Q?qIM+ZY0pDVoZDvd5jRHCY7Fgk9c8A7/sGnTGv/cvn7qHjHr6S4/3I64Dn26Q?= =?us-ascii?Q?YPIm1CVr7KCrsZfwve334c0dHuWsc58i7rUHyX9fL6zzTZmyb1mfmfOHXmjM?= =?us-ascii?Q?6wNnU8xQUtytR3QhYqpGvQeKxuRLX6bWuzmhh1DBbdkI9hKiuQWMOLhIA4hL?= =?us-ascii?Q?OxsRYQwhR4aMz9w6QLk3HpTZ29PuReYV1ujRAggfsD1CjOcdTcNZ53Tulo0V?= =?us-ascii?Q?nu81wiXd6DMaGe/2AiPurot7KcM+j/YzFJQHX5DnalIKZ/3MgiWhx1jtR88O?= =?us-ascii?Q?arhWBGT9TYulEuDkvHZWdQmKTs+5Kpyd7caUEExHVd0dVqqiAlBncNlyj/IZ?= =?us-ascii?Q?5+ugy0mXF5eeDCGZZUGCbA67C4YXCTVG5TyhWw5OZRnu2mGTgw4BVJyZDfuh?= =?us-ascii?Q?W6yjiazlrDQAyrpEt0MQRhHWIRzqDRkNV8Re5ON+MK4VCUj/bHyMJgqoTvJj?= =?us-ascii?Q?cNcdMgC5qz6KYyVrBP3zBge80Uth9i+tHEWjUdJQoLaem0BtkUUc/qU3PGJ+?= =?us-ascii?Q?EdBCv/H58OVv9EyLUL8e4CRvklBSTNmnb9KF8Fwp8FEbobNefQFi1WWXZaZH?= =?us-ascii?Q?dQ9+wF6KXDTHhEAsprym6T9kVt6dqQFe3VFJN+s0w/dB9sT45N36dq8ikNDW?= =?us-ascii?Q?kY+2vZNYciadaj7TqoEBCEBkPtufJdGf/aab1aMAXUUaOHREhErU0gY+Beeh?= =?us-ascii?Q?ybY4zODHIShYl3RAZZ3EavoLjbMZSaJ1R0L8yE3NvD8xjQ8HQtNB/No04g7V?= =?us-ascii?Q?S35kpkRwyYLWv7XbbcN9khM3nWLbBu/JkrCpBj3rV0Oa6fUh38RZAQHrLoOD?= =?us-ascii?Q?+9pILLGElGcCA2qlOM5yH5tqitXtTHXZlkr9rLP7syO65kpawOyYHd/rMeun?= =?us-ascii?Q?SDM8MrmEZXieTZOtsqJEA5KU/8hwwjOTjtVLsEmjIyBPHT1YfcbBvcG6Q0WM?= =?us-ascii?Q?H+bKa6jq4JVS2mjlDjrLxg7NdRgLVqBOhIo8wgN0Ja7ZGxVFDpnpEPPh2Eht?= =?us-ascii?Q?P4hk52yY1ETPwtZ5SXTgkvOwcbNqIguJoLNDrTn/lMqYtW8l/p/aWY+lryKF?= =?us-ascii?Q?j23lroZHEVwLZhdS4vzMC3r7d7qXviiLjc4ytM8j/oRb8XbMNYu7tT/eYQiW?= =?us-ascii?Q?4AOwKI5PBexavSRv+YxgoBneRAljinxSxepQ0y7AsF53/QptSVSZ3PCvHZ+E?= =?us-ascii?Q?bIJBc6xJpHTsJK6HfAiYkQHHnpIa3Fl9sh7Jbx1bHxWrsn1kA4Fez/l1dlBE?= =?us-ascii?Q?5UI25T+JAck581uresA1FvujWh62n44QV0jzi1mrqQ2b53sSKEiI6fgdyGKD?= =?us-ascii?Q?6Q=3D=3D?= X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 4405c7b4-5bef-4fd3-c120-08dd5fa40399 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2025 07:20:19.7208 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ec5089e-a433-4bd1-a638-82ee62e21d37 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AOx8xhTVYKrOVu4T6Q5SU1hJ0jFF7NmXOh/jIETk7D4F0F2vRsuID6JkJhlzdFQSZxOBDyFuF6hQAv7nkcUOWD0LBLgVqtQKD75amoEcbCE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN2P287MB1311 Content-Type: text/plain; charset="utf-8" Some controls may need the sensor to be powered on to update their values. Currently, only the exposure control does this. To ensure proper handling, the power-up sequence is moved outside the switch-case. Additionally, VBLANK control is now processed earlier so its changes can correctly affect other controls. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 23bfc64969cc..ffa39bb317f7 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -579,8 +579,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) u32 exposure; int ret; =20 - switch (ctrl->id) { - case V4L2_CID_VBLANK: + if (ctrl->id =3D=3D V4L2_CID_VBLANK) { imx334->vblank =3D imx334->vblank_ctrl->val; =20 dev_dbg(imx334->dev, "Received vblank %u, new lpfr %u\n", @@ -593,13 +592,24 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) imx334->cur_mode->height - IMX334_EXPOSURE_OFFSET, 1, IMX334_EXPOSURE_DEFAULT); + if (ret) + return ret; + } + + /* Set controls only if sensor is in power on state */ + if (!pm_runtime_get_if_in_use(imx334->dev)) + return 0; + + switch (ctrl->id) { + case V4L2_CID_VBLANK: + exposure =3D imx334->exp_ctrl->val; + analog_gain =3D imx334->again_ctrl->val; + + ret =3D imx334_update_exp_gain(imx334, exposure, analog_gain); + break; case V4L2_CID_EXPOSURE: =20 - /* Set controls only if sensor is in power on state */ - if (!pm_runtime_get_if_in_use(imx334->dev)) - return 0; - exposure =3D ctrl->val; analog_gain =3D imx334->again_ctrl->val; =20 @@ -608,8 +618,6 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) =20 ret =3D imx334_update_exp_gain(imx334, exposure, analog_gain); =20 - pm_runtime_put(imx334->dev); - break; case V4L2_CID_PIXEL_RATE: case V4L2_CID_LINK_FREQ: @@ -641,6 +649,8 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) ret =3D -EINVAL; } =20 + pm_runtime_put(imx334->dev); + return ret; } =20 --=20 2.34.1 From nobody Mon Feb 9 08:12:19 2026 Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020077.outbound.protection.outlook.com [52.101.225.77]) (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 5B87F1DA112; Mon, 10 Mar 2025 07:20:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.225.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591230; cv=fail; b=nMPXIRVZPqfZD6ZaclkH0qrvhnV3mR8B0FryrLdTuvEeeUps2bHqksn4GV5lDtpcN5N+lBXgHw5UVnv4uke+5ymET3nOKzy3Cgwr34F3imAPAl4xeP9y+ZYrE8+O6cziibbmfP28b74w87HTxh8nImYsV3RzYEv/km69YS0w5kI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741591230; c=relaxed/simple; bh=6SxpglWcPNuyxX/QFkioG/j9oodFdZhFE69fbxt679Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=uDVTwfesaWiLF+JS9z6Gg8lcsCn4by7Su+e+dlrU7Gfms3AXCc5VlObN0Cz6vUZQbD2S2Z8ay6DsZgqDsK+0Azu6E2o3MLZ9pypfOqZJPp1EcVJRaobhVnU3p8QNx/bZhGJnOUz/ITDnAOO/sUbbcEFSr8YbMbBB6sEGAD4uIVw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io; spf=pass smtp.mailfrom=siliconsignals.io; arc=fail smtp.client-ip=52.101.225.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=siliconsignals.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=siliconsignals.io ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I+DeoPPhEBW1FT57DVfJY7jnaBC8sYKgUJFOy3ykCl/JFqbDzDORoc3VTobNYsQmZdy0sVz5g7rY+mRjwQMCX9CGSZwNgfQWNJyNdIRhbHNekgdr2DMXVgis/r0FuLOyZjk582d+JRwu3gYX+vSob76FUvHgLR/1dIySTe4Yz/0/IXS3sc04QzMqZ7PGOmtTN/hDwNw3hhwMAmMjCQLxmoNJb3mhIQl8sakWPG2fXmDDE3Rss6KR6iCvdMwYQhZVh/nnPBFD4mFFAaEnZs+gOeMEVpmI5YVqWP+pPiu8w5mEgVxe7+2oykERP80cYhdvf8iGL5F0SANQoBNUgOG3gA== 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=QrgC84zkxbR5GaiRFxx7YIOSJhBTJKzWkZaCMU4ZlIw=; b=ECzDA1I0knzEay5Y2h/gNoJpMhTAoQVeTwVmtjITyH7cvt+fOrteORtVEoK2snAWT/jfKv+FoOH+zZYPJ4y9gX0eM4nLK1OPkzpAKBUzSXMZZtipMnju8y/oC+6E09cuFz8YDEjc1i+YIksPVtzbMqYXtXhnGDYzq9QQdQogtcmqFRHCm9kXXI7dI297kMrU4FRYoCSRT7UEEPk2hnrBTnBqQkwnam6Eo6+fNHNTDmihPHkfE9AYgSg9ZkDUvVnruNq819qru7EfUWJ6X00qy5SU741HXhnBbilSjPmHMQhDnMr48RX98h9I7A0efEwKfDQ5Y56V2lbahAaQhUlIag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siliconsignals.io; dmarc=pass action=none header.from=siliconsignals.io; dkim=pass header.d=siliconsignals.io; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siliconsignals.io; Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) by PN0P287MB1221.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:190::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Mon, 10 Mar 2025 07:20:25 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%3]) with mapi id 15.20.8511.025; Mon, 10 Mar 2025 07:20:24 +0000 From: Tarang Raval To: sakari.ailus@linux.intel.com, kieran.bingham@ideasonboard.com Cc: Shravan.Chippa@microchip.com, Tarang Raval , Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , AngeloGioacchino Del Regno , Julien Massot , Zhi Mao , Mikhail Rudenko , Benjamin Mugnier , Luis Garcia , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/6] media: i2c: imx334: Enable runtime PM before sub-device registration Date: Mon, 10 Mar 2025 12:47:48 +0530 Message-Id: <20250310071751.151382-7-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250310071751.151382-1-tarang.raval@siliconsignals.io> References: <20250310071751.151382-1-tarang.raval@siliconsignals.io> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN3PEPF00000180.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c04::50) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) 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: PN3P287MB1829:EE_|PN0P287MB1221:EE_ X-MS-Office365-Filtering-Correlation-Id: 17da0f82-6ab0-4ce6-277d-08dd5fa406b1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1nez9/KGkfwVjEI9fsex+soA8QMfUW9dX1k2OkvTZSiejNHZ+mV2jgMMCTwl?= =?us-ascii?Q?mf4vbZMxRyWoYG1iSw5Rf5NFSssOpuNSD+zwSKYKuJZQHASiugqr1JrgaThQ?= =?us-ascii?Q?LG/1JGJuqKPeJAbz8j2qf+PM4h+lJhlSNnTS8HE72KgU71A5JOKqQZNzQxIh?= =?us-ascii?Q?5bG8KcSJ2FyjeqcSFV/EKPmj0GrPFO88yh4jdVJrv7XQ+2lA9T97qIkG1ZVH?= =?us-ascii?Q?1AFUIgz3zwbprere0m2w4+/fDqhT/vJnZGqW/qAA9kh1YC/vQXq+YjjP+Y6f?= =?us-ascii?Q?W5LYg8rhhgG2j2y7j/E/Ruy3kA7+6lT20f7BsNPZQA5j7ewWjBtwjYlgCp3v?= =?us-ascii?Q?cid++yYRxWfJmQkE3qDFV/IORB6VkEMRdAL6ejsXJtsMcL7apURzmgz0dUg2?= =?us-ascii?Q?tAla93AA3Dgn3JSbZD0eB3q5pR7ybIKBtYEiXAK+OVrOtgYzcKIGqLb8xOpe?= =?us-ascii?Q?weYJYD3Sm/K8Vua/xU6uq83N3p6s6uiU10SXYt1VQLKERlQbDT0UrJnSS2MN?= =?us-ascii?Q?ExVIUBTtl4Nc5GeYifT24p9U8drG0yStbRUJT0Ogfo7sTcVal1GiHFWkB5Of?= =?us-ascii?Q?/iSp9+7d34QhMpxWDin1jV6rnupgRakgP+v2wzr960v/jSB9T7XO0JNLJRE/?= =?us-ascii?Q?Zca8Bxtg7Se63D9fBdQoBgdPP1EoBKXI6/Pe6cYWbR9prFboDAInmX8HtxhZ?= =?us-ascii?Q?dMKGIUTCigEKKoOBG0vZRHquGTPu2GPXoU89N7DWB3gWMAtEkwfycVBN9Q/X?= =?us-ascii?Q?WJbnkf4eOQpXUZHTPbahpd0F9MvDm2tEjlgP4u58yuvBCu5IpQSq6hzviswb?= =?us-ascii?Q?xioF577QnPkyZQEop9McJQtNU5fmeGoxgNe5FBMj0sE+4sKZczUSOhVEVnN8?= =?us-ascii?Q?eM77H1Qd39D/QGzWqYfjcLJgx9p70S9vfQ91O5CCXOsV0XAzPpgqnbtL0Ws1?= =?us-ascii?Q?yOpi28N4WzxyNKit2k0dqXDHcfzEtrsCdAkhg4COngwemfOQQsxv9mchK+gH?= =?us-ascii?Q?/43fjPAGhcBPDgPjPijEyChaDsnUn3NiYfDPGKoe9y23EqSCT7SKrDLy9Oh8?= =?us-ascii?Q?pLyNk+N/hSfVrR3rBGsBDm2KgBI548P88qA+XMrm6nvXfnPSzq3obR4v6MRy?= =?us-ascii?Q?PLj/uLrnS0VpyT7lCoe4O8O3B053rK92l94dcWt0mJSb4ov+Bz175QibnIZv?= =?us-ascii?Q?bwIeqF+MMjKNddJt7xP70aErepM5ZVsD6RS1JArh22MOWzCfIw+xDZAoHDDZ?= =?us-ascii?Q?4kT7SETfALsDRSj2gzyoAAB5IQtF4tEl4y0gm9DDzgw6IeG/S9kMywWsWo9t?= =?us-ascii?Q?HN4fsHCx34RazPxcqeZ1v3GSFr6lzbOtCMqGV+9hjv06OyS5s087YODNyMeW?= =?us-ascii?Q?3uPhPH2ePUDAHdohTHVTEkDd0Z1kxSsW6EPOYM18Cx3jW8aBUWJVjIWV7cUg?= =?us-ascii?Q?b1eAADcSZbptCHLiur1+lVEpyxrDJpX1?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PN3P287MB1829.INDP287.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XaFplv488EURpeUmCUbd/AEATjeZEQ3hlwvNAy2aKqkLGQ4/zCROgMLIrWY0?= =?us-ascii?Q?FGt4VohQ7/xK+bqFrIe9DCs4XUYi0XWSjUzWNwdTGCdm9bE+W7IOWZJX4CU7?= =?us-ascii?Q?rTU8xkkKP2raECHA0TxkUsl8Z+vWwKt3WfrU44QyO72CAZLq3doGebDhxZrl?= =?us-ascii?Q?p0unjFKBy9HWwgBQMhupvGLb8JwNN49mUs18QlhfM1oqL6DJWIs04ovpifk0?= =?us-ascii?Q?2VbQRjRi3wzEZPe1/a8Mp9bfjpepYvQFD7GqbwjHQX9Z9gkvdNj0BZ73Q5Qp?= =?us-ascii?Q?fr0t3xxZbNSWPplSkaQX4wBoS1GjFgddy3+8S2P1/4dGSMphu0xO4OdLVIEX?= =?us-ascii?Q?Y/DZ/AXH5N7APBdMaQBjZO7SeCI8nrg1CtO8lwT8Gm6b8vedzvLjZhTmCAZA?= =?us-ascii?Q?AMV7Wu9q2mdFvAVtIpZuT3j70nHh3mbS0JWuRzXulLpRFyYXbDGrJlN4+AZM?= =?us-ascii?Q?OIfUaEzTxAEy2QaCudP97Q+ziyEPNv22Ot4+LXZViIuTgcYGLAhrwzdmwk8T?= =?us-ascii?Q?O4D85KbH1CUemepU0Dq4hCzR/VLR45do90x55HZorJguXy3nQsuwZjDkoAU8?= =?us-ascii?Q?1RU0/2rZXtubPkt9GJmP88IxWi3jSX3TEwcjJ2IQ/dW5AXjNj5H2kjUhfNw2?= =?us-ascii?Q?AwN7/YDXWeKN+clGBZ1prsYUu8lALN/ChBRkqCFAiLPCjOPq07CbjzVBmt/n?= =?us-ascii?Q?WqSZ8NwLHHiBXv0/+LizPP8CQOMF/MtTjqb8bSVcYjTy4HOLJItIo4Zs+IG7?= =?us-ascii?Q?kvVFkiBio63dajyximYnlQUJOyh0K01L/nTrz3O2qkaaLlDWr2EMgoLAGv53?= =?us-ascii?Q?U1wn+ZJiLzAekZZogDGv2cSUOAPLL/l7aUT+7cutnKGt/NIkCOrfFjGD+Nsz?= =?us-ascii?Q?BbSeEpIS0r7j1wezHdqNektdhmeW9If4S1SQkmWUP4ivW4kn2gBZRzF2trMC?= =?us-ascii?Q?3FYT+5Bl3yQ+fjTG0OElBNedcHlRLOgapINNymTT30ysloX0GDRyUD84xj0K?= =?us-ascii?Q?5ZbMtbOoXjDbgaeoQzBzHuaMcurygmh89vQcyk+6xhsOVM7gF2BuhRRfBDil?= =?us-ascii?Q?B7UBfKzsma7WPic+1tf+F7pyPtjjLVKN9QQI6WY8wDytZ3SW4lfNSjcbeShz?= =?us-ascii?Q?k5Tzzeo5Bn0rMuFjxHPE+C7oA0ywD8zp0xeFu78iOUn4v9OOC+z8E5mHLwAK?= =?us-ascii?Q?aqli7UpUfHb8/nnTqPtLBMGGpupyXEUtb/oBzzxskGTupgrl/hQNA4PY+xeE?= =?us-ascii?Q?kVNtWVBzKkB2huFDBhJQ5tmDWveEy4tB2zp8ouVQj3kKPOTieBrIG+rYyOx6?= =?us-ascii?Q?VgWXoi52ljug4gtpeger4cZDsY1MoWLHYuzq3/I6UtMC1mpgi59We4h+xGmv?= =?us-ascii?Q?DAGwDFTHCs2sdHvlcFy61zBYPWsOn0/tuEA5DQ1xXHUEZ+uChUQ4KzYI7ejH?= =?us-ascii?Q?GTlESZG1HO4lqLsVXrXzBUet1bMzK3Vq8ztm8IZJdgtdrNOD4PsToJgIdWIJ?= =?us-ascii?Q?VvAt6S1XE7jHmlqIEsqhWOghC8DHJFWUTNU/QHPrpRKtp73g6asXH8DU/TCo?= =?us-ascii?Q?bNhUJQSS+cxTAdxZibf34Ex4/Afy4r6/FGDZwQW4DQR/6O05G06ZWFNyWuLp?= =?us-ascii?Q?jw=3D=3D?= X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 17da0f82-6ab0-4ce6-277d-08dd5fa406b1 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2025 07:20:24.8978 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ec5089e-a433-4bd1-a638-82ee62e21d37 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Q5OWenMrF4DRTag1d5X7kwREQlNvovBkvz10N38mOVa0RqXBIepLI0ca7VyuJ6IrLnhU5iul9LjnVRSQkby/49wVzLdTpTnk2jfAUIpOvq8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1221 Content-Type: text/plain; charset="utf-8" Runtime PM is fully initialized before calling v4l2_async_register_subdev_sensor(). Moving the runtime PM initialization earlier prevents potential access to an uninitialized or powered-down devic= e. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index ffa39bb317f7..8964d60324e2 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -1295,6 +1295,9 @@ static int imx334_probe(struct i2c_client *client) goto error_handler_free; } =20 + pm_runtime_set_active(imx334->dev); + pm_runtime_enable(imx334->dev); + ret =3D v4l2_async_register_subdev_sensor(&imx334->sd); if (ret < 0) { dev_err(imx334->dev, @@ -1302,8 +1305,6 @@ static int imx334_probe(struct i2c_client *client) goto error_media_entity; } =20 - pm_runtime_set_active(imx334->dev); - pm_runtime_enable(imx334->dev); pm_runtime_idle(imx334->dev); =20 return 0; --=20 2.34.1