From patchwork Sat Mar 29 05:43:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032574 Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021140.outbound.protection.outlook.com [40.107.57.140]) (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 1DFF317A2EB; Sat, 29 Mar 2025 05:45:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.57.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227118; cv=fail; b=RDfYmspNJ09o37KqdzlAWeCZ/YyEaW4oQPGnpcZcvcBZyIJkoDVvgIMx214EubJ9i/tFo4B+cUiQe/kZuRLy9jF27Rtrg5SgH8QmFaUXP2h30/4uDh6CBnsqTHGF0sWYWoLYOK4pqSjY1Q7N7jPsytUpn4uUmPdqoXLesk+miwM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227118; c=relaxed/simple; bh=s1GPMlOovNRVYsCTzswDj7ZglxioGOMSlitTdMKG2K8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=OKiu8AwCj8JMlmdeobD3uzrD5d0IE+OIdsjhOoDX7hTjYWA5x4e5tgiOspAE2ki44XEwugjnXPQQ0nJs8O0WcAbqtuJcFa9LXEBwNiBzvzrDc1yyG5pFDeqROeRUGKdAyp028bnTR8SDYfhBzw4Nv+nMFU0d5g/Zfr+obbhQ+y8= 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.57.140 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=qoUniVI2kFNMbCEwpEk3KgjRXQhJyq75Z5hs++/V1cmk4w4h1m3RLB2VFPxn66M3/cp40+HMtdFNkSYBbEHc97TSxEs0P3JS84VB0gvrVAUrnsyLTUWYaqC3Y0fPlJNdU9L7TQufz/ANR/f7P78wS+2JRUFNYLoyZJU8Z0bkXy2CBW0NthUPmifl7+LibHUcJPk70kQopcNLr+audZUDioRKdUDmp+8Gv6J+lRVRVwfkl9eWDTwgFfUToybgZk0BSpIjvM8s/axJYSkNcKV9KmKPfIkBtKnqYrEOXg1AuPXYNKaaMd7mQ2AQTBlyNhBJtasWC+FHUX/Mb256b+AQtw== 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=TOJJVhQhGpp0o6/OGI0WujTXXbfmWmCm4ckCKGoi5sxVJNRObvm5Uuc+yniFlNnNVWO3kPs2Z4O0ebQwmtsar8x+haQatQAu4rIXKHYUR9bBLYvCFYAfF63LRM7HarxQQ29E2Ggz7YGWnM+nKbqAELBUMvnkj7BruOeBerZ+wcwOv7XyOHumBulRYGFQPftrdHjSgEhIeRKiQmMUPBhws4pkLQw1Ah1ldIFAntz9JR+JYCyBKJRAKtS/tt8QbTZwWAhuy6Gh0GnoK5gS29R11rmjjYq6iVYqhYkfrr9F6rqLKBghhxwT8qrt0+fd0e3sJ9VvaDfMmX5GOHb8qcaa9A== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:13 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:13 +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 , Umang Jain , Zhi Mao , Julien Massot , Mikhail Rudenko , Kory Maincent , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/9] media: i2c: imx334: Simplify with dev_err_probe() Date: Sat, 29 Mar 2025 11:13:23 +0530 Message-Id: <20250329054335.19931-2-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: 74357300-29bd-439b-f349-08dd6e84dff9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: MuvLd0Q1nmM9oLB5JV25veovj4Gg/bGb2btM8pNndP7lfk5/gqB+ecpXJd/CdKxlIwIvitqnP99vqHBO4z9ksvihRehJ5ootJhskzyTER6+NUtdzIjU8zsl+T+MNVE6KXjC4VLKkW053uljvcq8YNeZqmHDgZCBqPL5wfKYiPReIA5VRrFaLGHwOf9WzWVGgIt7SSq/M0kPNtCzxv/v7gmzvkKENnD0xyCMuSMe9FNS+l3qWwpoHlntfz8UTmOd+pOA158h1cA9s+dVYFgx3ctbQSLbdaCSo0fl58o0Cy1ia5WyOzYgxziMePuoyXXcOSaYJiIEARWcjBmNpA9Oz2DqSnIOhIkZThiRIj1wKDo62dtCZRUrWBstegzrpt2dIpe2iW41kNcL7GMAohyHWH5ZjaeyMhvaXCPZlvvj6OS9mKgg99Q3HlxwzOaJkf5BumbdmauC986ekM6okc0YdrL9lymHBx4KbQz8vmpePbLfT0yuZ8YZBAd00xq7hSUpU9VdwPUhV5GmPPS8sxw2S6/2g3kTBbsEKVC30qrhVUQayKK0jZ5gPm23++iZBAWXpp/NkPuQHr8BhChfzUYZv50aiSIfhe5j2zZgDKANXeDhfiyE8IuldGfbWlW/s/Uck2zRDybflMS9LOjtvPjCdKcDVAXYxpx5YFK1em0d1S2ENKENoAeEORRhIZmZIWirhbToa364Zyf+MxdoVtVXdKKl+k8BunS+r9IDWEO0Ez5dGg4syXmg5LCo1JRfmsUozvHkx6vjHf300o5b3eg6aE3bUbMTgzR0NuN+yHmLOwU1LDOsjmo400eYR9jrMp8layQugKvbH3vEEoV8c7py7rmi6BNifPQu0lMWlo3/aqKXYYhXVRlmPPe1RgwJdLIGEwnF0r4DqO4S64RCgNS7/lShExiAW4C5xHBDcpY631g26SfpzqbnkOcsBshWbIiSzPsQxzy8KfAddwztVmYKaGGElbITNNQA/7BHFuImFhlYFYuAk3H0MxZuObEmKxiV/ZOxLgw56j9hFssXSDKtuRA1VYlNjzCbxcwYqxyAEeBpzBsStNQ4ZVvZpBlLRr6G4AgEtQUqPg/D05aYCbcG12WBjFp8c1Due1RLU6pg+fDfvjKWXppQ9hbVISUfnmo2mjE6pPq1I7AdwuIpMPQ0GnrIR3gpFnn6F2WXVZ8t9R6Tp7bLKHCLt1LL5D7Fl3fbIe6w2efHS5REiivpOwpH4a6mxeqGC4JOT0CNCerAyJ0GKokxi2K2MeK1dZ1lEP42nHLt/8pegj/HQwaKFMJPNdLdW0jkwNyzNihTc7vQr7MyS+ubn0wE8YZlHxrBi1XW9JQdB5WIsUdjGX9EN36S62ZOuRsQKzgQxmK4hCrlvEFx7SnuYIHCmuLrYIaJQAW8MHAPLH5+8H0F6UgWfPC9a2Wytj1XWJXG3XFMNHcxE5g4d6nzyBUQfpLlhoNjpnT5UWQBl7oZql1vOpjen4ObmDQ== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rCSkvkak8FQSi48jTzkP7C5D9+rqeWgvXhlUQp9e+E4OKqhHF/gu8x2dnFgNMJsntvQc0beqEGIDF1zWE2L59Big1lVa0gVEbv7wthQIBTM34GMbG3nLxERSdnYilWdNNe+aVtIrs/jJ7p1K0+T1p+kHHW7uZcbLwk2rCmXH3ak+T+iW2pOb1IkWLEX7Q3ZohquLVLnisVAKcY1rYCISBJI0jS0sv4Hj0gh5+mmaUGH9F8wHZhHNUxirpePOcTZ/GvG0m6NETdrOVYPkkKFSs0KosX9VbEGRXN4/cHGAxeOGlB4zuOuEYQ9yvcLR0jG3CAXZVsH74pGUE2uqDkv3bY4yUzr45GjEHvjJ9/1agdZN9gIZuODVsd7eSU2rrUs+QrIJhVc3cYzpJAG4Sx/+ckrbffQ9g6Q3Ai/vP98pW9xrQT0hhfKHFh8k+bppWOy0lSUrpEeetCeTkdlFIlLJw7ek1r0hgHbnZDQCdbx49+Wdr7LuXp5A6R5jZNSE0k/2mC22rZMYYFONCVJtASIRaeAbwr1TQghVZU2fhu/M+VoFQC8QizIT/UoGshPRYHIqsAG21LKe/b0GsqF+ujtbiYf4ZNQYBthRQg4KQSVXh1EvppISgrfKs9Aw7TqmKAci3TXo3qQJhZ8w8lxANvaJPJTiEAtOU3A5HwjQtiERP0Jj6k4LsKx1iwMYL+bYFskYQz5Ql5FZP6dU/2wx3SlN95YKFoIcYk5lWYOc3h3wOWEOExOnaEBqIOo81GalVD0yFPt+/EFiVjhBHcNrKXFqfngr7eOUXF3uO8cpl/Bl+KDevi4KOmIaHSEdUWzbOvrHyRbaWe6C7x8yG0zpTL5QCpOuHxFrkDiAo3e/gJFOqq7a83TNjVKLjZGrNfVh2rVbq8GZD3jppxdvLtjiAy3x9QgJnA9+udVhGopeVCzn7R0+X3KLn+9xXFMWZwJD7YcsL1XsDDl8NOZ00ppUuhLd/Kaot0neqffc6p24QRlCKUWsCV5ZGybi4rKclj3Uq1gfa4oCgv9hR7MGscO47byL6EEaDLMaw7gBbqqZF4zbo7ToJB8l0luWiyl7T1Vw23jYLGKFGA22sdFnhkx5tfy6sh63ukAnSCLbOJ1Obo2lbgvsAd94HS7RjGci4GmxIhH9VkBGIGPRP+V4P+28cn18mUL3FnJiqGjVyfZDwdFQZmK2eoPeZr198IOdPopfz/SM0cBvzr3HKCTmSbv8VN/aExMY/Fkg1QtqIYNh780KDu0iqBLxrQxd+VXD45qtMnkaj+SKbcD20teyPTDDZejUlU3QhUNxamOUSrpvI5F5kI/uPLzBcwwa/wyEdq8IXasdBBop3dOavvSgXpepuMLaDZ5P/o0LYFcspFT7pKASypbdD6QZb2BTgRE5zwPM9BQqvve+V54vcQ4Wvj2hDSRcxALhtM8b5SCueMpSAO7MPRN9dPkTRVo8wNBh5mWY1BAC94CzfOyp9rcHoD8cktgPSxCuns1saYUxa8ogtiK0PcEuzeXpPdxL3E+qDEldNb7InFjj2j4W/UqJORCHNdWNYVVwWYA8fih7ywYwO0Bsxl+j+WqKiPTwnJefuttwDKw+ylCJZubc7+xfw0H6o43oXA== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 74357300-29bd-439b-f349-08dd6e84dff9 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:13.0594 (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: GVE+L0zMdUE3Mg0Y2Apk+Gk/DmmhKJKRxnwdWc4aKqsXZbFaD7R74m+T7S4xq0B+EuFuWOR3ctS6KqlmEMZ2qjv7uTclW7UN3H3rW4STQHQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 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 = imx334->vblank + imx334->cur_mode->height; shutter = lpfr - exposure; - 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); ret = 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 = imx334->vblank_ctrl->val; - 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); @@ -725,7 +725,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) exposure = ctrl->val; analog_gain = imx334->again_ctrl->val; - dev_dbg(imx334->dev, "Received exp %u analog gain %u", + dev_dbg(imx334->dev, "Received exp %u analog gain %u\n", exposure, analog_gain); ret = imx334_update_exp_gain(imx334, exposure, analog_gain); @@ -759,7 +759,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) ret = 0; break; default: - dev_err(imx334->dev, "Invalid control %d", ctrl->id); + dev_err(imx334->dev, "Invalid control %d\n", ctrl->id); ret = -EINVAL; } @@ -986,7 +986,7 @@ static int imx334_start_streaming(struct imx334 *imx334) ret = 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; } @@ -995,7 +995,7 @@ static int imx334_start_streaming(struct imx334 *imx334) ret = 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; } @@ -1009,7 +1009,7 @@ static int imx334_start_streaming(struct imx334 *imx334) /* Setup handler will write actual exposure and gain */ ret = __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; } @@ -1017,7 +1017,7 @@ static int imx334_start_streaming(struct imx334 *imx334) ret = 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; } @@ -1091,7 +1091,7 @@ static int imx334_detect(struct imx334 *imx334) return ret; if (val != IMX334_ID) { - dev_err(imx334->dev, "chip id mismatch: %x!=%x", + dev_err(imx334->dev, "chip id mismatch: %x!=%x\n", IMX334_ID, val); return -ENXIO; } @@ -1121,24 +1121,20 @@ static int imx334_parse_hw_config(struct imx334 *imx334) /* Request optional reset pin */ imx334->reset_gpio = 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"); /* Get sensor input clock */ imx334->inclk = 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"); rate = clk_get_rate(imx334->inclk); - if (rate != IMX334_INCLK_RATE) { - dev_err(imx334->dev, "inclk frequency mismatch"); - return -EINVAL; - } + if (rate != IMX334_INCLK_RATE) + return dev_err_probe(imx334->dev, -EINVAL, + "inclk frequency mismatch\n"); ep = fwnode_graph_get_next_endpoint(fwnode, NULL); if (!ep) @@ -1151,7 +1147,7 @@ static int imx334_parse_hw_config(struct imx334 *imx334) if (bus_cfg.bus.mipi_csi2.num_data_lanes != 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 = -EINVAL; goto done_endpoint_free; @@ -1205,7 +1201,7 @@ static int imx334_power_on(struct device *dev) ret = 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; } @@ -1349,23 +1345,22 @@ static int imx334_probe(struct i2c_client *client) imx334->sd.internal_ops = &imx334_internal_ops; ret = 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"); mutex_init(&imx334->mutex); ret = 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; } /* Check module identity */ ret = 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; } @@ -1376,7 +1371,7 @@ static int imx334_probe(struct i2c_client *client) ret = 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; } @@ -1388,14 +1383,14 @@ static int imx334_probe(struct i2c_client *client) imx334->pad.flags = MEDIA_PAD_FL_SOURCE; ret = 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; } ret = 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; } From patchwork Sat Mar 29 05:43:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032575 Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021103.outbound.protection.outlook.com [40.107.57.103]) (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 835A786342; Sat, 29 Mar 2025 05:45:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.57.103 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227125; cv=fail; b=t9Ykla6NjCahYqLvwtnd9KmXyOXoZcTRkF7ZOggwYQYcpbZC/jW4soFj43P/JcZsA5W6Pqq+1/rdqfG/QligKgxGekw+hlUhee1TYACs0tdH/80Bx1w8IoTlJA/McEF1nG8m5njXZFg2xgmqwSacwQzqhuKOtZI0pzl0trApNn4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227125; c=relaxed/simple; bh=+M7AMO97qL5l24ZXMXfe4A4xUt1QxOpTw8ydUJj9XXE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=sooMO5oJrqvEigZF5My+iHOQG6xHVyH2ETRs5jo7t3yMkOq5dqAN42TpzAn/y2hadHPkLxd49bJE8GQ4mS6VM9xqeFPAJGa8VPVhqjsLyxc0pZcUL4ng3z5iNaRHqRPFAdt3aUThn0OAf/Hq+QMZfKvZpiQifg4i1CbnmU9P1Wc= 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.57.103 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=HFCOHr4m8lDTezPIPRr89SCSzRph9cJ41UHoA4wmjUsMKp03FID5KFzgZ2A3x7yEsK2dvcyrnSvRxCYMzn4tc1cr1o0Bk3liVy4ih2/hRUtCFyFSHqw0ta6q75xUbCAxZv9zSP6M3nCG5um/SaMjUntQCj1suk79T7qTX/2xboqLALz+yQhm7RkRSI9/p6y4dWENVf/Esq/fY2I4ZxjXzjTZiaWMkapvGKEnusWj3hy9Eed2Z4tC6I43yjccdvA1+fvM+tCUpm9BQrLWV6cL3vU4TZGSUvgh/+vbH6ZQp4ISVghkxi7FFGzE4hXaezCU3Ng4BxFDM6b58DZ5WQw+OQ== 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=L3qspVvCFUOeooSrHVY++3/kqgShCZ2N/IpfoIrpmfQ=; b=iEbqyXsjihsGYnKzdJlM4U+HXsbPP690qbI8wgy6jXW/hJxByrccSkFpzCJuRbUlXN7R3ylryqyO+9v8v9luFX10l1YincIMFHqMJFKYnhzeW9O7vv/KAuJeQSr/aayn53sfjuL4h3YQCAZci3lUGGwNLoq9JtBsgzDxXeFn/0+VV4SGJkn+jKDrOc1CdoOhQKf0AN4ged6Ce88jbRk7yFPeodYSaduxuDwuxs6WBrdtz96UboCknuYuWa2InqVfv32FPcjZ7aF3jtZ8azeco5uvUxbrF/X9xtnhfqLyCE0peQ08rJndVD0glyndo4bOHJctKdaHe3FanBTsmhE1bg== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:19 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45: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 , Julien Massot , Zhi Mao , Benjamin Mugnier , Kory Maincent , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/9] media: i2c: imx334: Convert to CCI register access helpers Date: Sat, 29 Mar 2025 11:13:24 +0530 Message-Id: <20250329054335.19931-3-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: 09fac682-b2cc-4acc-e2dc-08dd6e84e3aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: BZCnTTMkbbeBaUw/8t1TZf6zd/2zepFmAcpbxRZutnB8sYIuld4U2QmuxgZFIkNLQDRMUEPSbvMpkmcgRTywhJSkN/B4yx/svhG6TtXauLn+WvsDrX2kzJtZLm02KNFxf4PFF1UyBBrwwjG2w8nLEklFfi5scJtJ4za/XoCknqWivTpL3gAj0OjerpcwMnuDlLd0qUfkmkqxRn9XiZKVhuJ5mYi0XQDcpakbDkjTXIbwvtAtVNRZ8dvpBrHIwuV0Gh47Nqwqj3vVJQKyXCgQOytXWkGh/SOLaRT6HyCLApspTiwNIUhMeZabZhMt80sRRBVzDPLSdouUc+Ie+koyzP+bTMrjmlFKAOcPjlk4gsGX7j9d+jramUVIvWZywKMbRIEFeeMnF4Cx+i4BmnOK8+zhGEv2tlxSKAdcfb5zhsD8cwigcCIyHixauz3bBKrfVEyhoDkS1Qb2elAFkCEE+CY+wSIU934ico3EGXBokTMJGZRTaZ+wLCUiL9Bewiasmmb/TwOcBvqBUHHcVNRBMTsn4QOi3pN9W7s3oRq4Yd4LhcNkb1t50pMkvKNjpMQzoeIp5MLwVkFv44JqFkDS6JwmLI25g+K2Bj+gsI9ULlRBjcAGP7lOvjOw81CKF6EQn+0RDCjdSACvf7b2mOcePbWdjei9U9N7Y681oiW8CbQWBNVYDmuY2uAQYWGdhcMbZrJ9kR13qR5aVl0EQVPyudXAvigbrKgaYAhNhB87Ef2ENkfRuNme5G3AKLsF7VQzWmZplhlmOBXrF+o6H2XTRqjLYdRB4I0TdwUoRG8xBBwbP8RLD1x4rUD4+ZV+St49jG7XrDALrtpdNdUb9eyKRLXpgWANn5mC9SUKqalUiniq5j9RhbZkR7YypzbSDaR6hXNeVVClYFcH3KR6BU2mDsFi299G4GhTSdalf0L3PN14FdLgZ077KZEARTT6preOqjfIu2dMTF8S9ABiF/dELqlTP2lky0hYMuILh07gaHHqfVYxHoRHHqefYUxWtfhCVjQBKNYmHRDwgyTox+7SolXbzSsvnPe+Af0YBplDz1WeaOaNP62gHB3lOeATrA72HTD0ncbt+yLItvq9GlSwTGUUhoL16qFQs4arHiakMGS5x19irpbya2Bsatt95Q9YCmqicZkkDxADjWmCYSAeK/FXwnodTXtMQxvNvAZg1PKeQDEvDNR2PLKmogLFaGzMfrN+mQQAx/htNTGLWoFih+RtiDbAVC4jq9jBFgEn75lD/bGb0kyvvJ+1/ivTC7diGkQ5G429kXMKkIeoJXx1HCRyGPzL0OFZHm0oyKWypGRtsqvdoNoX3urNDjyvGqBJqYtEPVeo25DJ/c1AkJ2bFD74fbcPUbX3MXEw2U08PGYJXHgCpWvQogikP26F0bBXcQ62d3MjQCSsoAzX1kEeWh5kz7LjkrQU5A/1yOTqkB0VL+IgrjYUTMvGvKAVkilcKMdqWrvM6Ocbzxz9a7plOw== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xN0T1df5ASB3YFOoNA+N7fJA+n5EPo2CKEwDWaqkc2wqnW5C4wFolCto4tGwZILueUzRmWET0k4j31IBQb5opuVleCPol6XGBXkJDsrGzgQJc8MO85hphkldQmHOvsER0Q0IeggFH2eaLFnBbn1HIIM8aF0FD4yYEqlRvn7Ek1Xj5C9IYfi/+5KYel1GAGAHBCxvkEFxMK4fWTwV/S9Apq/9qFUDRwTYltGpuANvrlFCMHeaPcYhxzZrnnrZEMAQi6Fpk5vnffiHCGx0t2uJ0X2IJYVNpIXoMtS6WE8mtc/xP07RMLOBUFi0whfqE3z1zYdA5LOo8s8G/ISkbRRvItdPxMxi6ZgIypxbP+ue8xTe5zLqWtg8q2upIEcEBrkZgZdRH/GZHjwsdRO94EbtYtsVgo+cqEjrInkDOiAgZ+zk5912gj66eJJ+ZVfJksOrOe8nHLYudMa8DjIjQiQ52RJ6Lam+CXVilQlORs/oEHHhCotIS86DInJ6G2wwCsX7/Jpz5WKBSTXE+1Men/uyYdiRBCdb9ZbyUqYq0/Y2HSkQVOXht7/4NlOQPJGOb4ccTHex6o/UsaJ3z5BN44DafPapyFSliZD4GF+HsCHxCr+kO3XsOKzqiw1xzRJXORMXtpSx5fjAk9vW8l6d2CQArT12PSKSf9uPTkbuc26zltLggOK22oYTtK9pq4SAZjz7wuO8+gXFn7HzswZ6jTHydPPupJpC+VzdvqSQFa/Vd/5cW/11eCstQnhJvqHVSnPi1KCwjzHf4uR0iAMqljd9W+a827gnkBYuZ3Xau5xbEy/PDzAhKKKztoQYezsNVOxg3nnGoN8HOYReN50M2EtHYMRWX8njXQ/wJiCNtEjy+ZLUZQ4v3GUw6cxQIKlLHbNWweMa0dQDlZ5K5eRW5QZFz1xSfo5NXDfKR1eHpgWZKk3S1+tsuO+30YCVc3bJ9pIsBgM1PTrhzZMbNV735ptw/pYCYV0pKLUJhQbbwHiQTASZUAWifwAha+lbQmjT3tZdlP0E73qgnxmywBP0m2WiKYY3mYGCRzcHU62dVGC5fXC7Cn7Uhn+jgQyrn3uhRaU/cLMdd66h49NDsVm2mWK206yRd59hOZ/uZDTIYRt+gdHx+lC9mZxX1+D7KaHbsb1214R/Z4DLFUCtq0iL8RjWM1h8uQmEUA55odaouAWcy+kWVQ8D1c/df8i98znaj2gRvGKptBm3BQ+0Cdkh1owoOqM2Api18LY3MHpmsi2q//LPcSYjShnKGmC3lj/+a7xWmwPOempT+cj7UihRM+rMdRos7RrIDLIxUwpCVGww/WgklBi2jGeDhnJ1ay8ngctIN32isZM8eOjDgD6ttjPf/hn85fQzO/Eea7EEfD7ZF3+D5xQAb9rgTn5qmoTI/7vba4b72v+PDhAKrJf627/zB4y6yV2D30azxFcLbAV0vzwog0bNj4K8X0GBnquvVF4W6cw35a5//vTarftT+5FgM5PQ4jtR3Y0ZQJ4lGNC1OiO+baRCkQSziCEsj1PxwcmgnFemSPysDmBaosFeU6gTLIe17xkBvsKbxwJqVlsrPgPPXNJcTs20ecsfZGuXMldlIV5eH8IAbRLtCAog+7zp/Q== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 09fac682-b2cc-4acc-e2dc-08dd6e84e3aa X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:19.2594 (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: 9dz2qxKSWI5QvQ/enFz2MMcF+19LJ2FkQ4jze1HegeErBglmWGojIZAhBABjsGJVBqvxHNof4FXdiV+xzq+LMPuIZUvSB0IPnqJsgtxFuQU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 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. Acked-by: Shravan Chippa Signed-off-by: Tarang Raval --- drivers/media/i2c/Kconfig | 1 + drivers/media/i2c/imx334.c | 746 ++++++++++++++++--------------------- 2 files changed, 319 insertions(+), 428 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..0785bf213d91 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -12,77 +12,123 @@ #include #include +#include #include #include #include /* Streaming Mode */ -#define IMX334_REG_MODE_SELECT 0x3000 -#define IMX334_MODE_STANDBY 0x01 -#define IMX334_MODE_STREAMING 0x00 +#define IMX334_REG_MODE_SELECT CCI_REG8(0x3000) +#define IMX334_MODE_STANDBY 0x01 +#define IMX334_MODE_STREAMING 0x00 /* 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) /* Chip ID */ -#define IMX334_REG_ID 0x3044 -#define IMX334_ID 0x1e +#define IMX334_REG_ID CCI_REG8(0x3044) +#define IMX334_ID 0x1e /* Exposure control */ -#define IMX334_REG_SHUTTER 0x3058 -#define IMX334_EXPOSURE_MIN 1 -#define IMX334_EXPOSURE_OFFSET 5 -#define IMX334_EXPOSURE_STEP 1 -#define IMX334_EXPOSURE_DEFAULT 0x0648 +#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 + +#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_AGAIN_MIN 0 -#define IMX334_AGAIN_MAX 240 -#define IMX334_AGAIN_STEP 1 -#define IMX334_AGAIN_DEFAULT 0 +#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 /* 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) /* Input clock rate */ -#define IMX334_INCLK_RATE 24000000 +#define IMX334_INCLK_RATE 24000000 + +/* 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 -#define IMX334_NUM_DATA_LANES 4 +#define IMX334_LINK_FREQ_891M 891000000 +#define IMX334_LINK_FREQ_445M 445500000 +#define IMX334_NUM_DATA_LANES 4 -#define IMX334_REG_MIN 0x00 -#define IMX334_REG_MAX 0xfffff +#define IMX334_REG_MIN 0x00 +#define IMX334_REG_MAX 0xfffff /* Test Pattern Control */ -#define IMX334_REG_TP 0x329e -#define IMX334_TP_COLOR_HBARS 0xA -#define IMX334_TP_COLOR_VBARS 0xB +#define IMX334_REG_TP CCI_REG8(0x329e) +#define IMX334_TP_COLOR_HBARS 0xa +#define IMX334_TP_COLOR_VBARS 0xb -#define IMX334_TPG_EN_DOUT 0x329c -#define IMX334_TP_ENABLE 0x1 -#define IMX334_TP_DISABLE 0x0 +#define IMX334_TPG_EN_DOUT CCI_REG8(0x329c) +#define IMX334_TP_ENABLE 0x1 +#define IMX334_TP_DISABLE 0x0 -#define IMX334_TPG_COLORW 0x32a0 -#define IMX334_TPG_COLORW_120P 0x13 +#define IMX334_TPG_COLORW CCI_REG8(0x32a0) +#define IMX334_TPG_COLORW_120P 0x13 -#define IMX334_TP_CLK_EN 0x3148 -#define IMX334_TP_CLK_EN_VAL 0x10 -#define IMX334_TP_CLK_DIS_VAL 0x0 +#define IMX334_TP_CLK_EN CCI_REG8(0x3148) +#define IMX334_TP_CLK_EN_VAL 0x10 +#define IMX334_TP_CLK_DIS_VAL 0x0 -#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) /** * 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; }; /** @@ -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[] = { }; /* Sensor common mode registers values */ -static const struct imx334_reg common_mode_regs[] = { - {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[] = { + { 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 }, }; /* Sensor mode registers for 640x480@30fps */ -static const struct imx334_reg mode_640x480_regs[] = { - {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[] = { + { 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 }, }; /* Sensor mode registers for 1280x720@30fps */ -static const struct imx334_reg mode_1280x720_regs[] = { - {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[] = { + { 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 }, }; /* Sensor mode registers for 1920x1080@30fps */ -static const struct imx334_reg mode_1920x1080_regs[] = { - {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[] = { + { 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 }, }; /* Sensor mode registers for 3840x2160@30fps */ -static const struct imx334_reg mode_3840x2160_regs[] = { - {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[] = { + { 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 }, }; static const char * const imx334_test_pattern_menu[] = { @@ -426,18 +415,16 @@ static const int imx334_test_pattern_val[] = { IMX334_TP_COLOR_VBARS, }; -static const struct imx334_reg raw10_framefmt_regs[] = { - {0x3050, 0x00}, - {0x319d, 0x00}, - {0x341c, 0xff}, - {0x341d, 0x01}, +static const struct cci_reg_sequence raw10_framefmt_regs[] = { + { IMX334_REG_ADBIT, 0x00 }, + { IMX334_REG_MDBIT, 0x00 }, + { IMX334_REG_ADBIT1, 0x01ff }, }; -static const struct imx334_reg raw12_framefmt_regs[] = { - {0x3050, 0x01}, - {0x319d, 0x01}, - {0x341c, 0x47}, - {0x341d, 0x00}, +static const struct cci_reg_sequence raw12_framefmt_regs[] = { + { IMX334_REG_ADBIT, 0x01 }, + { IMX334_REG_MDBIT, 0x01 }, + { IMX334_REG_ADBIT1, 0x0047 }, }; static const u32 imx334_mbus_codes[] = { @@ -513,101 +500,6 @@ static inline struct imx334 *to_imx334(struct v4l2_subdev *subdev) return container_of(subdev, struct imx334, sd); } -/** - * 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 *val) -{ - struct i2c_client *client = v4l2_get_subdevdata(&imx334->sd); - struct i2c_msg msgs[2] = {0}; - u8 addr_buf[2] = {0}; - u8 data_buf[4] = {0}; - int ret; - - if (WARN_ON(len > 4)) - return -EINVAL; - - put_unaligned_be16(reg, addr_buf); - - /* Write register address */ - msgs[0].addr = client->addr; - msgs[0].flags = 0; - msgs[0].len = ARRAY_SIZE(addr_buf); - msgs[0].buf = addr_buf; - - /* Read data from register */ - msgs[1].addr = client->addr; - msgs[1].flags = I2C_M_RD; - msgs[1].len = len; - msgs[1].buf = data_buf; - - ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret != ARRAY_SIZE(msgs)) - return -EIO; - - *val = 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 val) -{ - struct i2c_client *client = v4l2_get_subdevdata(&imx334->sd); - u8 buf[6] = {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) != 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 = 0; i < len; i++) { - ret = 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; lpfr = imx334->vblank + imx334->cur_mode->height; shutter = lpfr - exposure; @@ -661,22 +553,14 @@ static int imx334_update_exp_gain(struct imx334 *imx334, u32 exposure, u32 gain) dev_dbg(imx334->dev, "Set long exp %u analog gain %u sh0 %u lpfr %u\n", exposure, gain, shutter, lpfr); - ret = imx334_write_reg(imx334, IMX334_REG_HOLD, 1, 1); - if (ret) - return ret; - - ret = imx334_write_reg(imx334, IMX334_REG_LPFR, 3, lpfr); - if (ret) - goto error_release_group_hold; - - ret = imx334_write_reg(imx334, IMX334_REG_SHUTTER, 3, shutter); - if (ret) - goto error_release_group_hold; - - ret = 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); -error_release_group_hold: - imx334_write_reg(imx334, IMX334_REG_HOLD, 1, 0); + ret_hold = cci_write(imx334->cci, IMX334_REG_HOLD, 0, NULL); + if (ret_hold) + return ret_hold; 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 = 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); + 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); } return -EINVAL; @@ -983,8 +868,8 @@ static int imx334_start_streaming(struct imx334 *imx334) const struct imx334_reg_list *reg_list; int ret; - ret = imx334_write_regs(imx334, common_mode_regs, - ARRAY_SIZE(common_mode_regs)); + ret = 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) /* Write sensor mode registers */ reg_list = &imx334->cur_mode->reg_list; - ret = imx334_write_regs(imx334, reg_list->regs, - reg_list->num_of_regs); + ret = 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 *imx334) } /* Start streaming */ - ret = imx334_write_reg(imx334, IMX334_REG_MODE_SELECT, - 1, IMX334_MODE_STREAMING); + ret = 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 *imx334) */ 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); } /** @@ -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; - ret = imx334_read_reg(imx334, IMX334_REG_ID, 2, &val); + ret = cci_read(imx334->cci, IMX334_REG_ID, &val, NULL); if (ret) return ret; if (val != IMX334_ID) { - dev_err(imx334->dev, "chip id mismatch: %x!=%x\n", + dev_err(imx334->dev, "chip id mismatch: %x!=%llx\n", IMX334_ID, val); return -ENXIO; } @@ -1339,6 +1224,11 @@ static int imx334_probe(struct i2c_client *client) return -ENOMEM; imx334->dev = &client->dev; + imx334->cci = devm_cci_regmap_init_i2c(client, 16); + if (IS_ERR(imx334->cci)) { + dev_err(imx334->dev, "Unable to initialize I2C\n"); + return -ENODEV; + } /* Initialize subdev */ v4l2_i2c_subdev_init(&imx334->sd, client, &imx334_subdev_ops); From patchwork Sat Mar 29 05:43:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032576 Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021103.outbound.protection.outlook.com [40.107.57.103]) (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 8119017A2EB; Sat, 29 Mar 2025 05:45:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.57.103 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227127; cv=fail; b=EKnFHsj1apMqWqKs41pKkppKYDvzfh2mTuG3Nu9/h1Z6dBz4OS+GzzX3lzT6qoMnjQ69wv1Chl4dUjE08q+wtEPYlV+Zs/wQmD4v4XK1FyIAHhPAL4MOkf2g79+NScRZnP34EroAxyZCcBwx5QA+zPupHWldTlWiQJBjGcltOvc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227127; c=relaxed/simple; bh=YlmPko3/nQeVmDJbE4pB1TleSZAbfXDIq3eHRGgDdcc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=fznQqYTBowtT/vMRMt4ncsaVo3MPqwfu0EvLNNmtYhw/P2J32Z1LyDfKQ/Q6Tki8BqAaq0Pfb8TEzsiq8lIypCRM9JB0T076OenmYqSs0gEW+6+Z4hZbq2l6qUT+0x8OeGd7BkNPG8pIAAR8QdnniAY6OizE4h7jt7DH8bjhcPk= 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.57.103 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=i1a6lyMjPXcto2uaE/oH3cK/KZYwEokOMXzoPKSGMtnqIxwI14zkbwTeSkDBexTDQ4ORMvx41vefbWp1libIqIBx5cWD8QyGa1wL0ptoH+c+1P+NTR9wFL8sSgvSXkJIUX+ekA/Y2nT4IoXS6oDKb39GaspsSZzkE6acaSZM1xr3h6c0CLav8NSPWxR87U8rRf0SVtATw8eBtZVC0p84+6lgr0RIOk1rTtB8SxrbQ+w4+jS2drbC/aUyM1VI5zM0ksPvO3XDFNtbpSR8dMK88+4TlFvccVwJWfTnslWDTK5UZEyRY5G/JHUSHVHGi5+yp9KkHwOJEPMs4PpYmoO83A== 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=lOs9gIZA1Vw8GFD4bBb/IhhnlYXU0TbRMdbM9MeG9EE=; b=vqQD8G/pmE091j22nXFWW3FTS82I4qhv2MYGTQ3M+jVa4SLATyrY5xqP3ZqZ6Q1I78AqmRa/W/TEkq6g9JxnoZsxPV99Q/pfiTJndriqk1om8DPWNyJJopSHLhFk92FxpBLPxLO5Kxu/wT5u9WZrLxJe5QVMVKimJvsfkRPpTSoXjOTW/Y15cOvcK2Hh4QFqb5hupUbm5vbFUhDBL16GhqAI8yfBLa2kKmJ9cKfcwwr78AX5rha/3e7Oz7ABIYpN17yhKl42ECfZ5K7QsM/OsqLqnfUHNzgttjg0ycCgtDLUVaTtfh4YIbuNxLSxyccCKQHQ9fdkr504+PifIpRf7g== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:24 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45: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 , Zhi Mao , Julien Massot , Benjamin Mugnier , Luis Garcia , Mikhail Rudenko , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/9] media: i2c: imx334: Remove redundant register entries Date: Sat, 29 Mar 2025 11:13:25 +0530 Message-Id: <20250329054335.19931-4-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: cab5cb89-cba5-466b-0bbc-08dd6e84e6c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: e0IX0q5lgo1YVmWtuSDc8HMsCkBw5N4wu40O6nCh9Y8FAUW4F2aDDnIm57ZwBiPkXKs8+x2dgp5ojwPej+gXfKSMHcV8DErVbJHg4fS5pMmqzu+DawH4jgX6mrJNL7LZmHoSB2ZlAuQYFb51JvDnZLKkstav+QvN4iL7rwl3h8cX6KjAEhI+L+g4CwKBoHY8yD5q6IZouScYKYx5fcZX5+BQVZWlXe/OSjLuFgplH1ShYiEE26CyqFUI5gFoL52y6Lq/ZDdMQhj9uFlOXsSwqJG8bcxwIqeYy5QbMlCMr0hT1pNzxjOuiG3WG/9PcLhna1KRGG+vv/LdSCAn9AvWuxAccu+LZ+H6zELNGgSWEjy8ZciEsThJos0c+cWZaAfarWMFxCLQMwc43eqCYfRI7hkS3cRZfiieadoOxE1TOaDGJl0PenO/9XRpqhDw780FhlFzKzVcCydNjkFE7eYI6k/Lkgsj3VFCED1b1zoxfA1mYkPbxkXEMveF2PEWi5frRGb1ujgg4+3Xu2iTTCZW2AXHqho7iOrtCdwljK6aDLtnjCOvwQy+lcIZRSulVjR+qSULZ1f6IVxNlBTxh6Dp4nA/3YO5XwN3Mg6Lzp0iAiZmOXfuL4wQitatUi6YpsjrDdcj5oYrjp/n8VEIl699XSRqg8jpqdtZb7faAbR4x+2z4lfxKygDTNwmKnmDFfjEqE5dVtNkpU2K7FShf+aUc0xhEA4kBwtlQr/RlOmlDWZaIi7urn5waj3Gpjejpx12ryIrro8MSuZTnVGPdInKHTJdXRtpog/CsVQpdfi7LRoZHrXSyXomAj4AiDSPasnrq4Ksmttjh91OU/l8zMWsFmWOiy8VlP62vhKggTq5aeHmikJ0HvxasZ9ORpS8Z4X8uDoAPjwqlLg9TjGoeW/gqdFBlZFP02hruiU4LVVfQ1h4IxQ06xhWYek7OxJnGnBJ0yuRYAlzfYh3EouwWJDcJdgPdYzCU0bRF58WqI7zyGZqp//2TnOSDsNR/JnohXSRxtjTCOqDI+1PV132QPDO+dvBoV1OIPhZRisgrfB1beGBvCvEMqNqwcCC4xsFRZ/yxVNuGD46NPFa2V6OaYX79DipexZdQQMdlnmd3rimxxJ6nRnnqhsy0AG6IV4+fbdIzvOWdasksda4HOrey8BmdpxKBRVImTdMNiTHLyg3inBZ9nCO8eQkpx6snrVRrb6+dNdTc17SVa79lL5eKekJ19qBNvyhtiJpT/xOITTpH2mnIfXuX75c5sMPOn4TluXHdeOZZGTsq+0qNogCGPdO4EnlXcUL2+On/XwU3oXnQkHUVQ/izOTz2gMCwe3XaShmrw9pGLL2b7NfHfL+ji5LpxnXgXPv0beH3Q5l2h1L0iRyAqBYNm0fxet5N/MJaI610NMlSpt8o4iMCWJGQgP523m/bICv5N7Vr4zS8YPQkCSjN53upIxWe3Y+qqoXHyyPPrwHWH9ArvBqUgiUQu5B8g== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DakAsyG/kYtPerX+RHLF6FjacMm5TDB2bA/kNnan9SEUyPE/IdLHTia0ZRp4sNQuQXVIcvGQEfAmqgB0TLXzJmKTEiZIq53ddos1+qSp/IOva0yN0j9bqVQEGWb19ywPVIo0LoPYP2wfGBFdUoO7ZV4mG6MQeKbhm2Hbt3PT+R41EUBSfFVPkwneUr4svZnVWwpAsLmkSDgM656RWehDemOwj0vD46DmJIle9kOrPxE8fLLLJISCxY6KmTAnRuAbZekt1tlm9NI2iaPF8DP71YfdJwpP7zrCYhNdm8HXFZewShvlbh3lQFP63QRrjyYxldiTHqatWteFerSGiIGCt9G0/uwXp0RnFON4bXXz4HP2BiQtrzaWQk3wKClYI3seN7YsK3DKzxSD2cOzZTpA/c/WTZWwnEF/Uk1RQipvGEl+M6jVn05hSaecDLqEI01jbreAeLyOk4JMb4dLogi2Q7LZsDzfGSg2fr9CsAGagv/aj16hoKWECxttGLajxOEbewadFmNvtj5AF480t3E8PjPyaFOEFoGLYXj80ZT4Uj1K3e1lYkNwBsg+B2qDCFbyWCwU6KbwBhl2dqWuC2jBwh8gheB0/NV9wTph7lMIXz0VKy3k6ZNOjHfL6Dy2EE/ACKTzlFkp68N7QOKzDNK4siGKPaxNnYhPkPb9wJZoUwe+vmiVQ+qf5F6P9pCKpuFW6icGu5i2k7b5k2jK8NO1m9p5wlNHHnjGWdDyHRyP3DPdGOCrfYn0q4AS2LfWK0JJJdfSSD/h0i00LiV0ETzijhrqV9kbLXuXMs+kT7gDZiNxcSMOc+B4Dn5eeuTDP7N/HzGbb52rZvAh2/oN0QMe55r4WJdewgeO2G+osTNFHRWAMc45/iD1Zb9ELj4xsucE3quB2Y0SjDLI/jyb4VHsLd5a3wUssCSKHX+BWE9/R8K4/rI6uS6f6ER6vzrR2NHdyOnQX+vZyuTE1X71gVfCfLT5t31tybnPcKVDs/s3U8bQ1HICqkIWlPX2zHb4cbcFJ0GWUPHVpkfaebOXqMoFppd8vSNm4k7OG8hyhb42lxkM+I3HQq1bL9bjIX9pkgMwqVhSs5CRY7hrBp8zMSt8sikT9AWYP00Djw6iVzEqe38fNfR4vXNp8h8oJAqCDv2XJ3TirVbjmLqnoNIRaDHDRez9CTXAmimJDo2wT5I1jI/ERPHZZ8/4g77vMqiGbocy6VI7vZQNuR+12BME/Vh98uADIXyHzQbok5vbbAGhX+CD9g2ZqLoHnokk19zbaI4N6Nn9fOzAKaYheKRj5ok1N+qNyYLAYxEz4XgLBWvenkvWWjBStCXYWZk5G7Yu8zbDiUzaoZu2CSSe9T5G2PMYFv4x4j3ynGqF1Uy97Xm3bNZuyGlFSrAASR4+iYePDXEyvkuqLwxJ+a3AzscmNDHiDUiSus0F59580Plf6ligo+yUMe/NE/eJS5TSS2t8Z4nQi2dZL4wS2h5aL2OL0Itw0k6eZfEjAQIRddgs8felwHcthhp8cRWXByeDxAWId5KW7lZQOXUkz3IUbGVkxFCfzBMLi/oUarWzskvbt3uGt8bCjgMvtLNsfuol5VfCGgNeMRHUFCC/5Dh1Lty3pEMIFw== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: cab5cb89-cba5-466b-0bbc-08dd6e84e6c2 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:24.4095 (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: 0sFJpPuOSG2oQbOC3J7NMCJ3Mo2Uqzz1e1OdDEjR+oHI0gWu3TIclGebQ60u/mWXVwEdWZr+60xB9vlRLx2WW8Qsw0yoUyYQYUMcDhahJDw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 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 0785bf213d91..9d4d15df8dcf 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[] = { { 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[] = { { 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[] = { { CCI_REG8(0x37b0), 0x37 }, { CCI_REG8(0x3e04), 0x0e }, { IMX334_REG_AGAIN, 0x0050 }, - { CCI_REG8(0x3e04), 0x0e }, { IMX334_REG_MASTER_MODE, 0x00 }, }; From patchwork Sat Mar 29 05:43:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032577 Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021083.outbound.protection.outlook.com [40.107.51.83]) (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 BF917170826; Sat, 29 Mar 2025 05:45:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.51.83 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227134; cv=fail; b=gHmConpxwmHL3Sa7QJrGtn+8xAoy4He61+multoTIgNztO7i1+L/6k9cfOMfIr79cGxbYqBih33OKLa0WXHYrsWw3j03in70uXWUSqpuoWuhw2Iu0WbrZJgIKV1EYxhvUSYMpIb/3Cqq1yqnwug+OGrDq0KzfQMaiTZ9wUzlev0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227134; c=relaxed/simple; bh=anM1RwVm9wyECGFhf9KFUf/MmiNC+Jq4V+xYLiZ5I0g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=FOYiQ2PBg6GrybjVATOVysHgNAeCEu/ri90tc2LSNdlQlQIVJXKJ+SPBGkpk3m/NiCi5tmW4q+oaLUrwAOfftEofI+H8FMccCgwSqgv6lEldNa9Rt2JiK4y1v/x9NdhgJC4e0nnnsV7K2qUV9aaPqrcYTFHkBiIuu7HLi5ifhTs= 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.83 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=rlWP+dIMoOmT2U0ZlZivbG0/5q1F9wLcGXtJKFdMjdNtEZg/cUK9JA82Lwd/PIgc6P4SI3bDkUeto5H4VnTYtSlR04A4H1G+LQtAL54+FIxM+xysWdAdXRnRh/kbUV7RvN7RX7sMyQpH3n/ccO0eLIttwEsCuKlb4EYeOjGKW2y7JB9DvnTlSs60qm+JK2K15dsSpkZG6Rl8sbR9v5kQysDmxcmPKRy3/Wm2T7oIchXoa/hY54z0XMMc9LT5wdzVFpV/TAOzgRxKc8VnmpP0j6q6BQF2TKT0NFfrZAgqrLQUeBjIykKotxbzpXopBgO+Y2YF07O2oscQOL2+yn10bg== 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=GqPMZOtX56B3Til9vyQTDVTiqW6ByjccrfuRKr7juuU=; b=c+V5fJHTLOcKqGS8+mT24eHs9rkBEYo1x4I7tZ6CW1J6E6p0aq8Q0Swa+HHigDkU1hxjpm5wJ/ikN4CkiHWmtb3fMlPV98YyXvPWAGMO2/dy+OkZD2Qrn2H/CRB8LVeY876SLS0Ne9hPB/R3Lwk+60evasyAAvzfq46mgO3rCdKZaIqxBURnC9O2N78mOoabUIZd8r6QMpDmF2EiwwimyZcdMSsVate3CD1PMZMP5mcSjdm13mJX7iFFLSqZ2nwPtGLPRoVYzA82rlARFXj7potJrxcWOI6nt8xVjsl6cG5stmy7mg5BZRdRqWHpDAP7KBa+pBLSb9+SfRZUnxEJQA== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:29 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:29 +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 , Zhi Mao , Julien Massot , Luis Garcia , Umang Jain , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/9] media: i2c: imx334: Configure lane mode Dynamically Date: Sat, 29 Mar 2025 11:13:26 +0530 Message-Id: <20250329054335.19931-5-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: f0b366d3-b218-4443-5293-08dd6e84e9f7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: UshwayqnxjS+VWkyHn+0SM9x13Kw+kujhhbp5uDeN2b4wd3vC9hDEttKnuJgnB07AlIAbBma2+0yHLz/dcW+ufE3MftPplTL58Bq0ZOc7D2NwGohQBMZqHE5QJs/+xKOzcv/9Qg+INkxkV2MRxaIioUAjsJU9CIAuLa+XuVAhyHZSc7TvPXomCCNRXpQPzowSPJR1RF96RAySmzeh0YJ1hHqfg+0MzKvA3RViuci83VhNxH4kVdb/BmSC1SSd+VcZoMQO5u2UnEn8pDzryowQ06J07BTSZeiUH/Pid7K18CCoaPvdR5WEQKVE7CC4SxHkK9l27JjM3AjBgpvsgSJrxCR0TfXWOPV+hJ4JJO8Qye6ycUp39T/kWc0XhyZU/SctWT3vqwWoTYO6yTB162aepRMRikBpOaTmi03r0bTMIDUxYACZ/Zn+I06oSMRr2ODce+Unl7C1UvLVfRHrI9Ku+oMrqiodnQjT35tgCOIc6KPmhJ42+lbhGJLX5nOhZJTa2ITQXLUayI4w6At61xkQwwrjbF3IfWh9+v2usmuXnc3Z14fHHm4zKw7wwf5230NM3riAGs4Yy46SMAZZwMEpCKOAsewr14u+O9qsFBRin7dsFG9tfOJ4Cne1Vq/TUBnsZ/spRaJR+ihhgE+FxaZVw85sUeSSYsXZWQmr4NGArxzIYvb/PZLELRaS8/hI/BJWaNnFhmX0xpp/98AMF1g5ztx2IjrYlh9wHlEI1iGjRCvOW5PEzLZJzkSdvcrLtsMhUIDVTUdQygCb8dPVet2oMVkcBKfV2yOlbcCJEH9JkIkasyn/q5zC0VtFv7jObQ6+PnAj24EYYj6PNuDkx44RRkgqy427z/fgPTkafvYhUftkEjXr6CCtnn6w3zl6g4/AUKPJL70tWp6zDw/bPsHY/1c4+5RtWFT5mbCIvEc/19K4BcCKtCPuKrDY82hC85g4702Mup6ud5czlOej6s+tTbL8YnG46oOUFcxI8kyvsdUypU928GFI5vRa5gtRw0Z5lWjBAEwrUUgzaEbrx9VGdLbaZOGHqrwQpSejNDYiXkbRciV5dkqK8I07QjAPOZ+ArziTGanOSfoG4wbYwXK3nNIFaCRG1MJIVxqy9T8speaOZS86/WZ5i+c91vvO9JQaF0Oyx3gsiDv/OY3iYSpHErKw/pyQ62CWB4/qeDDH4ViG88umHQcGdM6wawrPqsrXLgnbdGdFkVP+VE1rHtHsb/Gnl9gZECjs5jcKFDez8F58T15n8qSg/IowLqnlb6kL2RMLa2Fn+wn6j2nID7zNU9D21fdw20L3jhxtD5ew9b/vaiN4XZeroEB+CHY5G3Cc97S4q1Uo1+dro/+6pPAmAoo6q/ASxWx0DQgzDH437fSQOKursvNGfrt5201yujZ4TWLs5QxLHp6KFSwIsclDm+L/5sEbeFArmC06iRJ95kgY9HuvM8lVCeozH7JJPeDE/tM+NwckZGT2MUqMbBKxw== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: I++uHN9BEm/EW6puIyqj+wII+p5rQQCFAMdWjFsGcr/GHOSafhkPkwY0xHYK2zLvSKvW9uH0tkt2V0JKBAuORLEDPH7XcUw6OV7RGJ0+6+zVdyvoEBeNyu49cKch72KGkC47EXqCQH81NNUiSILQNmv2WBngC+VSCQXIKCe3aaHBQKo4C/fTW9Kv1vN2HgtisIZq3HLLVGOdnfwO1QLbPAFUmGLt9u4HJo5oH1mewzj0S7TNtAOYjfV5N7aHd0JrGpJORftrA7fuVwvlNQOgNMLhavW4yMhLzKNJIAcPCbdHRy0D4ueezfXvoMVI7OCVje62Mke7At3abDnt0uGw3gYytP2/6nITW7s4xSdD668EqamlcvRF5bcifVoblBGHIj6+9556es6vojjYcwWkv6iU+lhhAX/t+CUIvBlCKHSDKdaZz4o4x9S3Dc4bwywPMnFMNehengswqh5Uc1AA8upyl9hObyffi0aqWUmbe42/eXto5h4Hh59S6faT/BwnqO650Yaq4D3Pb4lXARJOReKA1G2ndgsR7C1sWJJs3+A8YhnYv0Ob8+JmVP6dKwnreo6tnXfPpSL/u3ySRqF0GAPP5ziVU1wOhqbZ6kZOkel27pMHrCTpQWDSjLFZMiazRgfRt8FS2by0XjzCCAgG7YtDfO4SEm7wX3hlG62XgLb3nI5NR1kcL3URU/xz45UNbFSQcvvJPDeoUHk/Fa5PvL20R6FCQo7Oacc08dMFFHMI79o4Nht6AEIUIhFP8dwhXoBE3KChDAvuVs3mklI25RnXfo19kgal7Kg4e2hRXXfyIv6BEyZDIfCWB91HsafdpxLQTZrB6TQqcPGSXGissAMMBE8HHGv47sjmZc50i4MgJn6vCWOnXIsZfQFFi3w3x9m3ZOaGzEgmdvlM1WJDIbkp+RfZwzhK1h0YMbZHED5LAaAPORp92Lydz/5ep2RRTRKRC5TSN11bJU6hY+kpzvHqKMcpDbFaoFgqeU2KhF35VwZ4XLZmvuqHNOTJL67GfuRRqOcbi7oagfF1UH2JE0etCpm+jh7xj78t+uAJ8TLW//q9ECTB0BJ9Td5ov8mJhwFPol7nNNxCwAg1byG8hSZRMg7Sf+YumZmbF6F1dOg38SLNeORGB1BvVKs+a2smpMn/sr7AtRXHfne2Njb2NgPF0SEz9NlQh0tQ+7foQpldMJmAnNIyQNCwamCBtM4dtmBvWCbknjNMN+rN+xD9og+1x/FExG3UBCMiq0v88bLmlZ5N3ieiUxDf/mGpXbvCBF6zHXUhXrI1/jVxsxCtv9owke0G2ShepQqwW97JljvndqWTwYa+7XcImAUXdqGgCMUW/xQypQ/blWfI+JkNL1zoX1x6KEl9R+1n7jy5RWrzjZp0L5td4tGSjLrNEoOca2lj5PDWSHH67vhn0te693C7AF20pko/fu/2p7vqGOH0Fi2SfbIt3DfZiUTruCN6xsfgrIANXa1GXgfxvZnyCjPhOuVNjLmJAzd1N4kZ6zWt+Cv94BikcUwSZ2pIPbo1dqqidF0F+Lv4eww7/h6CYDyQ52/SRvrV5lIyiuXK+MFcS300ZSv6yF+rhj110OwMPj4WPpU1yPHg9/bfrgDw4g== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: f0b366d3-b218-4443-5293-08dd6e84e9f7 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:29.7908 (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: EJcVoXxdm4YwmHVHK3N6TpEBJuAUM9SXvVeo0hHdAcSnKRli+fgKa8G8YN8FhOlcD5PhHpcbqR+QdVKHlTxf0zTqKPN0U5ZWHSEcJPtPs30= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 Configure the lane mode dynamically from the streaming function instead of using a hardcoded value. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 9d4d15df8dcf..f7be303af024 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -47,6 +47,8 @@ #define IMX334_EXPOSURE_DEFAULT 0x0648 #define IMX334_REG_LANEMODE CCI_REG8(0x3a01) +#define IMX334_CSI_4_LANE_MODE 3 +#define IMX334_CSI_8_LANE_MODE 7 /* Window cropping Settings */ #define IMX334_REG_AREA3_ST_ADR_1 CCI_REG16_LE(0x3074) @@ -240,7 +242,6 @@ static const struct cci_reg_sequence common_mode_regs[] = { { 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 +877,13 @@ static int imx334_start_streaming(struct imx334 *imx334) return ret; } + ret = cci_write(imx334->cci, IMX334_REG_LANEMODE, + IMX334_CSI_4_LANE_MODE, NULL); + if (ret) { + dev_err(imx334->dev, "failed to configure lanes\n"); + return ret; + } + ret = imx334_set_framefmt(imx334); if (ret) { dev_err(imx334->dev, "%s failed to set frame format: %d\n", From patchwork Sat Mar 29 05:43:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032578 Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020100.outbound.protection.outlook.com [52.101.225.100]) (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 054F9170826; Sat, 29 Mar 2025 05:45:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.225.100 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227139; cv=fail; b=SAzdKWkI0t5MmdbyFLIfHqkmuDt6nDgk8ZJYxPlKpx9vxOpAJsx+zRjg2MWYMNg6D9dSikzdHUkbWweFjApomdaCszoy7KtP7dOgex13PxqJo7rX9DfL2iQBusYa0sCOtuhTrk4JKHQ3h7OM/BhIbBxqqrq/dqOFMTQstFhZjK8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227139; c=relaxed/simple; bh=Ol9AhUaxJkBFxV9lc782zKS/1hDPgKKFnmQsCn/eZYQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=F5potvPQE27hHwiq90RpcgQAsOxamvUI53fAwkt/CmBskPCb7k8nby5ASKZ07lbZdnd4YMNctVh5E7M1Bbu3uqLOYwfbhT3dMMPz9PBM/vOxZSlWfAkYYhTR/xHurSOpxPevhpnWS7qa45yXW20RS50jhPSJo/uvJymbii9VWhY= 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.100 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=u4WHINbQDR5TFJ0GOqzEEVFOZ8+O4NyT8TNA/ia+xy3VVrH12uEQI487PGw2g9IBK0gJtD5QcWQVGAHWTNXfzT3riZiUJTejdtfVDOK/98wMCTfJNT6YOZv1lA7GHGl32fNHUYNHWRFiwZRTWQju7YkMhJIQSnb9hnxzKHRc8GLT4YPGWW1gnuIteQ0TNAPp/hi8xyiUOJE4Ewu/tbKwaqCuLbARj079u19d3wQL0sZtp6o2jz46S4zbwpW8yPGC/0BXQ4XNQoh9gUV5LMRuc6neqYT8fZSvaruuzvBsiJ8yX1Y1Y0sWPg5Z2utBG0prjtaO7RJjTF3CjoEz2SzHOA== 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=wL0cBrVAExfr0JuvHg+L2+SXJchR+lc65nRDoN1W/tU=; b=FHyH8Dn1pNwgfDvpdxGZPXqFw6KJDFMAb/hGbnYehelX+FZajqJiRouNZbkd479EDfShhz9FGi2uDjjt2BXExARGLZnNbodeNyaoz8QigiXPgW9zzIyAxlg9FGMw2X9/CEmqCT0X3Gb6+ixPjOgJFbvN+YwATxN6/lx/GP9e4L6jPwwbVe2taYgGarGDYw1s9K6t3Cxmb9RixUjbkIKqlj3w/zq3dtpQEnJ9GxLjH/+rmFFo3ENhmzJmJteQGChsrZAmInPRRs2jYo+sd2s2VecnPx3CdqNKvx+MECz+OTf9kCAIjf4SJyecZzIMr4vjpedV7rLK0Mpcz44DQtQI5A== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:34 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:34 +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 , Zhi Mao , Julien Massot , Kory Maincent , Luis Garcia , Umang Jain , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/9] media: i2c: imx334: Fix power management and control handling Date: Sat, 29 Mar 2025 11:13:27 +0530 Message-Id: <20250329054335.19931-6-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: 57298481-21ec-4c3a-d5a1-08dd6e84ecf6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: 6v3m4h0Fc9FW6sNwdosqb0XyH9YDQMyc8gS/vgWiMpfT10Cckc/hYdyEPUiDp9RnEBU2DnsijjVceEn1aG3uFZrz5+AMKizGfmpLQAwxC7ZcQ1FNTu4QS+oUvxPbg5uLomMJctDAwyMSi1rmngtosrtx7eimx5DTM1UUukPa/SHM8grBia7/Ad/727JYuvBIJDUMgsQo7/t/fFCLViIUyubgUKCgTEl2sQVdg2+K7h089q0+3cAiVzsulxydJ9Pkc1znFwFIne6R/uxVKplMN5y2tzoDV0+XUaSyFmxbat3em0TXicDHPBkTnz339PZX8i3F+ou8zbc1rKUP/WW1ZZICi6k5pVvNXYaR97gXCMm3AAy9kW1qKc0Z9wGp4NIb8oMV45gbxX5mYUpX+ZngW6cKaKcUuu5/t81BfSaMXmUKB57Id+9lYB6ylrxCkBUUKj00pX9aTS4fINPSQQzJlC5lyoKvddUqaj9A30tnpTfGlFf6TepBlE95mxkCYjZoLbKFwm9wZ/AyM3/DpnA1piziKugUQuCuO5rSg+0of1wrhCRs/YxXioyI5kA+Y2oVbBMFL0wZlCcQqIr8OWYYPt6Bvmbj/McynfToulVv8BLXbKmY9ZdcVE8ALtTWhGQUcL3+Qp2mNa0LgJZ4yQVTl0p3fkFBPWHAbS3eWkfcOVDVzQVsRW2WQCgU+Bbd4fP00HfSKiqCF7kbxQTwwCzOTili26C5OQYiUKkBjxrVWok57oHBpwMBI5uJzeVMb0MHbMpQjnBll64gNEMRC693IToa82wOYvR0a1VivXDEACPyzoI+jsKZepWsSeMWemClU/fEjM624fDB2tvP+AeygEnzVlJdzLne3RdVYyJqlSPIvJsDJSP1cXoWNmTODli86EIurWFSnJz5IE8jZdIAJvimds+2dUdBeIP/XJDq3JaLGWXYyrRmM0Mb+q483HSc00TzVvwtlEc0mmaP7eXgdv4e0t4f2pT5NRm+eW4okHXOKcRZ3nfrMa1JA+3YuAsT2YLKU4p2AQOs+J1cOm9M+Sw7c3pF2EeyhG+SjvCEICwlOgAVLBeBd0uIyI9E3Zo19xBFsUMR8SPdI9Mxi0PQuusJfbNNVDJ4xLI5UIYjC724Mqy6fWuNtTQVNR0EAmCWNjyJ8VK15h9bvDT2LKCi+4gVDp3cNmh2SHKNGNFZElqPpl0/IN+XUmlbLtU591k8xW78xrlmyJqR9f4y1t1BEeec8WWsZo4Afxr1BF/2Dmbzw6pC7gXec5aMpHFA3CQBdHELTEvXwg6Qzw9Gk9vol/fyamJ2YGNTjpMy+G+Rx51J9Rddm8QB0AtjkQJwOi90H7OSiPuUOvcAJVXor0K1DyKOhSBlgfKNn3skss5OgkpWDgUR8HdH+E4H8fR/pteLgdGjk/t6UnOoANyclPGc0xUrCnUfzRKgGkOG+NSFFuyEEU19Njgql23Tu/Ss/S1mNd2jfCW3fsII/GJ+ZJgtjg== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: U3iqxSIdIAhM8EuVMlaQZpw8+Htjl0mUvBJYUa5+KozundXQXmOLX7yODIpiOH/32rin1fZCr0kEPWA4Y2WTd9CHk+j/JijGu7LFJWJqtcLpSCCf7hWUW+9GyG8WEpiklrntH3KVOzUVDpR+I9Gq83SU51GasFZ8MAxeeZxeXBZvQhjFr/kbJIbDFzi0uhA6sG/bTnOK/6waq3/by3GDZ0CxtC31TtBMryP9E/0XoFvVESgI/3oXaXYD16nBLaQfRk3QXkGxvgR+p2lOGD8qThUKFWBqZ+jqnzsVjY7JdKu6TM2JKZwJ1hN+TdeUlin3PGN6nyFHfc9GxawC+ErtGCk3j04jvDHC2J0xJ+aFVXe+IT6LRLmX0zYrHp+eLUI3SxYQul+G6fnOu1gV89VySxw59bQNWw8tykmo6+ZwedK+5kGi0d/+POJ4F7SLkVIb3iK7UJrq1c3xQ2p0a6CuRbEEMuzFP9liduzk3tZdRcMNQq4TywbU0nQfUibCa0Of7b3L5mSLq8Osxu96iRBsQS0lEcuc66mFnVkv3VIdmaq2JuBAOvqRK4ataGHm9VPlhFpj+wKKIOPpTycKdnyyssc8a4mGotj1leRLwu5zxbviDhOPRI+1r1kl3E6F4wmtPf3f5/tDYnx+f8kNs0w4J1sgRPyvBF1RDif+pXC4dHzBk500J7nzVeTKUYF9lX+EkPFKcxWJcYCQ3eDHcWZFObXdYuu+pAAkPCDAhMu9LXcOA/BjnLX90wtcNwG/Cg5ilhIHguQfwGtITRvnDLOv27mcJV9No5GIA3o4KKP93yLykG5shG4oOWCFozeWCrrQcIUdNttG8z3McTgzqyMezgQdy8T6oxDY5OBuRko5Ha3+F/+D2ewXMc17seszZ+iapfZQmTw4cIkQ57/C/6+JdsGRrfz8uaD1bpOKA2I9t2qDmSUvO4EIKQqGh7RRtndElkxR4qK4bxaC3GWcoXppadEUgEKV36wRfYF//JCqRgal3PUNWaomts48OY7wUjp5Xf0wRXQiUSvBTfrbIQkHu1np3Coeq2j9bel7SK8yetG7V2wg817RMOksXSqHfzCFN2FPk/V2zPGmwryI/xckeFvc2lm8pPkodjIdZNvh6/Xxcfrzth/3x7AYITXsy8QV9ackHjohYrF/GommvGuv0Yu2057aof4driI0acs7JLyWcCbJAdKc6JufK/l04+tuMsJcJIukfTLkoOFUC9T9AfFZAXu6hHpwPz/Y0ciZoRqc53QQj8PU0gSiuvOEJXudIdxCe33kLlrcYw46FqcyDP0mOmG/rKYxnZWuj94yEMVmQSEnUbss9iYAN9ngZiXUXwp9OTW6bFMwuu/cb31hnLy+SnQcmYu/YokTmGB8hPNPI5nK1ktYtbLrCjiCi1Q7bCPz3gy1Bl1sxxrIV3vClK9mca38za06dlwcItLyVfNHTfOLfnu+Ngo/3q/wxV8fdHAMx3I28c0tGozMsSzsXByZbcIOy/Y6IKg+BzYSS72/72ove9l8FKHKZ0RSks1QXMh42Ia4rTLWhhtF9ed3SZ/zGiDo4QuvqDc6tMJHc5FGzrdXWg/uBLnfHbGsvNRDABIHQpQKHw5A77RSiPNNow== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 57298481-21ec-4c3a-d5a1-08dd6e84ecf6 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:34.8027 (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: 32C4wqW594LD774ozudViT7JEYjJv/jb83WpXPQLfPvPlulMpTAEbPlYUmX6cS32TE4dF3BAK9Ol2PEypLrtuqruN+XFuIolJQfRkWsXn3Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 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 f7be303af024..56d5576ccf94 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -578,8 +578,7 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) u32 exposure; int ret; - switch (ctrl->id) { - case V4L2_CID_VBLANK: + if (ctrl->id == V4L2_CID_VBLANK) { imx334->vblank = imx334->vblank_ctrl->val; dev_dbg(imx334->dev, "Received vblank %u, new lpfr %u\n", @@ -592,13 +591,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 = imx334->exp_ctrl->val; + analog_gain = imx334->again_ctrl->val; + + ret = imx334_update_exp_gain(imx334, exposure, analog_gain); + break; case V4L2_CID_EXPOSURE: - /* Set controls only if sensor is in power on state */ - if (!pm_runtime_get_if_in_use(imx334->dev)) - return 0; - exposure = ctrl->val; analog_gain = imx334->again_ctrl->val; @@ -607,8 +617,6 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) ret = imx334_update_exp_gain(imx334, exposure, analog_gain); - pm_runtime_put(imx334->dev); - break; case V4L2_CID_PIXEL_RATE: case V4L2_CID_LINK_FREQ: @@ -640,6 +648,8 @@ static int imx334_set_ctrl(struct v4l2_ctrl *ctrl) ret = -EINVAL; } + pm_runtime_put(imx334->dev); + return ret; } From patchwork Sat Mar 29 05:43:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032579 Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021123.outbound.protection.outlook.com [40.107.57.123]) (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 368331ADC7F; Sat, 29 Mar 2025 05:45:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.57.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227144; cv=fail; b=YBzBpxXcYRHMuINot4WZ19RaCIV2f/A5PyzTaSTVrRXTX23Hurb1KzQVhum2MNnfYzW8+nNJF6mltVid8g1vTUFdZ6xMZ9ie/JEcH0++oNHBDljrErzpu4VnS9lS7U5O3Px6DpfG8Q51cfRCTcUXKxP7sOkq1bsGpA06PU2C1GY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227144; c=relaxed/simple; bh=6a9I32LonJ8NRmEo1vrjcWwHqalQmswIA2RjzYUTxyg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Jyqc/CTrTL7bjffPdCU8Oh7DAAxUXw7qJ6/gqaGP+BvTy/RL92Op6i9hUlnYDkW/5GfXE1a7kKNSmyFOCxIM0R4ANcGpJiDrMBS9kNVEYxRCe8hvI+iAiKxNdAuwpnA5xQk06AUcJgxYJCGOzG+ZAXGnughrfMXX08ChEN/3ytQ= 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.57.123 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=y76pHloG0aziOzH5ZLctf9YLK3tfBxT8UeBgDMvrUEeI6tCAM93Wz7vHXQGoVEOV2X1EOV7QBx4xlCqrw29ApLE7p5oYV2vZxtk9IY3K8SwUlP5W7iBqlY7sY0AW8M5zEnZZkx358ublypFhR3cjcOiS4u6OjOO1A6jDltqg//nRpWV9o44BOV3Jd0QHw1I3am86bMpSTgeGqG9zG4gaeq0RU8guoJqDm35K+NzREeLgrUVTLJOF4SS7eKyWs3gNZ8TtGHqIHzbhso+YhXc5/Xf7PI+oCeHKoyjF81yHob9UvuL45wfDflf6J6wTO8HD78Sj+tsX8G8x58nvVNs5Yw== 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=Dszm1Xu3vn82UX0LS7a7CASGu/2sx7EC2Q3wcdMX7pE=; b=GJ7YPSCl5lepk7HiZvEN49eV2SBXasN0y+7XA6oq9hV0t1jjyi2FuSGFPlRrEE1ZcL09i5Za9iiP9XgQD69T1lw87K6+TTCA7nTzdp//TwlMbXDAZCkRZWZdpTGaEWa+47XKROyv0eU6c7s/nsIT7BQnjLHawpSW0C4m7CKnXRSwVU3dtWLOTcdi+B/55VBKHIGiVIafQfRsC8kozVInjEGiEK3n0D24wp39TKK/LTyxzukdD/cq8AcSKR9cZuP4I9wvFRSWW1y5ZKbrfPyWdJh4iHw8/tBbylp6wIF1r1B2ReYw1W/GxCtSpgY7jUajGmQlalWMM9znpUM6jyg+5g== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:40 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:40 +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 , Julien Massot , Zhi Mao , Luis Garcia , =?utf-8?q?Andr=C3=A9_Apitzsch?= , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 6/9] media: i2c: imx334: Fix runtime PM handling in remove function Date: Sat, 29 Mar 2025 11:13:28 +0530 Message-Id: <20250329054335.19931-7-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ac44836-3a75-4de7-3dd2-08dd6e84f046 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: yW30YdQzPnHHBXf3eqH3v9tG/HoUFYnpQCM99JzDFubY1CfXr+eQHsSM7j99psIVL/XB63B/TKZ/jCGt/FCIgmmtNbGRwp3RsDGTTNshGiOznlnvHB6JTyAmEUkhwBx3LuvW7G5NsDgF942ZkWloATm+gTIao6KEklq7cFIP9gF57+gMtnUe+FUOgJ00YqNwHdE4Ac4aqnnTeENzPH4Z6YQwsirwkBmrbOVWtK3qT3t2C4PZPtPhnZ8fSK9pMrVgfjUsquYgdcU5miXb3JFLvpsh+v1X9AZ0S65sHwnf6OBXqWnATOJshlj5tFLVY0Nzx97rMoKYOfRXeP1vQ1SBRSLtsXoewY4ZlF9dSTeG6B/M2KP2dJ2KL+AfXd4AFQxD/lHsrTHJy1WOUm3IT3WqUd0ER/Xg/cQVQVb8Sy3Ylh1ZzihC5c7KN57/Ta+BXl7U+SULh3OTyqXb42WMNJKji6WwDL+zOVV03vYN2G66nelRbkgqDRKf+8xR2sMaRtJg/8VWzeWrjQ3fjO9Dwh25uBOweX5MCvU9uUqyw7XNKVZiyF+gW88Fydn+Edr8U+l5g4tFZ+nfVttojtZiNqAdENhGRMZVZtLg/PrXayal34pF5TGTvpaf2uOKjHSydPpsC7J7PCZLaU0tpBJtIHoPWfzHasJMPPenfvdcCVrv9bryfCTUu2Faeja91g+LoiAPg+I+O+3J6PsiBr5OwAqe5wlFwtBCDEj4FTF29nRZZVqbr7gfKGKY0oAaBgSsyE7w2u/AO3/8Wk6iGL14vE0VFVeCoGX9rWiO1XpbWM7pc2KFvhkRYKdz/DR3jY0G0m8cid/r9V8o4IGZlwPt58BejXMUj8Gg1qbt9tk4XyZwJYfm0+nM1m1+wf/SQm556ktFQL55d16wqkfmrz4FOuhQwy8qW3t/5Fbro+qgo47jtSkH/qB4PmHxZWbGZ+RMgKeuOkGRIUf3gj7/4EzrNBGp78J8S80rFOk9cMj312FOmqXdNKmPG8VaMAY4IAxriNCOjZwbK4UQp+t6WRZzCgBcGyiBwUvTtKGjLTMrvLlYazHNhDyk+qKIcgHcvrxiMhZVgbWt2mJcYV1WwQFJRbbu+oZHA3A5e1uTNzFMlIog39vBvAaotioIeX/AuK+wlcXVCjkL27IxLc1KLOUAvmnFOc1P391A1gw30VZHEhECsQSukcyOhiePkd0C66Ev3OgI5E2/zXk3pEWVVt/LzS+nzDbrlpJ/O1QFYtRQIkw7Ws1RBwTr0CnlBm40T1JJky9q8rS8mVyfBZqPm0WnXkXKKG1lnLjUABigmJns8OID8e/BqYYZ8eLNEzp4U6d4WBz45S86Goez3o6wGhUjooRBrwomSqbHfrpk8PbG+wOWSQJVc8MeB3a6Kj4vAFjpvX++qAPdzL35Wfvqm1X1eyjhutV9NvLxOL6SYkVo6s+sT7PdIumOimmJdanrSimK68sSEY/8TRzK4v2PqHHw3J46dg== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SeT+Q2YJCuBGoJxRK1TNnWMQ0pdKE0PxcgRgpv2XdgGtZGECuIBFgm1QWwtS4aItXMVjrpK68OWkKP4oyBIZs5Mhvgps49UhUKZNHSrpzN/iQ2GC3igjIfi9xLyWJnBXpz860ZpnCea3cik0TPr1Z5npmtwyHSkM/dAG6G3SNpP0On6KuSJyJnhanTJYmIyFd+7jYLWw2yIrBX17iu78SBzfcejTA5RDU2TvUITE52ubpHyQ/9vVs097sBTOHqUq/tPMumGZ3wmS8wvs8q10nYyCwwTo6wj4gyz/M4PJW41X8v326BzmJeAL9o4EdGCj79kAocXGkbi1zhVvDHjRrAa+RtB4ev+Dq1iYhYQ42er2O6LREaZhxvKrGZs1kKrfjEz7Kz0zkyiYeeEiif+qxeGOOlTCneIz69/bkzpxCnvBTnFhxSDyQVPKjv6W/hRp5mCG4/MRe5TdFTh28kGURn7GISDLW41H2cF4o55sOPaTBqqm2C62M37JAluGHx/SwbzbLp3z19seUY+QFO/BdJw6OEBhtNa6yCTM9u9ss/O9u+aUy2eZ5Oglegq63tctLytjj3gkzT1xh3gglDIH/ZkEAwRPA6XMRu1QciaEq16jGgzFnXpKtL2Sp1h70zTjdcsWsj/Q3PvesUPH4J7UB/1lnDK3Rngnj2OH1eNy88K2XNfBEZEAuYvkJQDy+hX005i3X0Y1yLmYp5aIGuQyAnX7qLU8wfKe7/CsNbs+/eIeQH99dks90MAaBTYiymy/KnzgXdFHV5Wwwh65VCzzRqxhvr48m4qZDOmq7qb0/vJcvmWtVFl8T3iPoJ70X3nbsQV/1nncWbBCisoWFcBsSjCLJuL1FsCE9E4cM0ElajtyLwByg2/TP3/3C8Yy3+PZi8dPjzwtaO6Aa5haGkqpEVDozasUAw7LQ0rnQoo5GHNFKtBMw+Me0F8oJ677JOGa7EatGXdY9Ef7sOSIRQ0JAEw5wVJrVVQi60PLPhYxaOhy4gidsvxCEOm2du1SZH+46DHkz/tAYrEjtjOC523LtFFVJ+RgtWjN2J8SzSjP5pwXFkDvJI1F7G71pbTiyiFht+lyODrMEg7rH8TM3AJx5kq3U3F8AMabxWCAKLgxfEAGfaE4tbpxBUyXhX2W8x9tbXEbDldKfhK2NHnWu32CkcbQWaoqJkDrL0fkNjwKrN8xMQCgi3NhsQyvpJGu7NLwRgI+sshY4R3RrLfwDUP9VjW3yDe2/WMQ+Qn8R2HquT568tG9VU6FiE9AjZPRo2cUuHcrSCV6+Ko6VSD2yIp29kCmkv1GrMmhbxHBdekED9riAGBPgE0tzbmfDMPJPa6PdysETS4UUKL85/GCRNhLhDKoP0Wx6/PaJpPk+xBM6AF1i6NvHfvlRiqQH/pFNsaEbK0CIIwuaifNLBd0gtk9aymuuoVyZwKwBuL7fr08PnWm0VrGZcmlp0NV10l2Otim/sBPLdFdS4fsNXx6DYhiBu1hx2p9xcsWwFQAO6rEd0mr/fO7+qLGvnERpAP+8WgyDmCfj8nvGcuuf/dUMvUbV0+RGr5gaXcoQOjN12tmJfkcYMh1Ohund/cqTjQYfyzaGx3PuQOawIaSPa32rnXxnQ== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 9ac44836-3a75-4de7-3dd2-08dd6e84f046 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:40.3666 (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: JKIUXweFRYN8prGxD1A/YuIcB9xmDREfnIZGmWmF/aXO2fYWkwtOnlEKPY6sp2/9TWOKCUXOSt62sRbgl8NbQGZZl7W9/ceJn8B70tMjef4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 pm_runtime_suspended() only checks the current runtime PM status and does not modify it, making it ineffective in this context. This could result in improper power management if the device remains active when removed. This patch fixes the issue by introducing a check with pm_runtime_status_suspended() to determine if the device is already suspended. If it is not, it calls imx334_power_off() to power down the device and then uses pm_runtime_set_suspended() to correctly update the runtime PM status to suspended. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 56d5576ccf94..ad28f12c29b3 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -1328,7 +1328,10 @@ static void imx334_remove(struct i2c_client *client) v4l2_ctrl_handler_free(sd->ctrl_handler); pm_runtime_disable(&client->dev); - pm_runtime_suspended(&client->dev); + if (!pm_runtime_status_suspended(&client->dev)) { + imx334_power_off(&client->dev); + pm_runtime_set_suspended(&client->dev); + } mutex_destroy(&imx334->mutex); } From patchwork Sat Mar 29 05:43:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032580 Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020109.outbound.protection.outlook.com [52.101.225.109]) (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 468743594E; Sat, 29 Mar 2025 05:45:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.225.109 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227150; cv=fail; b=iv4m6dAGKy18n0IABO7iQTVccrlK+WtPyN6AyvpiV/lrcycpTCtyA/L7edBf06jr1tuvoOtQsTqOncf1FatOePTva3Rjr7XxPCLro4Hoby6iNq+EWns1vARZA6jUrp2tzpsd2jmFCC06O4o9Caz5Zi9nKfO/7RkyWOiVT3JxY+0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227150; c=relaxed/simple; bh=rPVwGWkp/okUYcUra2CDOnIa58+TCJ7ngyQn6wAr/7U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=J9Nrz185PiIBlL+EOKh+tB3moUO9VEUMT1k9NgA465EEKgZgidTHTl40nrYaLw2Ya75oyjAX1EV15hFxrRVkeFSQyykETdBYL032o9dVh+IyURksHpItbTNXE4aoYmmdEpLDHj5DyrXQqBtHTikNzADx9bTVvWva0M32UHr1hLQ= 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.109 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=uZgdFC5nWkb/jgLII01LvrM+mHK+3IeNRkU0xKvNAPkD3tNwNC8jx2C8ftxO+OQ1/u8GXe+yiGXkX0R5G9+Wc8vqTSZx0am1djxGL0PvHe7dnDzo9FNfmVbBxuyN//n8FcA4X9frHKwcuqx/qSBi4TR6IrTwYuKBrjkwq+NsTeLKb/Sh280ij+67/yUykWrVEIRsgEvpx5DlDiGwRfSpmXvlbbLx4nIh0FSrCE1AhijABZNvbPbrVvmykuwU1ygy+MTd+e/DarMOtgqTV7dcYaqYqjIf80FD9mXu/VRkGgCJETa+iDEmz3yjeADQ/92BtzHgPIGcIADlmCN8H3ei6g== 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=CTwa8Ntzxwdz8fe6nHNlrFg/3ZhPepbq1uokg6Dxtcg=; b=o2e1HpFDGABgZyf47bQcYAodZzFAhAIVN4i9kJNi6CkGBcESKUKhJk/cPegs2EjD7MWeH3peX/drZjWvpOwAeo+v7DnG+uazA8E8ZFE/k8Cc3bjSq/XujTLfGCzuA/JoyZ6Rh7BjsGLqa8Z5YrqDJ+P3bEdGCPqwP2ILL1TqozUSsa3yHxObos9SbhslvoitBAiZUtSk/Tn1He+JkQzqrUvoF4+T0W0uXwUm32eUSTmGemSskIMZfEWsvM6ChyDKEhWVjeRGs1lGOXKrLe/e65LNuiqX3Sf+95wX27vZIS3b8RjJIj2V+vdwVC79E7pJm6+/wlQSmWKU0P6GK91k+A== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:45 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:45 +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 , Julien Massot , Zhi Mao , Benjamin Mugnier , Luis Garcia , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 7/9] media: i2c: imx334: Enable runtime PM before sub-device registration Date: Sat, 29 Mar 2025 11:13:29 +0530 Message-Id: <20250329054335.19931-8-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: 94bd6181-bcbc-43b8-5767-08dd6e84f383 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: WFZvgoFxFjMVQIOVuUlabb3pjabQUHYDvsPAEjVTTe/qlnVrbaPunb2eIXeH29/so8Or+YdlmYqEJEkwwRO7S6E8Y85uDW2DNCDexLLSSnfdiNh839cOC0CDANYwSWDBr/8y31Wa27hpafPZ0IrbJRThUj6Ahai/dGvusmUa5NcKGbvEfwnl2CkDc/TMaTicKjuXeyDgVnSgKn0uOeJlVxALivIsE2SkX8RoVbZufVedOv15ZYvSZHCFpJ7pggqjtulj3pKPGoAEyRGaBqqHtKLYqD+mji7SdKtWbHQTfb1ntvKFSguwN9H7n9c2NVRYcK1dgj45SvmdnKWBMfivtVHx6nyD/uLBl5SwSL0A2bixVk5nz7d9oe3OxZMgb8XV3raZCYT3z771ubXsUwidYmVsCCaaoHpeDu9qsO6iFojvlhhU8/6xilsw3vtqtSPs49Y+okBAqmBMOjl0FVzypnUEU00j+xUgPsDvpmvnMQArRemBCq48iovI+l/jmBvTD6Kt2//JkNOB8gq8fWdr3aMWqnEwxfPqnkYdE/sdLP+rJGZo1MA4GGmmkoPz5dxfdKa9Xk5UB198uRm2H0hhxKPOs97o/CqF6YnUZ5+7BuVhsyUl04Pc7PUG7Tc4IClkh20scrKqP5PRDOypwY9YwNb7n7a/ZMM5boW6JRfySsEw5pLw39bEwzyyK/RBNWcnJlDCLs6MRxlGIeXKLurTWbX0HaNaa0wmPHoH4RXP0VYCfnfn/wt81endOxRf4d4HgyUYTUydpChnll9X1DhtQVoguNB0txe0hq4jD7D2/KJ0kgeRQUeg/dSOxcena3aYwqRvttbw2NoRNxVhX+b9k9U9XrjQFmCMipDxRYbvY2F2D4fuwklpeWO2bG4pQFjFPOMUqTvlJSDKoBCqp4iYdPnmeukjzr/P7EDe1VtydK/Z+12ygg19Siz3exe1dyn+Z6A7pH3X0J9COigkDjmOsi+4TT1qS/jstTU7b1d7gsg3UzI4zF3EOrx/44dE2Rt0C/vl4TGgFR1Iw9bhJLrGDsh2ZKmwCi4kKkbE5gnlOyezjswnSrYHS0/nT4WdTXcERq57hDhRaMMEZvbN1ySwdw881IYJk6BKF5XCLBpivlCqia7H2QdYUMcBTKEs252PyrU6M2RSah6Z5hcrodLBOR57NCGMCFOLUH1hoK2QoNM+OUpSISaasgQSagJBHEbSITLAbBda/b4U1d88WYOHw0jWnh/cEtufn/cwb8kg7IQwHmQTQz838NCvpB2+qvWz49EoQxr/zFW2OHSIyH4nqFMD61Ki206C9lSjMw+omr9nUVYRTEG5KkkRSbsq2PHNkfKYcidt9P5PCy/hZTdZACXdsx+gVGLjfmZdhDG/ue3T1H0kIUtyvxUZUJp/0gMfkTb1MgLIovajujzyDm1ZJaLS+qtCTLBErUjjV/QrxX8EaufviABI15GcmDFmIbrkUM9T3pFNwG91+dufDjAx5A== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tcxB1mv++ANr0wZOoZqRZssCJbl+w7LMLx+t/LVtXo+XBsYMaiiWpsTI4B6v5RkSNMyWnhhd3CICp0O2nUYRZ4WKkg6IB/ThvxTy7pbOsCSHYKXul2mZFcvM8e1RQ+5UTpQgcpyIyqR+D1sLKLP/yVi4v/vXkhZgMTZUKVSKHaLdXV+Vxe1X2mF75pZ7DvNa8b6VeuoVdI+yFOr2fzYievBqOwBUWyJ/cA2GxEMn2IVKgEJH99kuGp5eSTBqUdUjxyvI5p76Z9hnxfIGXloT+7LmjcSbxCc5/Czczjm+C/ZQ4PPjUtZQRMjBjFMa/H3hMO2+rLp+k7K6GJ5Z6u019PoRCUBK2+XiZFAyHP5WmGwEW0UVovEv1Jns7vbKhyfwPKsF/d3dJ8xqDg6BJithBNEDMTNNkPDBQqbqrdNIxOF+KQLGxdtDfBRrge+ikFAs0Rg6IrCiaCgFBRShek9hHK51uMNJpYDrTOKrKlNRoRqpeIVWBgdMQuhWHSP02Wa8xMMRHTuqNvjQXCYHCI7sxAErbYDTZ1CMRHxEWhsQj3C0iysEyLAZEpEC5AubTTqHIp26CmDYNMaGt4YA6CO8Xj5kKXVaxWWalL0Cig/lkGrGslHGd5po/TrCF272z0B0319A78R9u2GL3XXCbNwj4n0CAztMG1Gtnh9HCDntyIlQ2cn+VNb472mc22QSOpNjbuiGON0iGuVQwOoF/apd7N0M8XfT5+w1m1RSogbgt0mdrOW16Tbq31WzL4pJzqNabT0IRLo019IBtVawDtC2gaWymsG8vAj3WPuWycx64Rm0IWnuze0y9WuyCisShjmAjq6e09nWj2icqtA6acD3MjkTtlKoXb4msn9E67h1fjWDrilXW9cNcCrasN2l0z0pZMIU/lod6c1mbjNV9Ot/AK7GCR9gZr8XsznXfy0tKU2WRyWBDYLb+IzIR8FNYI+1AfG5MyB9aL24OljLAFPG9H2/85cVlckPd4oYbrwmxH4zud5d0lVA06f/HrOrHXB3XiUwW6uPDIVdSrr/ZO4JGG7ugYEpx4QHTW4VUTAw8sW7QQ9QDffNYEqRod8sR0qh+TQXl+f99jVTZb5nLHGq+yKB9U9ZYj/dKp1n3JFM4C5DjWUXb/wWk700iLK1wFJWwiRgis1+jJR9Zam0gnY9xuAtrRWmfRnfoB4xgQU+rxCCX8Y55fggNOLoJtMCDhTdepH09KEm6ELJhHk3GdZt55r5S4TiaeQe9O//sGPcVMKzLwKXeke9La3trtb78RXmPZbZi3WuQLWR11Ovbv4kQm05clVEe79YbNTicSsqdV0gMv3VvOg9qFzvK6kPwgZlQwOPNMoWSSYdgfMYPHwErb62fE2QEEl/unPtnaO9tnaYmqpyMfj/qwD98Pwp+4LOjNhds7wuXvhT27W11eFdlN0IXz/m+DhceKPKyCMdlGHvFV+FxE7rgZIVewCK0Ziy9IxsLPrQvG0im6BTJPFzuz99i8IU9SuaonIYrr1IhCUdm4Qkzec/Ty6Hmq8iCL5lhg5n3fHETqI599AjajB4zXlhQjMJFXUJ7c2iaI+RecHBfpqHq23d1IYlymDmc1kS/3fFNkraWxHGbJ6vZejaPg== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: 94bd6181-bcbc-43b8-5767-08dd6e84f383 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:45.8072 (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: QVdPRv5LrMowBbgb9DuIc8T4UKD7dvp0aHyIFkAKQYqKZ9Aqlhgd4bxIwRtpEmhXcXUfFDuOnCt7XPprE0O8/05qeoTYdKhd1CI52X/6Bu4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 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 device. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index ad28f12c29b3..169c3c4ca9eb 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -1287,6 +1287,9 @@ static int imx334_probe(struct i2c_client *client) goto error_handler_free; } + pm_runtime_set_active(imx334->dev); + pm_runtime_enable(imx334->dev); + ret = v4l2_async_register_subdev_sensor(&imx334->sd); if (ret < 0) { dev_err(imx334->dev, @@ -1294,13 +1297,13 @@ static int imx334_probe(struct i2c_client *client) goto error_media_entity; } - pm_runtime_set_active(imx334->dev); - pm_runtime_enable(imx334->dev); pm_runtime_idle(imx334->dev); return 0; error_media_entity: + pm_runtime_disable(imx334->dev); + pm_runtime_set_suspended(imx334->dev); media_entity_cleanup(&imx334->sd.entity); error_handler_free: v4l2_ctrl_handler_free(imx334->sd.ctrl_handler); From patchwork Sat Mar 29 05:43:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032581 Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021079.outbound.protection.outlook.com [40.107.57.79]) (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 3F3A63594E; Sat, 29 Mar 2025 05:45:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.57.79 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227155; cv=fail; b=MQgWpvak0Lkq+NxPVOnj8ssiIZtpqXSqip7PkdEZufBAhH7lkM1QukIsXJNpdZ8YNcd/klj9JECSedmRxiiOWSVIXzz6RCqTRIYB3dlD9hPc5NrXUqGoTP8596hUNrRcjqI2IZv/QhMnbuS7+lcSh6va3meXCsS62PlbzSSapEY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227155; c=relaxed/simple; bh=+EtqznvfnvXwkMwFwK+jSBH543Ihb56Bg4ZZnJPQ2IA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=CQBFf34Civr5gwtbJitvQj5j5iRNZmUVBslhJeTNo8c4nThrXX3GTe/q4jAIUxxNOcEl7oXJv9AxBrNTN0LqGE1rkTTIAMNxp41svCxi6g50V6Pe2DwcP7ob7L9NzS1YuF/97zr3+w16zpY/V5jnWkPtK8JpfsB9kIjR9hSV1TM= 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.57.79 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=fk8yUORsQb/aYpbLRaGQB3TFRxEXIsHvYCqHJHD/oxL7S6XymszYfxZ7rY2/CEYSvU/uhO8Ugijl2xeN3anGZmA1U22N3z47Q9T7+z83ImKu8J3zW0PIG3d4E67FlbMGkcfw8u65lzQQmECN2OWXhr67olNK8ItaaBS4vnqjdS42fXzqdufz1+Ig60OXyYMHJnQlL3xR7X5+zhCkdJ9C/kVBi7DaNg1cWvEHss0D3vwkhdf18kpArv8HLhN1AKN8RtwRPmi1rzQTrLYq5aWMstIX1P2lNqBYhp4gJO7oG/VKIaIzgRzlf0NkYNr3zSs0CI88hWwSYntmqVGQo5WwZA== 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=DHLcdMCNn/yeuA467vTb56UvRf9bafNJHUU/94+bsQ0=; b=S+fyUw9qN4On4GI4jm6hyle54FFHao6U7HNev0VUH1r+0Otrh/QrNLtnG5CABMB9pDRZO/nw+X+fgVkl4l7PfnG2IS2JZjqavqYKmX1gx719g+ePt+TCnfbKuVo0DvSnbkDnf+MNfbhRcyB7iwkUNs9UcYIpz0wq49o+kLuirv9tbHhTQvZ8z3nMYk87Bf64n5gyGlllscPNWju8tng9emPG4Fm3GiW9T0xXQ+UeYPvSy63YE/aQ0oZEdg428ECgGA/GiumT9G5542v2FRCaKRY67gY5LClkZSFs7vw0yYqBG2dVR8h5dqVRjH+ze4YdbyZTTKECwfdupTXdaf64mw== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:51 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:51 +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 , Zhi Mao , Julien Massot , Luis Garcia , Umang Jain , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 8/9] media: i2c: imx334: Use subdev state lock for synchronization Date: Sat, 29 Mar 2025 11:13:30 +0530 Message-Id: <20250329054335.19931-9-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: b8a657f9-d7e5-4e4d-e20c-08dd6e84f6c9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: 3imdyihFJYlLGwjvpldA0OHfg6dFBq1Eg+QKXY0fRmFXRw0HPfxYdtwPUp11vVhUhUEtpBxMTdcEmN/RVhwV0QAC04SRG6NTW1mZvEnQgraLhhWM1D6cZ0tLq3MMhIUiGEIVLtb24K0qL/iOOuvoaOuGZoIpPUQIR8Vat6D3UjHioydqocNcT001GxE5M/ykrzS4KQmmOzuJBWHkK5rKdsmRFNvhaFD4W6iLqGe0J/A5hpxz6/Ygeg2SM4CwwU3M+7CfT/wo0ryMBAodgZ0xPCOhmrgfHoStIwljjH7j23sh0E2su+ufMvonxrW26F0/vk9zGmnFFAwBu6RQuUXg7GXfp98l+jHWMVcN6HAWUU9KyTIgHUfF5PDPVUEjjekvVtyaGiTJoXuYJMcciQEQMOwLJvMtnYyql/7VvVaoYz2th33YVv0k5v+5GZVeDoKarHwRYGsfMVXanL2Zuj3USG8AUGJhs+U2HUCOKs+Of/rovWk/LkTvQGEpCSmMuoPtIDYY6RZUuK8f2WibQqLVjPnWwm/X9nHjQnhY8RRQ4+RSQtRLwdul0DaixzF37CARtL9Yqvy+3C490forHIhIY4Lb35Oug2bFjbCpYVNHkjP9IfaXsi2bMmHxF/j6aKeWgjwak9W9oQS1GaJ2jRMNfYGFwiKoabWd4BoXvwVj0aVeFlcnEYXcH5myv27uNLTjlSGMCXg7nU40pMEWIw+zvQD1guNLpIfje1daRQb7A4mdLJ0DDQQxfNxKAAxagqEDRdX7h3AuPokhtU8w0zRiezZcU4HAPw8E5wqnjb9ji4nQnOq2GJCVmuJ0D9wDHMIs1qYf/3DjkCjoR0VIjYv8/g6uJc12TbUGiGR1yUxxo4zZ/q6JZjaVDL51L4qe7AyqorxLylvzyYQEdCZLliSgjKcw17TgmzdtqSyo6iMdFTkODMR7S9uEosrbC0L7aqdfHNjseXJ4UrzkwG27SMIUhh4Zwvh2v1HwE+Bs2/8cgbFGLTeIcq7brbnXtYucmNd6UZu2HCCc3SpPh+dPIgz+2xMYbyZBCJXKEjRGxObAmDdl523KcIJuX7u62zvUVTTczuQ+MRF6p4RtwXjuB5fDm+jeonwA4+WM3JYN+3V7wmDjN6OWp1xrla3Eiv19nxtSGsXpNft/Yul0k2PrUA6VKAfYoasAPqo3WTLWDxFo/J9xhqmg68A2d2DVdREYDhGcn2BCv1bfwMKPWii2Jlb4IztIyIpYzuYaTqgXYxEfdd/hXfvtLnfAbK0AxjoUhVNQtUT2sVlfIBb6D5aSHmUNePD9p9iYGYEobeJ1vsAsYMGmqj+T+Z2gR8d8ExSLV5Zqs7chgaoZIEBW2A4yXigD2N2reqXHHuOXwUifofE+1VcrVlmg3cUz7gqM8FPNWn2TH3WtptQJHR+LLuAz/7tgb9OZrKg4LzY9xZHLcQpBu+pecCwqIIm05sQZqW3bNTKx2UaL8yYVsDaOn7FCPjNPdA== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: e3I3Kev7yQ6y3RSj8liS4NfkdUiFdHUu8rqW1L3F74kHyibpBYKFZbXm9PURzdSyPr+sGmMDPawxH+aCzhXYgzMfnFgQP8gty7E6tp/GaMaWZpEkw+HmQnjcnThkOhwswmVVR2pjgxbMmnExciqy2w8uReomhld+NEfyJ3HdC66Od+W/vdaiWBOAI+8UvHm/hw9Hz6PgxJ9AgIaN3ORsijjcaSXLTNeGuklwigH9eKkWOpwllwhyXSS5/REp39lXk0ktIRadKg1HKUOIVdDpA/704FrvuIcewDtjRJ4Fa9Dn/OIIYVKEmxo26tZrzIlN3xY8VDAtjn+tF/Sk/iuE0rWyzqY6dfV2OBOyOafbOMqOm73VNywsYNgCvZnQqxDtA6QaVaq7IVsWHSrst5OWiWaxGAWjmYtBQ0TZMATvnCRgvytSY3hqqm2DyaEgj6or+vZKrOzNKuDyKAzoQFPCjc9hIbEI5dzOG23FcCHWkQgQb76xBYdRlS6F70FW8kR6I35WdT5xq6cSjnx/9tcPgWH7zfciHyiH3I3Y8afOMtDXT4SakpwGobf/UWMRnXB110iGmAC4WjR7bbUSiwCOM7K81etJ4z2DeXXXQjIRo8MN428xfcHrTx6KDQEoGMQ3usMM1x4WGEskVv4+nIMDpeccdyxy81zV8TsbVhkhZWCzdp3YFLi5efFMsPGAd4xNu07oImPPi1bYE7QWFwuJ0am1KBFMt0ieYHpHLsepv/L1rLyYLHW2rGGGm++Yz8qD6h4BMJZIcIcEjjguj5i/T+n4HriRUm5v35ZbKhxggrDOuw1vamLJfNTpqShI5r9FLPNLHIH2FQooCOqx9a93ht+XPZGbFsprWGW/EYN8J3wu+LUqVLXCmjntJVsrg1sfoZK6KszrKX/bqITLh5Ajvee/pPlrZcaBOkc9/CQ5kPCE3ziiQ79uBENuEu9fojFlE0aUpsN1/8K7G7kEn74IJTKJFNYJft88XOMqkYGH+2QnZIHrv+sOEv450NnP2vL13GGSQ0jeHJNsH3Cg3jYS186pYNQ7jbHUCdc3xaQTK9IJpwNlOzMRUp0AkUnfw8T0kXfzm10NIO8hu2yO2A8JufaUYswhtWsiHBLH7G7xCKJRFos8vV9SJ8MaU7sAnAEG18CYr/SJhV7kd/cFPj0wCFQBsV/XnK1OnpLGz8o5/o5meJxWuJpRQBSAMeI80+zrEVe4TFws0jCMROsx3PZOadIk9wSqUOcij7Owks5r09cOgVqmzh63dg00ox14RW/YiJ0TYFQeAf6EEkVoGMfIcUI02kHsdSawt3UoLHL2wYr+7GZqOoJ9fRwNOdf55di3uKR4J+tPlYjWqdK6IWLiBTFicxDFCiP4jPInh7njJYaiuYnL5u7XNFaJja3GnSFlJGoyT3izhrCsEvG5sj02CEKjrea4j3RjjLjp9MTL9z3kTd08FpK5VkGULZZBx4DTWaCXxHhbJV2rn6kgQ7nIhZvKzie9wDet+2bkqi22yxdr89zEbeezj5a3wl+vNiGU1euYVBBdooBkFF2ocvIQSAk9jfSvu3XJg1cI33P6DnN1DoXiJ23N5OvAbfTikO/gFQSz8YOx8GJwVynqGl7ypg== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: b8a657f9-d7e5-4e4d-e20c-08dd6e84f6c9 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:51.3433 (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: JVRYft0TXSVOJUZEuVmJ5kqOAtCrLuCVcSckrcLMlAGH9e2SP2elRwzZ1B4NRUrDAMoqwaUBvG0PuTzW9mHs7+5i0iclFRHNvThMNwj1sjs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 Replace the custom mutex in the imx334 driver with the V4L2 subdev state lock for control synchronization. Initialize the subdev with v4l2_subdev_init_finalize in imx334_probe, adding proper cleanup in error paths and imx334_remove. This aligns the driver with V4L2 standards. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 52 +++++++++++++------------------------- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 169c3c4ca9eb..29eec4dd28cc 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -184,7 +184,6 @@ struct imx334_mode { * @again_ctrl: Pointer to analog gain control * @vblank: Vertical blanking in lines * @cur_mode: Pointer to current selected sensor mode - * @mutex: Mutex for serializing sensor controls * @link_freq_bitmap: Menu bitmap for link_freq_ctrl * @cur_code: current selected format code */ @@ -207,7 +206,6 @@ struct imx334 { }; u32 vblank; const struct imx334_mode *cur_mode; - struct mutex mutex; unsigned long link_freq_bitmap; u32 cur_code; }; @@ -755,8 +753,6 @@ static int imx334_get_pad_format(struct v4l2_subdev *sd, { struct imx334 *imx334 = to_imx334(sd); - mutex_lock(&imx334->mutex); - if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { struct v4l2_mbus_framefmt *framefmt; @@ -767,8 +763,6 @@ static int imx334_get_pad_format(struct v4l2_subdev *sd, imx334_fill_pad_format(imx334, imx334->cur_mode, fmt); } - mutex_unlock(&imx334->mutex); - return 0; } @@ -788,8 +782,6 @@ static int imx334_set_pad_format(struct v4l2_subdev *sd, const struct imx334_mode *mode; int ret = 0; - mutex_lock(&imx334->mutex); - mode = v4l2_find_nearest_size(supported_modes, ARRAY_SIZE(supported_modes), width, height, @@ -810,8 +802,6 @@ static int imx334_set_pad_format(struct v4l2_subdev *sd, imx334->cur_mode = mode; } - mutex_unlock(&imx334->mutex); - return ret; } @@ -830,8 +820,6 @@ static int imx334_init_state(struct v4l2_subdev *sd, fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE; - mutex_lock(&imx334->mutex); - imx334_fill_pad_format(imx334, imx334->cur_mode, &fmt); __v4l2_ctrl_modify_range(imx334->link_freq_ctrl, 0, @@ -839,8 +827,6 @@ static int imx334_init_state(struct v4l2_subdev *sd, ~(imx334->link_freq_bitmap), __ffs(imx334->link_freq_bitmap)); - mutex_unlock(&imx334->mutex); - return imx334_set_pad_format(sd, sd_state, &fmt); } @@ -943,12 +929,10 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable) struct imx334 *imx334 = to_imx334(sd); int ret; - mutex_lock(&imx334->mutex); - if (enable) { ret = pm_runtime_resume_and_get(imx334->dev); if (ret < 0) - goto error_unlock; + return ret; ret = imx334_start_streaming(imx334); if (ret) @@ -958,15 +942,10 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable) pm_runtime_put(imx334->dev); } - mutex_unlock(&imx334->mutex); - return 0; error_power_off: pm_runtime_put(imx334->dev); -error_unlock: - mutex_unlock(&imx334->mutex); - return ret; } @@ -1145,9 +1124,6 @@ static int imx334_init_controls(struct imx334 *imx334) if (ret) return ret; - /* Serialize controls with sensor device */ - ctrl_hdlr->lock = &imx334->mutex; - /* Initialize exposure and gain */ lpfr = mode->vblank + mode->height; imx334->exp_ctrl = v4l2_ctrl_new_std(ctrl_hdlr, @@ -1249,12 +1225,10 @@ static int imx334_probe(struct i2c_client *client) return dev_err_probe(imx334->dev, ret, "HW configuration is not supported\n"); - mutex_init(&imx334->mutex); - ret = imx334_power_on(imx334->dev); if (ret) { dev_err_probe(imx334->dev, ret, "failed to power-on the sensor\n"); - goto error_mutex_destroy; + return ret; } /* Check module identity */ @@ -1287,6 +1261,13 @@ static int imx334_probe(struct i2c_client *client) goto error_handler_free; } + imx334->sd.state_lock = imx334->ctrl_handler.lock; + ret = v4l2_subdev_init_finalize(&imx334->sd); + if (ret < 0) { + dev_err(imx334->dev, "subdev init error: %d\n", ret); + goto error_media_entity; + } + pm_runtime_set_active(imx334->dev); pm_runtime_enable(imx334->dev); @@ -1294,23 +1275,26 @@ static int imx334_probe(struct i2c_client *client) if (ret < 0) { dev_err(imx334->dev, "failed to register async subdev: %d\n", ret); - goto error_media_entity; + goto error_subdev_cleanup; } pm_runtime_idle(imx334->dev); return 0; -error_media_entity: +error_subdev_cleanup: + v4l2_subdev_cleanup(&imx334->sd); pm_runtime_disable(imx334->dev); pm_runtime_set_suspended(imx334->dev); + +error_media_entity: media_entity_cleanup(&imx334->sd.entity); + error_handler_free: v4l2_ctrl_handler_free(imx334->sd.ctrl_handler); + error_power_off: imx334_power_off(imx334->dev); -error_mutex_destroy: - mutex_destroy(&imx334->mutex); return ret; } @@ -1324,9 +1308,9 @@ static int imx334_probe(struct i2c_client *client) static void imx334_remove(struct i2c_client *client) { struct v4l2_subdev *sd = i2c_get_clientdata(client); - struct imx334 *imx334 = to_imx334(sd); v4l2_async_unregister_subdev(sd); + v4l2_subdev_cleanup(sd); media_entity_cleanup(&sd->entity); v4l2_ctrl_handler_free(sd->ctrl_handler); @@ -1335,8 +1319,6 @@ static void imx334_remove(struct i2c_client *client) imx334_power_off(&client->dev); pm_runtime_set_suspended(&client->dev); } - - mutex_destroy(&imx334->mutex); } static const struct dev_pm_ops imx334_pm_ops = { From patchwork Sat Mar 29 05:43:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tarang Raval X-Patchwork-Id: 14032582 Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021086.outbound.protection.outlook.com [40.107.51.86]) (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 D3C4C1C32FF; Sat, 29 Mar 2025 05:45:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.51.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227161; cv=fail; b=rO2d+jNuXeRt8qI0Coejmpz0HHs9kLgqwn8yngGfH4Sv7Ak3Ab5ts5IelPHpStGIFzrhypbyZcOFe3Vn5CdRXfPSc2sM+crae44iEU/ph9HCTqqJ8qd2k0lEuu8OssWyYOBiXCGQCWlKnACbCKf99sVqzw8eDGMz0wYsYeCBikI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743227161; c=relaxed/simple; bh=R2E6UWbsdTBXGeGv2pFRHXMAI96iJpyyemv8Ojm1/BA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=MywD09168Mtzd3SOmW0XrIW0P9R97muQEOtgGsF8KikA57o85ZHniDvoPRJddbaHOjXdqqEveWQjWRfIZYzwF6gj7q/gT2AojMqQOWwfjlQMqFSsBIwhXIZ7qjcD3e+zCv1shDWMMjUSMbq5fg+EMQgTBTumZGS6zZeXLIouyXU= 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.86 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=Rd61oSPHRh4kwi7K+uIzrSIXrAf3ijZ9jqgCt4h/v3gwfu6us/eDVGetiFkfzIIcGUIAY2UegAJBti2XthMdTy+GI+sIsAc3jJ1WATkgWfQFP5IcrvCR7t6kseb5f5kGnBT0laGQH+B09gSJE2SDfWdULjTCI0suBy2prgQoAjEelf7lESO178NOmnNIxXi6iKxB7PSdGf0DA15YvdcSHCsA30jPKpc+3/1IEfzSg54f9ni0+/nuVwhJ5nkJQ6F4iefmYMVIxVVDAUEBaQ/Cslgs/e5I08OMvzZN1QHSHmhEeOdBQ+Zz7YBYOB1yxarSV3jqnwJqzmDwG9VBvc3xmQ== 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=TYRwZqbOrsMSpEOh9pkDkH5zF6rzHfxTJVD60HzvQbk=; b=ES8K7TOsCBaVsPlo130OPpSlr45cmwcUDstxJvPHhhkhGOtTWnisWof7PTDCcjI1P1iHQVB/xe7jLyyXCnk1/AXcIu4t2gbx5zlW9W/ZyO/C0N4+DtDfcYHPLDvqVL+AaGIfSpbfX+cAD3i76RlPPfQWIbR3zkPg6m74EXnLN+kNqYjAOruwPau6ypC9i2aB+E2fZVHclfLWE7cTI7psgoK1DdfNO1Fi1Eki9iIVdpHe05vuFLTXSnHd4qkoZKtFUa9DSjkuhco2vP4LhtFauTUg48otIgAgH1hp5If43QUOXrkWbLi3W4RkyJMj+I6eVaYes/WHZ6KRR4sC3NDkPQ== 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 PN0P287MB1842.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:18f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.46; Sat, 29 Mar 2025 05:45:56 +0000 Received: from PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f]) by PN3P287MB1829.INDP287.PROD.OUTLOOK.COM ([fe80::58ec:81a0:9454:689f%4]) with mapi id 15.20.8534.048; Sat, 29 Mar 2025 05:45:56 +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 , =?utf-8?q?Andr=C3=A9_Apitzsch?= , Benjamin Mugnier , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 9/9] media: i2c: imx334: switch to {enable,disable}_streams Date: Sat, 29 Mar 2025 11:13:31 +0530 Message-Id: <20250329054335.19931-10-tarang.raval@siliconsignals.io> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250329054335.19931-1-tarang.raval@siliconsignals.io> References: <20250329054335.19931-1-tarang.raval@siliconsignals.io> X-ClientProxiedBy: BMXPR01CA0096.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:54::36) To PN3P287MB1829.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:199::7) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3P287MB1829:EE_|PN0P287MB1842:EE_ X-MS-Office365-Filtering-Correlation-Id: d692fdd2-6698-4d3e-4208-08dd6e84fa17 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: cJdRZVNLgoUsQlxwp2obg+Xy3/lm3NLa5aMwmBiXW4PynkLIhXAxHXEigk8uuSrtjY8nL35OPwo0aVOSmxngE718A4F0jzPM5xjFBsT2wHAMPJhKNrOVBt7BWjH7N+usGYn6OmuYTafCf4g2S4w03Xz04YX7jhg8ubkoKYWIVx8ND5yBTxykHZzttFndVarbwg3IsVLIFryPwnwgHukV/J+5J4Q1nH55wWky5RzTU/oIZ6TYYhenwI4uH/+96Dncp5/Vynr8KHPxkAX0a6d/esgWpEE4HhVPd11P8NUWeBJKwcEzXeF5Ed85Ie1kCz0K+KPtGYF1CzmXwQ299WC4wjrN5DCqLxVHAaQXWeSYjE7xOiF6mrhJgHFyfggR51CYj/92AqMPTatJDHi2f5cSTpvfqfyQNAVmkurKYPfCyRrirCYRPaLh7Mn7UBSimBC4buQMq8atl5Mo2b509/hZiQI5sI79U9upeWZ6Bv5FdMwoGA0IdHIiU0jg7+2fNsvpQfGQ1eeD0Mw++KkwZI6dnNTyiDGN50WVKaFqMap5L6WzuoSnArfDMOTp3DWiLS07cKxcKeJ1+7waN7gvUCQnHEk9NKaaN9RjefSSXpsw9g9YLZibu9Swp0VnbDJMnV91ZQfGJKe2FTTYacZ6M9QARX3qcAzc710C4ZSdanZJwxVWLM2XRSNVtd92YzM6xFkr1kiMAjDp9w5rS18cW+7R8Pk76kFelQrMH3FZjJKPWOBWd+kjZ213JfWhYeLzoeUKerN3m1jZ3B74rPeY0s488F0tMydvmHfv5sg/4tifF4jhP3Ve7VKvz33t2SCa4ai8TQd85vxhNK2iCMiwTSItVCEZ8HKSYaklepHJSjiYPK8iCNgrx8TU7UvvqyUw/CqNPuKb2SS7Lz2w1/Ey4y7ndJM/YG+gclbProVj9m4YPt3GsBfzcjDPtY79bCgoX42tKVzHNjDAJ8kTnyK4Jf0/7Im1KFTZ3r0icD+gRy06efzKWrkoojAlTxl8K9PQ4nv1DmdYeXB80/L3EuK5bPL1ZtmSpDP1DKDZenPl/yL5a/9WsGb6PwyghO37SBmhc1LVQUglzGidpBJ0taeWu1M8NhYv4hKdnF/NAS7Ef78XhP2bDFRJYkAOJT6WJxW+QLbakmXAQTgEcQztkhnn4S6Nsril+CII8KOavZzED6cM5cdDTZE42IRKow9KxmhKah7gOQxtBZRCwJiU6amqbgReqFzqOdddEbc3O4LlBwBpaqhPsEujxe60DyGyvt0sNxPYCVrFIz+MyVOoJ8c9gm/7DL7qatozUo+mb1SqMiEJ88/kzh3HQ2IZ4ZOL8Z4lDCwVtE8lkGoEXIVSal9WVa4jlmD3mjd3nSMkkxMSoDRarQGquN/4MrXcfM7Qq76q1SqdclwMkVmzFpOZ5KOGIhlPLEeluv2uOACJ9fWlm/NuXLX4fTiqH3QW3TIv8G0gWxru5aTFKmI1gbKU9XpopniBdw== 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)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AHTZgzGViZ7qAmh44Ru1Ce0e4cyMDEN+E+VY4glvTpeIM63JOBj1VeUQCQ7OBXA+i1cGzSf8MqK2PWDJAm4Z6l6+2YJNrYiS9vB0FFxMPj8DuQp10ayCbMe8nd8Vap4jHZK+j/kHh+GxpjwEFlGf+s7CunwUgGyGkW6S3o0c9uYpHZeFFu39i4c6NrR30iAiM4lIxdJxvZYUDjBjtyUZYTbDNHScyyXITynfmi14C+FGQ0lEBaOKb50Mv4en8JDPXu7KufpnPhj/UA5NeHydaibtNBRARA6nkAYRnjGTePasCgICpe0+gzUObZjifxnVdXXsuw+o+k7K3I5Ffmdo2tnS3wAIsjteXyhsDIm5n0dLG3ZDi6nwWkDVIc4whKAa2h7UicZVqfzCSspqZfr/Z4jePSvNs8lu94XnW7L1Gumrh+Ok77F7DdtZ8/jZS89X/w7AQsAlGQWoFoedGmCKMtQsDUtzCKyNw8RKGxdeHsW8XdTMUINKYQj/P9rNHSxeFMzh97+Ce61iL0JOXokpjy0jHb9IgCt7pNls2c33Y5Qj+AP0EnpZCnjF1CGIwMxyPVG/wSThCZpB2qYZJ4yj0JZE1WZtPhIEHqxLmOLfXeyTYpse1xxgF2cGXDyZUnVl7IKsSiMvao5A24IGgu4hi0Ro2+/Stq6yud4VKbN4+URZfkEOHraDXs04T6hTwizTO0Yz+ZxcfrcRDP7ObqA0gRE696w07Ffx8nM5piCTKKxsvwjm0QFtz4xvwrgFQBPpnYQ0i5FGTZQOcFfEiPbKjI3jj5ocvErSP+75FLmSYuQoAep9jYkw55xcIOSl8XR9Y4JzPQJzI3/dtH2seNszSZldbXQCV+IiU4UdysttiIBUPapHx8Gy7cS4E/aYqrSxLo2UQlhQGaEiytXEbOdClLH9KzBVQUs/ww/6Bysck0GDGJlZrjJ5FL6nuxN6+Mp7q7LJLQR7Ypd7QGz3TQpRS7f5ibJi3zZFEcUiB0fElrhOq6ZEl7kwU6W/ZyrIbo3VrBXwGrO/QfU3qbqInm9KVQ61QuUiQLOUz/znoW7Jtg8E57/dcRoiT2GMFCvoX+u+U5IYCOm17OeVlw6RBGXLCNwaJtft3+rSa3pJvxKZFhfiGg0QLSVyR9B+HyYpQzR/5a28ANmLYDA5duqq7f8j5Ah59HSCf+1JNxj7JG/AHtHuZuAJkKBV1ctqkbG5uR43w0WchqdGpjEAQJmCA4x26LuXvS8UqOrkBPKk1iGiTqIhHIWGa2lThS2E3VzbBkL2k6UdGHLXYFaeR59D9gHu7gzsXPRgne2Xv+NmeXkXLa+VtA0UbKtPZhUY/WmUcq49JjFAtvsJ9oVW5HNP+j0yqcD4dvkGMjQjjLXZmq8MaDscuTnJzutyhkfWIkFTTa2gH7z1vmi2jNP0hIPXZ7skfcpMACujGEctOr7VfoAbfNTStF/qSXHvktbbjkiahfHeUiTobYQZh5wuEV9zZ+aZryli9P0mMoF12RtkPVVDUbwwhih+CG30eGXah3xvXxB/UJlRkC11RgPgyOzR0/HpJAWl47O2aM17VtOF5PqlevhIAf6WHewTDEIVTm2VZk9bMk9DI6Fmq+mA0dj2PakUoA== X-OriginatorOrg: siliconsignals.io X-MS-Exchange-CrossTenant-Network-Message-Id: d692fdd2-6698-4d3e-4208-08dd6e84fa17 X-MS-Exchange-CrossTenant-AuthSource: PN3P287MB1829.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2025 05:45:56.8350 (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: pBwvPXK7AjGIPgdZtV9yErWWfWlk7ZIZy2GANnme3ATWp4HK7DB9Vslv4kpK8cJ37papVgdhXTRCibJfunvyL6U+iTAjbYUXDT/igfIFjAU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN0P287MB1842 Switch from s_stream to enable_streams and disable_streams callbacks. Signed-off-by: Tarang Raval --- drivers/media/i2c/imx334.c | 78 +++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c index 29eec4dd28cc..fe4e9155bca8 100644 --- a/drivers/media/i2c/imx334.c +++ b/drivers/media/i2c/imx334.c @@ -847,21 +847,31 @@ static int imx334_set_framefmt(struct imx334 *imx334) } /** - * imx334_start_streaming() - Start sensor stream - * @imx334: pointer to imx334 device + * imx334_enable_streams() - Enable specified streams for the sensor + * @sd: pointer to the V4L2 subdevice + * @state: pointer to the subdevice state + * @pad: pad number for which streams are enabled + * @streams_mask: bitmask specifying the streams to enable * * Return: 0 if successful, error code otherwise. */ -static int imx334_start_streaming(struct imx334 *imx334) +static int imx334_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) { + struct imx334 *imx334 = to_imx334(sd); const struct imx334_reg_list *reg_list; int ret; + ret = pm_runtime_resume_and_get(imx334->dev); + if (ret < 0) + return ret; + ret = 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; + goto err_rpm_put; } /* Write sensor mode registers */ @@ -870,28 +880,28 @@ static int imx334_start_streaming(struct imx334 *imx334) reg_list->num_of_regs, NULL); if (ret) { dev_err(imx334->dev, "fail to write initial registers\n"); - return ret; + goto err_rpm_put; } ret = cci_write(imx334->cci, IMX334_REG_LANEMODE, IMX334_CSI_4_LANE_MODE, NULL); if (ret) { dev_err(imx334->dev, "failed to configure lanes\n"); - return ret; + goto err_rpm_put; } ret = imx334_set_framefmt(imx334); if (ret) { dev_err(imx334->dev, "%s failed to set frame format: %d\n", __func__, ret); - return ret; + goto err_rpm_put; } /* Setup handler will write actual exposure and gain */ ret = __v4l2_ctrl_handler_setup(imx334->sd.ctrl_handler); if (ret) { dev_err(imx334->dev, "fail to setup handler\n"); - return ret; + goto err_rpm_put; } /* Start streaming */ @@ -899,53 +909,39 @@ static int imx334_start_streaming(struct imx334 *imx334) IMX334_MODE_STREAMING, NULL); if (ret) { dev_err(imx334->dev, "fail to start streaming\n"); - return ret; + goto err_rpm_put; } return 0; -} -/** - * imx334_stop_streaming() - Stop sensor stream - * @imx334: pointer to imx334 device - * - * Return: 0 if successful, error code otherwise. - */ -static int imx334_stop_streaming(struct imx334 *imx334) -{ - return cci_write(imx334->cci, IMX334_REG_MODE_SELECT, - IMX334_MODE_STANDBY, NULL); +err_rpm_put: + pm_runtime_put(imx334->dev); + return ret; } /** - * imx334_set_stream() - Enable sensor streaming - * @sd: pointer to imx334 subdevice - * @enable: set to enable sensor streaming + * imx334_disable_streams() - Enable specified streams for the sensor + * @sd: pointer to the V4L2 subdevice + * @state: pointer to the subdevice state + * @pad: pad number for which streams are disabled + * @streams_mask: bitmask specifying the streams to disable * * Return: 0 if successful, error code otherwise. */ -static int imx334_set_stream(struct v4l2_subdev *sd, int enable) +static int imx334_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) { struct imx334 *imx334 = to_imx334(sd); int ret; - if (enable) { - ret = pm_runtime_resume_and_get(imx334->dev); - if (ret < 0) - return ret; - - ret = imx334_start_streaming(imx334); - if (ret) - goto error_power_off; - } else { - imx334_stop_streaming(imx334); - pm_runtime_put(imx334->dev); - } - - return 0; + ret = cci_write(imx334->cci, IMX334_REG_MODE_SELECT, + IMX334_MODE_STANDBY, NULL); + if (ret) + dev_err(imx334->dev, "%s failed to stop stream\n", __func__); -error_power_off: pm_runtime_put(imx334->dev); + return ret; } @@ -1040,7 +1036,7 @@ static int imx334_parse_hw_config(struct imx334 *imx334) /* V4l2 subdevice ops */ static const struct v4l2_subdev_video_ops imx334_video_ops = { - .s_stream = imx334_set_stream, + .s_stream = v4l2_subdev_s_stream_helper, }; static const struct v4l2_subdev_pad_ops imx334_pad_ops = { @@ -1048,6 +1044,8 @@ static const struct v4l2_subdev_pad_ops imx334_pad_ops = { .enum_frame_size = imx334_enum_frame_size, .get_fmt = imx334_get_pad_format, .set_fmt = imx334_set_pad_format, + .enable_streams = imx334_enable_streams, + .disable_streams = imx334_disable_streams, }; static const struct v4l2_subdev_ops imx334_subdev_ops = {