From patchwork Thu May 22 14:35:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892365 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2057.outbound.protection.outlook.com [40.107.22.57]) (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 26FD028A1EE; Thu, 22 May 2025 14:35:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.22.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924553; cv=fail; b=XWxRTrwRq0BrznPcvuo4/es9LW5k85G+MxkmoWyKaofG9APanZhjSl5KXZsbIhGGDh+Lcz99kwPr8+xBvVjKfM4r5miGGQn1m+Tecyy2JnN3I+VN3imIgiK/oFpjD1jroN89hkINNmAR1eBKC2DLI5+a/07n4GKoFToy7hFvA1Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924553; c=relaxed/simple; bh=p3cAlDG2oe7D64MGpf/kBy8cafnimbqAZ0Fxql0rm2U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=uMaKE+Aj3kYg48LzFZnRIkHCFvaPh8wTV/uDWww4btEg0GyVRrAtvLjPNWF7d+ijReUJ1yiEUYjNVarebaYC+8jzlJ0fZBkQCcWl5pSXU6K/vPIivt2ZgJIPTY2nyJIGF9t1Wjc+3qIO+VND+Sachl42PTW4n/yP3vBaztnA+s8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com; spf=fail smtp.mailfrom=mt.com; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b=fuT+otJ/; arc=fail smtp.client-ip=40.107.22.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=mt.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b="fuT+otJ/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KevpjyG3ZJoAia2hYmASsSI7pSEgyduUrgeDNZ/wRrZRfcuTenNi78P+T8QqNAwKd+Q1ROuF9+HzJyTmPHXYkIIxhS1jvYbkBYuqfKU8sVs6iHbO+JZcF+PTGJ6uDgrsuEqkU8Mz81HBfklThYE81lL5lZgSXEr3EVkDqUBpBizDyAOqpnztF/bmgbIMDiQkwMgju7drm+IwyedpLgUir8klLB6lQ7AtvtckPuCAF9r5nQPv/XtofYmgPnPPmUWRIdFLyw3auYYjkYM+Iu3/KKMQY/yopROy6PbdlmeYLtZTJB7B27nSA3v44C4VP52Vi0pEeByne7Chig0EL1B5yA== 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=UQcYv33i+9n3cu/hqEBCZHrKU4GwhJibwK0luUi434s=; b=eQwOs0dJ5E6Y3gv+EmErI9rOJ1WE4UivK2/VWkZiX0K+/+iyDKnWYVKpuyum6iMXIE+qLZhBwauGCYZX3JM4OcW3iQ1DLgcwY0iEIj46IUA3Oq2062/SDW96v0kwojis3YPSoKtzUgmovEuYUWvhXgiuB6UOYt+SwlrLncYhwSTnE2Igf363EkaXzL17z0jNyn+AfhESU8Y7aqRdm3/fVIoqlGsmQ3fab6G7/ijGdJp70MjirJc4umfsoyeMgsg0gdNHZqGwVQXCjl/oXso66NAW+4xEoLV+WMqrGz2StkpAecrcDt2HW1smf8ZJBFtSbpTvpmnk/+n0s4f5iEH3TQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mt.com; dmarc=pass action=none header.from=mt.com; dkim=pass header.d=mt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mt.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UQcYv33i+9n3cu/hqEBCZHrKU4GwhJibwK0luUi434s=; b=fuT+otJ/rWIFV8/B4ANZaQgdJfnc5O3aidrjvvz59rVGQjbgO1g1iXIee8mflcCHkT07CE1L9XJ0nZgcPYP3gsvMmFOdAMgTlKwvW2QnE1FGcF9pxEmB1KDDzYS7r3pbXJwzL+CgGcQW73x0VqT5BTl6AwHsjQeA3eo/rkBzQn4PikOBA9E969437pWeCw/j/1+GWjx28pvzquAEMovtR2mPH0C95sf2tDXNiTtkAssBD6T9Z3IgEZpeJ9Bcb8X1o+jlSuZEJxwuOjaIVMsqk0PB7rrGi0KYHUiKB82UKTys4Ki8h6QMYIQfLyDN/mftpKR+ZD6GxDeubjNksAlSYw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mt.com; Received: from DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) by AS8PR03MB9912.eurprd03.prod.outlook.com (2603:10a6:20b:636::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.20; Thu, 22 May 2025 14:35:49 +0000 Received: from DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf]) by DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf%2]) with mapi id 15.20.8746.030; Thu, 22 May 2025 14:35:49 +0000 From: Mathis Foerst To: linux-kernel@vger.kernel.org Cc: Mathis Foerst , Laurent Pinchart , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sakari Ailus , Steve Longerbeam , Philipp Zabel , Greg Kroah-Hartman , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-staging@lists.linux.dev, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, manuel.traut@mt.com, mathis.foerst@zuehlke.com Subject: [PATCH v6 2/7] media: mt9m114: Bypass PLL if required Date: Thu, 22 May 2025 16:35:06 +0200 Message-Id: <20250522143512.112043-3-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522143512.112043-1-mathis.foerst@mt.com> References: <20250522143512.112043-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR2P278CA0001.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:50::9) To DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) 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: DBBPR03MB10396:EE_|AS8PR03MB9912:EE_ X-MS-Office365-Filtering-Correlation-Id: e756516b-560c-404b-70e8-08dd993df239 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|52116014|7416014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: SVOggW/9C+VZNQIhug+JCoip/kW3VPm/nwVkz2ce8uGpiEi42cYQ48hnpGbcKjl6w7k11hKcVQCKt7y3QWcNX817XdHWBVm+gaa0v3ejONCzsQiZJHrBIMNpIDkN9DtP9zfaVlrYuxYJ1qQNd9CB77qRBRuQMJKhd7RWVAhh425q04i8nSgOYoCOqere4BQZT90PyIw7BWxkLd8+6Ifow8szymYYi2x3R34rQhdB35rO3M+Qhu7FhKKTlM6ljJY8x6M/RUtUCllagprJbbnvPRbYc8uxsTni+/eWhwNzcRUgdx0Uqn73NuIrkcjpjNusl4JAWpVKA5VQuS8rosss5bNTbsTbcYD8YLramJQKjMoBA1FfawoBBuKb72WLX4S4pbrBV65UdR+lL8kwZR/BwxwwJW+aiWZY6Dpf3nYI/BzJFM+DbIYeHlxf2DckhxWdbi77currwCRFWYeqZghwdxsUsVEBzQ/wWLbmxpO6YCzrP9pWNVg8idqzNTWaVJvN7CCB+JKaXSB2H3IS6CqGMGoadiWDwoVHTR5zkMtw1A7sSAVBylmumDq5d9Bj4qPH4jaIogXeXFKxsxkYPn6VDaNdq2AnYMfYS2HA9hBq5yej2AcdU1ciXjUISLRC2Xw9Eqjtlj11XkxzPUPzFQ6oHc4gwS2pdGYH+SW+qGIpEKoZMlE1j3tZafuAOZzF1g64fjDyyJgTQcP6NpbWCsYA/rnmOToN1H3hqnfhcurZV8mq4ht+fNQIkHyOS6H6TGnhzSo+gHOZazGfiWU49ZlM4B7ZbhZ46SAIwEmHlO3h7Ja4WieFdocFjMHNjuRw6FtVKs5Gci012gua5eBNOo2KRw6yUgN0v2U/oJaZyXSdvEQMQgVBxp8uwuGL6QnH1WJwzXMPREbXuvEm3Mp0xJcO3++SQkxu+45nw2A+95HZ9/6ePwPanzqbzgwaVwbawL5MfC1CsOqyXW5Iz8eaVfxfbuNprL6yPzIzXnrk4Sf8ulRx6UD3BCTwzcfSyph/ZW/M4kH/PIQg+uGl9+4VVxH9qcUiQGnA1s0TodA1oJO+xvacBAWUGPY2jWPOkrDH1OwUzkFtbW29Wl8r9QoG49UvFQuC88vJBefCEY3db40SaM0bcPCWfohaClYekji3FNJQzEWPHMw6geedIeU90/fFC1Gr19OeClIAbryGy+QWy+sYjzih/EX6Dnsma5pcFpbiZOvYamfn27ZI9ms2gO7FNWfXUtrFerxLxjBHOQTMetjq3QXOKWfwCIVjbPN0ZoHxdLjULLxPvzH6zx3tCPcM6aJLEfl017NbZMADQfUR9FqwlA6CDpK9XaJYVsyLPZ01TPm5UgDRV7IZAPHqH2axR+2Zi+/L+pCCrBkogrZMwdUR+yytK7t4I2DeyarfjJam2GgND/SDBwUEFh4X6FfedCX8ZTzuffwUXA0rxO88xaAXECD9f6SkEWza7hX7uoEHDit+ZU61nudGHj38RhogdA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR03MB10396.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(52116014)(7416014)(376014)(1800799024)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ymym+1iq9xh0Wa5WDRPxkfn3fb17A5DeiVVoOkSNLegSeSEk0gjBMIjazIj0wx22kXJngLfgmW4/f4Ubhb5w61seFbBzqP8hAQqquMfrx9/ulBN9NP2CBdM1OM2ah6IZdhlUaSbE2P1Rfq4iUYJwGG5ErZIbLj2t8XrK3ox+1J0XQFmA/OSEMDB4ov5bDsjObihiKohK9W+Q6Pepk3H5TzF7uu6GOZudZpt+6/OrcBdVifXVlcNPFSczt3nnpdO61BI7gAS7wr+O32LE3F9x23O2o946WAgEWVpjD3L+OuppAJ0WNaW95yUADIvAsCBOPHIY4p5qlJo+/Xi0EkxG9JMe+TZcSUWkiXUIWMNureGJSPwlwUbPp6gTXJ0DfrU9TwRPPv5CCP4XysylTrphunlSQHrFz5mJJpAo9zGCnipoJ1Y4VgAM7BeFFIZPCR/ZZVbN3ToXrpjXxKUbZapAs6N0xDdj0khEiZFUATctC7TiuMV+/YzK5mdKSplOzFUOsDkVN/7jdSEoFpQxB7yfQnWSftP4BdzuTrgErgkqq7U/l88tt1uds4IM8T4bb6gPxaI5nW3BWzoolEWvV/VE70AaOZ+PSO51tx8tPYFkC82UOjYm1kIzx5eG6u/erQv9CTLfzagEUX+NzB0vtILRaU7ceJcrYCd9JiTCbmzpnIDlfXlLkv56OT3TfHbSxSX+pL5zf2fAolU8gnznLCgCdTAjJsS4onKdUjhjTpgFr2pJDn5S5vhL8gw3wcLwZ1rhNRBxW9KUup+nzZMAEFze7ytZ5+ltLtdBLjb1u9rxiQaGIq5ucaVsLPdiDaC9AEifIxuXF29sOvzk369j1XdosIF/bCqqgAccuJ9ZyfnlIF0haOUjVf4KuzqtlSDjMa+aAXYfLP70/QratlrVtRdEfsdGa10a8s09xgxEJdE2eIQdpHtg8B3hjuuypN4SXkWTE8zZukT0UE5oyZ/3/I2S4rJfXED2EOviaYwsaLa1CB9j/ZMdCZWOr3mBicT8LCJ+Y0G4nUmhElFb64rvg7dcbuNJatz6BoQNkb1cBRMpwVsAV4urUmAcdAO4yP/5aUXtJgWLsGydVaBOtn5kDg3lewklcJVdMpwVwujpjk9WDEeuyvtITkXn3g1a8sENx9f6vI4R46uBwnnbPgKW16RnDPaQIV1pRTgqI8gqT1X8ipNkgeRjDuAS4JMmdqe5Kby0tD6Lx6xBnA2kKzLFG4OWWX2V4+W/cQthcPsUtPA6qBUmUTe+M+PkEP+3KbyzAwvXgjuSbcew8DAHcHaXVSgpZ0a6/nxxG+xr38TwOgBKIhV+4dXUOSJxYuQF5t3mdxZCDxgTRbg2rsPedjU48JC0ts4oP4gzj0RZx9PwaSV52ew2pZ83BibgGtL3WChwsgrT388nJd+VeDvtH6b5gUaixVzfR98iz+5YG+W5Osc7yyjP8ByZVv1zbR6Sh1t0O9Kh145Pk/hhss0dacB/J3XWgUNm2rqg/whkx9zOuq3ly8zjskQIVkWmDb5+FDz3S5+Yb1XTZqaiqHS1zAs+4YidO98ZDcfF4XgomMBUBlwLQZ3dXv5FErs//FVGiVE2HGiR X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: e756516b-560c-404b-70e8-08dd993df239 X-MS-Exchange-CrossTenant-AuthSource: DBBPR03MB10396.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2025 14:35:49.3646 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fb4c0aee-6cd2-482f-a1a5-717e7c02496b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9ggnIXBFpEx4nbT+Tk798tAdvxSHpbT/xgI7cLcMxzuOjqaznPW7YsZHcBCgVB+IGNi2JZPUw7B5OVPe1TzXcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB9912 The MT9M114 sensor has an internal PLL that generates the required SYSCLK from EXTCLK. It also has the option to bypass the PLL and use EXTCLK directly as SYSCLK. The current driver implementation uses a hardcoded PLL configuration that requires a specific EXTCLK frequency. Depending on the available clocks, it can be desirable to use a different PLL configuration or to bypass it. The link-frequency of the output bus (Parallel or MIPI-CSI) is configured in the device tree. Check if EXTCLK can be used as SYSCLK to achieve this link-frequency. If yes, bypass the PLL. Otherwise, (as before) check if EXTCLK and the default PLL configuration provide the required SYSCLK to achieve the link-frequency. If yes, use the PLL. If no, throw an error. Signed-off-by: Mathis Foerst Reviewed-by: Laurent Pinchart --- drivers/media/i2c/mt9m114.c | 68 +++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index 5f0b0ad8f885..c3ec2eb0b134 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -261,6 +261,7 @@ #define MT9M114_CAM_PGA_PGA_CONTROL CCI_REG16(0xc95e) #define MT9M114_CAM_SYSCTL_PLL_ENABLE CCI_REG8(0xc97e) #define MT9M114_CAM_SYSCTL_PLL_ENABLE_VALUE BIT(0) +#define MT9M114_CAM_SYSCTL_PLL_DISABLE_VALUE 0x00 #define MT9M114_CAM_SYSCTL_PLL_DIVIDER_M_N CCI_REG16(0xc980) #define MT9M114_CAM_SYSCTL_PLL_DIVIDER_VALUE(m, n) (((n) << 8) | (m)) #define MT9M114_CAM_SYSCTL_PLL_DIVIDER_P CCI_REG16(0xc982) @@ -377,6 +378,7 @@ struct mt9m114 { struct gpio_desc *reset; struct regulator_bulk_data supplies[3]; struct v4l2_fwnode_endpoint bus_cfg; + bool bypass_pll; struct { unsigned int m; @@ -743,14 +745,21 @@ static int mt9m114_initialize(struct mt9m114 *sensor) } /* Configure the PLL. */ - cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_ENABLE, - MT9M114_CAM_SYSCTL_PLL_ENABLE_VALUE, &ret); - cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_DIVIDER_M_N, - MT9M114_CAM_SYSCTL_PLL_DIVIDER_VALUE(sensor->pll.m, - sensor->pll.n), - &ret); - cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_DIVIDER_P, - MT9M114_CAM_SYSCTL_PLL_DIVIDER_P_VALUE(sensor->pll.p), &ret); + if (sensor->bypass_pll) { + cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_ENABLE, + MT9M114_CAM_SYSCTL_PLL_DISABLE_VALUE, &ret); + } else { + cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_ENABLE, + MT9M114_CAM_SYSCTL_PLL_ENABLE_VALUE, &ret); + cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_DIVIDER_M_N, + MT9M114_CAM_SYSCTL_PLL_DIVIDER_VALUE(sensor->pll.m, + sensor->pll.n), + &ret); + cci_write(sensor->regmap, MT9M114_CAM_SYSCTL_PLL_DIVIDER_P, + MT9M114_CAM_SYSCTL_PLL_DIVIDER_P_VALUE(sensor->pll.p), + &ret); + } + cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CFG_PIXCLK, sensor->pixrate, &ret); @@ -2235,9 +2244,22 @@ static const struct dev_pm_ops mt9m114_pm_ops = { * Probe & Remove */ +static int mt9m114_verify_link_frequency(struct mt9m114 *sensor, + unsigned int pixrate) +{ + unsigned int link_freq = sensor->bus_cfg.bus_type == V4L2_MBUS_CSI2_DPHY + ? pixrate * 8 : pixrate * 2; + + if (sensor->bus_cfg.nr_of_link_frequencies != 1 || + sensor->bus_cfg.link_frequencies[0] != link_freq) + return -EINVAL; + + return 0; +} + static int mt9m114_clk_init(struct mt9m114 *sensor) { - unsigned int link_freq; + unsigned int pixrate; /* Hardcode the PLL multiplier and dividers to default settings. */ sensor->pll.m = 32; @@ -2249,19 +2271,29 @@ static int mt9m114_clk_init(struct mt9m114 *sensor) * for 16-bit per pixel, transmitted in DDR over a single lane. For * parallel mode, the sensor ouputs one pixel in two PIXCLK cycles. */ - sensor->pixrate = clk_get_rate(sensor->clk) * sensor->pll.m - / ((sensor->pll.n + 1) * (sensor->pll.p + 1)); - link_freq = sensor->bus_cfg.bus_type == V4L2_MBUS_CSI2_DPHY - ? sensor->pixrate * 8 : sensor->pixrate * 2; + /* + * Check if EXTCLK fits the configured link frequency. Bypass the PLL + * in this case. + */ + pixrate = clk_get_rate(sensor->clk) / 2; + if (mt9m114_verify_link_frequency(sensor, pixrate) == 0) { + sensor->pixrate = pixrate; + sensor->bypass_pll = true; + return 0; + } - if (sensor->bus_cfg.nr_of_link_frequencies != 1 || - sensor->bus_cfg.link_frequencies[0] != link_freq) { - dev_err(&sensor->client->dev, "Unsupported DT link-frequencies\n"); - return -EINVAL; + /* Check if the PLL configuration fits the configured link frequency. */ + pixrate = clk_get_rate(sensor->clk) * sensor->pll.m + / ((sensor->pll.n + 1) * (sensor->pll.p + 1)); + if (mt9m114_verify_link_frequency(sensor, pixrate) == 0) { + sensor->pixrate = pixrate; + sensor->bypass_pll = false; + return 0; } - return 0; + dev_err(&sensor->client->dev, "Unsupported DT link-frequencies\n"); + return -EINVAL; } static int mt9m114_identify(struct mt9m114 *sensor) From patchwork Thu May 22 14:35:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892364 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2067.outbound.protection.outlook.com [40.107.20.67]) (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 8E0FD28D8D0; Thu, 22 May 2025 14:35:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.20.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924559; cv=fail; b=ZI20CLNBXvEZSpR78ZaqSBUPUDjHmQiDBV5tMRET+C1K+dr6ZYZjvuHUf39Nqra+W3VGhhi8DKxSiCm7rLNnmNsrmQR3+Tu35XKqO5f22fd0/zpdy21GCE3bP/hojVt1IHlqiF7ksqz7chD/FcDaoWf8XHFfg03WDysip7GSxds= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924559; c=relaxed/simple; bh=fYeuyI1ZZ2VuHRq7KBDERTpIAdqdhoiwNh6qGczsMH8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=tbYsd9TJSKd9+lM4ppYyqW7mGHtQMY+grAKDoWWMS1+2FGwH4XgGaR2CnUB8V6f4rBmAfoLTPtkNjNpSTQCW2bC0Vpc/Zdyx9spDGksctwmki4oUFEvszpyDNPbJvwpCVKKbjMjiBQibNkiRUK9eU1AX0u6xi4N6vyjI6iD/+fs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com; spf=fail smtp.mailfrom=mt.com; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b=IJ7maBlR; arc=fail smtp.client-ip=40.107.20.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=mt.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b="IJ7maBlR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jbA5bJWb9v68vTiKamtsT7fWKC7+dVumWjgqVXswx+UILsN+HxTDnPiv0AAuJJycWg1jSX58kBklVHXpoSBG4UnWIGoGBxWF6aGlGMud0NZvJhdEzCaEeoKV4e+juYU56fLGmJV6le5MALHgh+FcUSINrBIsMMvCp1BNH8/JPQ0O1cScqBZ1jteAiphl2GZ49wsUmzKx7ZnLYhiebEiMvimCBOff853Hzd+vz5eWBdjGePYDtfm3fiv3cSgpEj1LGP635LDEVGrNxMKm1Ybnn5LOMA9SicEPA8QHaTIKEeRAkvh7Z/0WAId69Xe14FfQKz0rzZEUDj+RYxcQhu/mJA== 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=8At0HOS+8LIG7VMd/Ljiv11OaY2B/NFB927QxvPiCBg=; b=kZb6bPknkQEQ83dLBM+UmNLMeFyu7BKJ1DdUlLI4Hry/lucJyD471EqdSP2fTB4YFB8lWGePH2Wo6zSNjte9+tql8t4KOqewubTtUxn86x6ONHcroz4WMlfznDncfDudzZfltXYT5LTB6SqWxk5Ry/1SpbCuoyJ9hGti7dQMDgqnlFt/QZ/fekHjivv1dWjW2M3+IV+LlZ8KakNBGKvjtJN4OX7czFvkhxD1LkCLxoDY0+/d0nol28uV0LWzZY+qCWMAiXVXdW8nbCszxTLfWwGzvcQAEqYL0ZsaLr/1DPaZVSARO+6+puL//9IRhRMpPmlrVnUvOrgi0pDpi9cJTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mt.com; dmarc=pass action=none header.from=mt.com; dkim=pass header.d=mt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mt.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8At0HOS+8LIG7VMd/Ljiv11OaY2B/NFB927QxvPiCBg=; b=IJ7maBlRS1eK8q8x5xnPBF5sQrZF1NP6fjeYmqnG/Pt6EIk19rfCl+5rp9dwQ/4Ojoj0XO0SpIOZeR6ci8JWnNuiTkGSxU7B6YXN6D4UsA/o286vBmQXm0rxTQIAb0NMstcP5wHMDMSRSYDdlJN+gvYcRLqkmq5RK7sXftmX2MzbWH12DM2qAb3vUco3nDaek9p7fsxGSsV6OCoK54WhBMYHQFOfkzxGDIY9h3NGYBPkZOZiJ2Pu9fi1S3GVCWHH1bdz7UgIuwjLM1xNUXbi+ys5/7e3hvvO9ro6Ax8MZ6Y2rhIAGC63scolGYo2QI5AnwPTiELHkgKIp0KjEOJysQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mt.com; Received: from DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) by AS8PR03MB9912.eurprd03.prod.outlook.com (2603:10a6:20b:636::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.20; Thu, 22 May 2025 14:35:55 +0000 Received: from DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf]) by DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf%2]) with mapi id 15.20.8746.030; Thu, 22 May 2025 14:35:55 +0000 From: Mathis Foerst To: linux-kernel@vger.kernel.org Cc: Mathis Foerst , Laurent Pinchart , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sakari Ailus , Steve Longerbeam , Philipp Zabel , Greg Kroah-Hartman , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-staging@lists.linux.dev, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, manuel.traut@mt.com, mathis.foerst@zuehlke.com Subject: [PATCH v6 3/7] media: mt9m114: Factor out mt9m114_configure_pa Date: Thu, 22 May 2025 16:35:07 +0200 Message-Id: <20250522143512.112043-4-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522143512.112043-1-mathis.foerst@mt.com> References: <20250522143512.112043-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR0P278CA0192.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::16) To DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) 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: DBBPR03MB10396:EE_|AS8PR03MB9912:EE_ X-MS-Office365-Filtering-Correlation-Id: 39ffdaa3-1621-4a2c-c63b-08dd993df58f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|52116014|7416014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: dE15DvznkN5XelCCfn/42ZLSzQMWP/O5mUPipoDE2LnNw4rPz2A6GtVg72cJzoqCpS8StjkQ/XH586Kot6N5U899vT6LKvTzkZr0hg3jMf2ZzyPyc5dbYUuqv56qNalUgt+vxA9DwePo0AyzQR97m/xedOMfzykym7HMoSmU9EBH3MDUuNfmHEhSHQIkFq6Z0TCguDcSqIMjYE9qaXqKBu2h1BGu1SknZ9QrhGVQJvAsqPEpFnX8j7hFvBxOE9UORVSzl3OCQN7m7BdMo1WAVvWTINSnWx9B/GPQh58QQuwPGX/m/GeqiLSLSeQdATVwgwg3EQwgiJtVuXaSmtXlVDmXJ27n2F/ZGx0EcQ/+q3H3cv6L8Bve6eGdz/7CbNKHPH7Q4a7KLRvsX4181beWVIB2uuV7GQvRbz3rn5b5ny6yfUkfEKgBqiip6Tnpad8AU8VyvFbCxJTnhVhJjVXC/CYzrUYF7rzuniVWMu7g1+vB1n2/bw1hMUdHeD/Il2UEZcJMYo16aEHmkxBRrsrsAVTweYHrwlhq2BqCzDfWbfjmlWEgGR6gdLLqLVT3lRoA2wUWpYNl109uzDCKAseM/z8pq1T3MDPaL9v04tNHfINmsYDT5Py1Eu9a3n9Px5P4GxxrE/aiB1mOfw+O0OkZOs90KEmkfWQFMw6LQFdEjHaeAyvFDzE0i8+504GQNH0DD4xXVlweNaEwQavyMXDEi2oyeiNUhqBxdS7bRuoQCElGKORBN6B1MqfRQXvS1ehQs8eNyIl99LYcCx/ilPfiuUk0Z6tNqqVU8gGo75ubWirnzsOxxDEeji4AgZzM0bChNe3eD6R52nUE20q6trXiLX6D09u+rlYGHLm4hxTeSCMoVKoVPaqDDmgm1H3YW0cNZGNgm/owGu3b/oRSCmPhJDZGhIGjl8dqbJMzVjzxd9M+95VE/yEtXcW491HDxLOPS65c5/lWvnHsCQsIjpGw1+l2Hyn77dGvpy36fVJQMUvLPKBDl7wilvls6JFcm8kwUL9qxts66jfCPvNkC+9WH/ku4R1ue/T5JaxJDQmG+HEEeO9zhVlF5rzvbCaanZ/peJkyhfjhhytaPOJzg1v7foVDQqnyRyTcPh2i/nrJ4vYNe3SVITN7vo+kcgMWaNBr8Po/OZQgPa1d6oYMfPo2D+MzhyS5//ipfLwyD4e3msBC3XkxvWBWezrtNHrDrR/LLrIUYUOnYQIiX6MYINanYzSlDbtWwh2oDTfcfwBd4j2QuMXuYu/FZAfBvuuxD2/uzxSdjppCIjLH+GxXGh/unU8g9gMp+NorSMfKQSUfqKEySqS6WThfN89lRjLOVMgLiSy+ugHLnHXyH+2Q97+L1SWR1SnnG2igRqxp/kzk/WCbVVbcOD+Sfh13hVJFnbpwOxWHlNxvwitgOB0Il8KiZ5fUq9kUSjBk+voQiotZoRclaA/mTAuBQpaz6/FCcsM/GIUnNss39UKlvVziHLFpJA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR03MB10396.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(52116014)(7416014)(376014)(1800799024)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3hVcN1lGyKEDFICe0KA/m8YGXZp1zDaYZu66oKTXos/+bwSi9BQQf2gRdYar4p6codJacdrf/L5KSE76HBhGMHoHLunF9NjUqHJAzmuoBTGDHI2tleAlqTj0mGaMmJkN0zpPFluSHRTAoyqkzoGsh3/IIOB2jCvushb3ZkaONBKufp2Gs9MfH0ksKkaz/BNeuppv1twK9uDnjhqbdX2KzZGNam4GBwUAd0PqZzH6+y+LKzLpU7MVOLAVWGMK7rpSWIjnn4BRvZINzaXlUjSuJyyyT3QIvVMbYu9VtQPoVKAsXU2H7RnNLyreKGiTQrWWEs9Qo/eMuKAwGgZ8fd1uV12ISqzllVJLv3bFPp+VK3eYaMi9y9/VdC0Xx99gkyF6njqRJguGBZup8dLJUfoWPCFQFxVKdzY+Aop7s/FNmIg/fVOLaIX2DYjnlqEi50TsqFzbUK1v+ZJkaWH7ki5GLfHPUlj1S12d0YA+lPFeD4ZclIxGE6MD9P6FJNzaHoVUKZ5lpvGthnkDVPBykE9qkztQus37B5uc0tBWx1cRA3t2G5EdkzEOICYDDuzEojxTA2hBtuQAbiT9T0RohnTh9ztAVKLC6of6L+X7B09/t/YPWSanWnznx+J7oZFmRxVikDIH4kBEkz/3bsipzgp6JP5XZYYGD+giKfOYPc3xphy/2zxNzYubA2y9+0ocDD347qL+PXB82hxsO4yzpKN962rHgt0dJc1RqgMQFdS8m8gLFhFVOZwUE/SBAeFJLpAOCp0vVGIvqQKHop22LVz3FBySJZEn6Pk6MzxmDd66TYaxS67nZpVBSFuWgLyTjHgRTAfU9hQcEvmuk3MVrUq1wgrz0iDXAmu/tzlYp/sLsOLm0bpBajNYZWODURC3qVVVw4K7HZsytfRLcjkRF3YWsGBZS+/WqjxijnOzjFCpDnsv2MOg/49M5kN7h9vWfE89qpNSCcx6GJjTB5Kmz5gSM89HBXEG9Lfiz/NlDqtWYUPFGUD6j4iJRoQ8Gib7bmQ1ADGSsnwyG1a1f/czGHgYSE40gMUWr0FhGNYobYzWyukZPqb3U8vqNf6klO8B9RxLHVEM4fToE54LtBxthNInhzAyjQU4gPWZe9I8fpT1SMeHgTcgvk232OwBmnbL04v/YmQ3vT7tZfBqrKxC1k8ZkSlS9vtblNL504F2QHqGOp1GSB13a7q3OfamdHVE6T+DfQnoCbw1L1YiM5lII0iK5cVjP5jySBGOMYnf6N90keVQuGB2k9Ha11LIiAnXk1UExM78/CoNT9ZfVqxDyAOEe/cbjUpDltyfKhAOtQPQelrPWmmW6LxERQfrYtXE69tMAWKe8gLvTK1DDcHkzE5QFd5JMZhohgDaZGm0TCWBXVNQFKj78SuG3xRntXtBp2mHIspvr+dvWAEFpvSoNGvfU2TCeIyJakARx42+05lgXl8VFbmb7Wda7S+zFJPFQYxMLaB0FhfeNw3ECI4UEJwUVOw7g01Qa6+5+0KZUb4eU9AEwKNM7Q/svXQIkxq7YYrdj/ZdjDAl2CYNnPb+gPqo5LBiC0VTMITzDT9LmjFCiArfracLN7AyueL72F8afH7u X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39ffdaa3-1621-4a2c-c63b-08dd993df58f X-MS-Exchange-CrossTenant-AuthSource: DBBPR03MB10396.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2025 14:35:54.9987 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fb4c0aee-6cd2-482f-a1a5-717e7c02496b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UCs6xjexG8HsRn/p6vNMHAGCl1dc9qianVU6uSwAwyWGpypcAV+rnsKSMxP8jPsYo4yFEQfZviRX+6PpFj6A7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB9912 The function mt9m114_configure writes the configuration registers of both, the pixel array (pa) and the image flow processor (ifp). This is undesirable if only the config of the pa should be changed without affecting the ifp. Factor out the function mt9m114_configure_pa() that just writes the pa-configuration. Signed-off-by: Mathis Foerst Reviewed-by: Laurent Pinchart --- drivers/media/i2c/mt9m114.c | 95 +++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index c3ec2eb0b134..6c80c6926aef 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -790,41 +790,25 @@ static int mt9m114_initialize(struct mt9m114 *sensor) return 0; } -static int mt9m114_configure(struct mt9m114 *sensor, - struct v4l2_subdev_state *pa_state, - struct v4l2_subdev_state *ifp_state) +static int mt9m114_configure_pa(struct mt9m114 *sensor, + struct v4l2_subdev_state *state) { - const struct v4l2_mbus_framefmt *pa_format; - const struct v4l2_rect *pa_crop; - const struct mt9m114_format_info *ifp_info; - const struct v4l2_mbus_framefmt *ifp_format; - const struct v4l2_rect *ifp_crop; - const struct v4l2_rect *ifp_compose; + const struct v4l2_mbus_framefmt *format; + const struct v4l2_rect *crop; unsigned int hratio, vratio; - u64 output_format; u64 read_mode; - int ret = 0; - - pa_format = v4l2_subdev_state_get_format(pa_state, 0); - pa_crop = v4l2_subdev_state_get_crop(pa_state, 0); + int ret; - ifp_format = v4l2_subdev_state_get_format(ifp_state, 1); - ifp_info = mt9m114_format_info(sensor, 1, ifp_format->code); - ifp_crop = v4l2_subdev_state_get_crop(ifp_state, 0); - ifp_compose = v4l2_subdev_state_get_compose(ifp_state, 0); + format = v4l2_subdev_state_get_format(state, 0); + crop = v4l2_subdev_state_get_crop(state, 0); ret = cci_read(sensor->regmap, MT9M114_CAM_SENSOR_CONTROL_READ_MODE, &read_mode, NULL); if (ret < 0) return ret; - ret = cci_read(sensor->regmap, MT9M114_CAM_OUTPUT_FORMAT, - &output_format, NULL); - if (ret < 0) - return ret; - - hratio = pa_crop->width / pa_format->width; - vratio = pa_crop->height / pa_format->height; + hratio = crop->width / format->width; + vratio = crop->height / format->height; /* * Pixel array crop and binning. The CAM_SENSOR_CFG_CPIPE_LAST_ROW @@ -833,15 +817,15 @@ static int mt9m114_configure(struct mt9m114 *sensor, * example sensor modes. */ cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CFG_X_ADDR_START, - pa_crop->left, &ret); + crop->left, &ret); cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CFG_Y_ADDR_START, - pa_crop->top, &ret); + crop->top, &ret); cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CFG_X_ADDR_END, - pa_crop->width + pa_crop->left - 1, &ret); + crop->width + crop->left - 1, &ret); cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CFG_Y_ADDR_END, - pa_crop->height + pa_crop->top - 1, &ret); + crop->height + crop->top - 1, &ret); cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CFG_CPIPE_LAST_ROW, - (pa_crop->height - 4) / vratio - 1, &ret); + (crop->height - 4) / vratio - 1, &ret); read_mode &= ~(MT9M114_CAM_SENSOR_CONTROL_X_READ_OUT_MASK | MT9M114_CAM_SENSOR_CONTROL_Y_READ_OUT_MASK); @@ -854,6 +838,29 @@ static int mt9m114_configure(struct mt9m114 *sensor, cci_write(sensor->regmap, MT9M114_CAM_SENSOR_CONTROL_READ_MODE, read_mode, &ret); + return ret; +} + +static int mt9m114_configure_ifp(struct mt9m114 *sensor, + struct v4l2_subdev_state *state) +{ + const struct mt9m114_format_info *info; + const struct v4l2_mbus_framefmt *format; + const struct v4l2_rect *crop; + const struct v4l2_rect *compose; + u64 output_format; + int ret = 0; + + format = v4l2_subdev_state_get_format(state, 1); + info = mt9m114_format_info(sensor, 1, format->code); + crop = v4l2_subdev_state_get_crop(state, 0); + compose = v4l2_subdev_state_get_compose(state, 0); + + ret = cci_read(sensor->regmap, MT9M114_CAM_OUTPUT_FORMAT, + &output_format, NULL); + if (ret < 0) + return ret; + /* * Color pipeline (IFP) cropping and scaling. Subtract 4 from the left * and top coordinates to compensate for the lines and columns removed @@ -861,18 +868,18 @@ static int mt9m114_configure(struct mt9m114 *sensor, * not in the hardware. */ cci_write(sensor->regmap, MT9M114_CAM_CROP_WINDOW_XOFFSET, - ifp_crop->left - 4, &ret); + crop->left - 4, &ret); cci_write(sensor->regmap, MT9M114_CAM_CROP_WINDOW_YOFFSET, - ifp_crop->top - 4, &ret); + crop->top - 4, &ret); cci_write(sensor->regmap, MT9M114_CAM_CROP_WINDOW_WIDTH, - ifp_crop->width, &ret); + crop->width, &ret); cci_write(sensor->regmap, MT9M114_CAM_CROP_WINDOW_HEIGHT, - ifp_crop->height, &ret); + crop->height, &ret); cci_write(sensor->regmap, MT9M114_CAM_OUTPUT_WIDTH, - ifp_compose->width, &ret); + compose->width, &ret); cci_write(sensor->regmap, MT9M114_CAM_OUTPUT_HEIGHT, - ifp_compose->height, &ret); + compose->height, &ret); /* AWB and AE windows, use the full frame. */ cci_write(sensor->regmap, MT9M114_CAM_STAT_AWB_CLIP_WINDOW_XSTART, @@ -880,18 +887,18 @@ static int mt9m114_configure(struct mt9m114 *sensor, cci_write(sensor->regmap, MT9M114_CAM_STAT_AWB_CLIP_WINDOW_YSTART, 0, &ret); cci_write(sensor->regmap, MT9M114_CAM_STAT_AWB_CLIP_WINDOW_XEND, - ifp_compose->width - 1, &ret); + compose->width - 1, &ret); cci_write(sensor->regmap, MT9M114_CAM_STAT_AWB_CLIP_WINDOW_YEND, - ifp_compose->height - 1, &ret); + compose->height - 1, &ret); cci_write(sensor->regmap, MT9M114_CAM_STAT_AE_INITIAL_WINDOW_XSTART, 0, &ret); cci_write(sensor->regmap, MT9M114_CAM_STAT_AE_INITIAL_WINDOW_YSTART, 0, &ret); cci_write(sensor->regmap, MT9M114_CAM_STAT_AE_INITIAL_WINDOW_XEND, - ifp_compose->width / 5 - 1, &ret); + compose->width / 5 - 1, &ret); cci_write(sensor->regmap, MT9M114_CAM_STAT_AE_INITIAL_WINDOW_YEND, - ifp_compose->height / 5 - 1, &ret); + compose->height / 5 - 1, &ret); cci_write(sensor->regmap, MT9M114_CAM_CROP_CROPMODE, MT9M114_CAM_CROP_MODE_AWB_AUTO_CROP_EN | @@ -903,7 +910,7 @@ static int mt9m114_configure(struct mt9m114 *sensor, MT9M114_CAM_OUTPUT_FORMAT_FORMAT_MASK | MT9M114_CAM_OUTPUT_FORMAT_SWAP_BYTES | MT9M114_CAM_OUTPUT_FORMAT_SWAP_RED_BLUE); - output_format |= ifp_info->output_format; + output_format |= info->output_format; cci_write(sensor->regmap, MT9M114_CAM_OUTPUT_FORMAT, output_format, &ret); @@ -934,7 +941,11 @@ static int mt9m114_start_streaming(struct mt9m114 *sensor, if (ret) return ret; - ret = mt9m114_configure(sensor, pa_state, ifp_state); + ret = mt9m114_configure_ifp(sensor, ifp_state); + if (ret) + goto error; + + ret = mt9m114_configure_pa(sensor, pa_state); if (ret) goto error; From patchwork Thu May 22 14:35:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892363 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2075.outbound.protection.outlook.com [40.107.21.75]) (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 CC22828D831; Thu, 22 May 2025 14:36:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.75 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924578; cv=fail; b=JCEBPC1FGb2VedAnKSSLwOqp4x4lmc1YFaxcbhwkEFaij7G+zdkYRO1SnIs5gXRTLKKGRqzDCSf9rJAaIDx0dMjH8s7WGXCxh4LFMahlL+gfZBVAZ1g9hqvWzoTya2Rl2wg+ug4YgnQKXwhdA6awHSJtjxCS5eW3EJaZIj3tTE8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924578; c=relaxed/simple; bh=yynIDOVjmpFxfgOZTW5Fz6bmIac2z55qSPd9sXAN1vI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=FLJljTuNQ9xBVwkSDEhpQRvMfVy/yD76mEcBrGiR9NjMv43brSKDblbFGtoQrXbCs+uqFo6vet2rDgtdW8MeadjjcrctmCC7N7AqmPowptiIZsQXbjnxGOCTyUFJDAhESMH8dvp8LW9ixFaGAhkdSbYBIghAn2+DmzVaVIK2ezM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com; spf=fail smtp.mailfrom=mt.com; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b=jNuVRMtA; arc=fail smtp.client-ip=40.107.21.75 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=mt.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b="jNuVRMtA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zH4FmRdDxoqS12nYlVo0IQsGewYTtO74pU2+WwrkoANS3BF6EYQJ21k54ZxWPNtT8FSdQlo5LDzvMumAwaObwfRcBgD49YW/AeA41t1zBYRWRIFcc078FCiK8tl4KkA16zSxJ9iGE4xfQINLsOu08eqTZzl3Imuk+5IOGMFkqU8gxBm2wjOV9QynoHYKc3KvT9T9X1ZeDl9Fetnp6znlXi16iohOHFqyBzTMF7PmwDwcGADNfRXZtaM0qT2QZR0Hta3Gz5fYWwq+e9fByKKy6wBAmn0Cpjs5Q0aXoNZx0+oklmMyPEw8a8edpSVErtQ9+OWNp6OMj37aM0Wj71vmjA== 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=X+gNzjTTFQkzpGpt+tdyw+nCIpPKRQUc4BxpCVaEsos=; b=fCRH9dPhbd7QGm8xq4w8J+a99ZvpIO+Aso55VZoYklhgsZBd0rcWLmqQNXsdyjzm9cY4NScd9KExYx+XiG3XREX5lC4lJpZphKTPRALlYDo0f6Fp+wfRNnWsxNQgbjnXGD/WtATkwWW9Xqd/wXWQQ5fOugsGb7OBduA9lywoTzlohI52AyKW+Ug9uNpnP2EIHJJdbQQgnvSCJXGwHKJkz0a5At06hdpdwjI/lDduZFNfleoVoR/R/nm7BrlQpHu265dpzxzYPEam7Xop5lKcpl0pOxi4k5riiXsAS/n0yh/ph9TvWTg/MIfaku6VhAlOojk2dXeTL5+pmrn21oUU4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mt.com; dmarc=pass action=none header.from=mt.com; dkim=pass header.d=mt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mt.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X+gNzjTTFQkzpGpt+tdyw+nCIpPKRQUc4BxpCVaEsos=; b=jNuVRMtA7GHwI6bTvmaTGmq/6UnNjWDbN90am51rD3vepjeGXssTmnrLyE009g/6HAv5vy+uVfLXZt1e0tkbxqs+cb3jFa0hznXUOFDsEMsprors1tj/6u2t1s6EKr15vmhttMbo9TijpbImKk468IVHr25R0MWzbzj/5ytag2XDnD8fbRyU3jJzydsa4e1an9IhdNa1BrRmQZVmuae8SIcuHqg3s1aUlU5G5vEszjz5dae0YbvYs64+vIt9SKmLwnYXSy+A/O29N7x3KY0c9FFMoueiGCbzFxPxQ9sPDorSTf30/SoFal8WPGK9siXLbESfPJd41CRas076rMCz2g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mt.com; Received: from DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) by AS8PR03MB9912.eurprd03.prod.outlook.com (2603:10a6:20b:636::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.20; Thu, 22 May 2025 14:36:10 +0000 Received: from DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf]) by DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf%2]) with mapi id 15.20.8746.030; Thu, 22 May 2025 14:36:10 +0000 From: Mathis Foerst To: linux-kernel@vger.kernel.org Cc: Mathis Foerst , Laurent Pinchart , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sakari Ailus , Steve Longerbeam , Philipp Zabel , Greg Kroah-Hartman , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-staging@lists.linux.dev, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, manuel.traut@mt.com, mathis.foerst@zuehlke.com Subject: [PATCH v6 5/7] media: mt9m114: Allow set_selection while streaming Date: Thu, 22 May 2025 16:35:09 +0200 Message-Id: <20250522143512.112043-6-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522143512.112043-1-mathis.foerst@mt.com> References: <20250522143512.112043-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR2P278CA0071.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:52::17) To DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) 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: DBBPR03MB10396:EE_|AS8PR03MB9912:EE_ X-MS-Office365-Filtering-Correlation-Id: 3dee3b22-2dfd-469b-8807-08dd993dff01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|52116014|7416014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: ZMMCZPkfmyLKioqqVlA/Z4mRvh7Dma0QPTDDXZWn418Xy46ECiwK/KjaQxpf3iRf630BpQ6pgueh7F3iXf+g03D45DbpNHvuqSl4VoyQmYcc8O0WyYSCUgOihOWLPBovJGINRF+sT0Bjc463w7L2CJKaqO2ZKVoUj09cb74YIEB3j1Eu3aNiEzWeewklzHP9ET/m5EYNgbxo8AAg9ujx1lb63u3yCWNeavtgl72U7a0LR9Th/p3jYlUX77nW1H17Y0uQ5h2bwtSHpjVVFDaO+TxNt+GjpYVdNZOH/fGVGIGi+aKYjbd23CRGxzEGl0BKlDjJ1rm0OmEU9J9EkVceklyhK3VyK134GS/S/b7TyY0bWHDvBkwZRj+zbWrB/r22mvosCFtRgmO3Ngjl3GplggMs5oMPgo8nDTT9rZw7eZFZ56qo25oHPNXLoGrsePSa5JWg49P/7BxYemztwkWPW6UOwtfKeMBktPb2DnkqYjgTLmYNVZ6bEzEIzVGqzOzn3eeOxwTrf93/PPEKEgpzzdo28t4+TrlTCpIXa1bBlg0g24/Y2KxHzHFbjUU8ZfwDASwGFBdlW/oiNn4+CiRzDEevDpzRywC59jgrRFuQwY38wfKZUMaEVoBlllBrKV7ZGbEDa8LEe85GUu5fHvGyrg+fvamXwjscBxjFKyouawz6hZT8ch7aStI4N9oilKMJRTBmHwDh/eSknLccBAByMdsudho7Jw1UAC+7YrptmgW2C8MczHuw7wmix/xpsKL+ewTjDUATAnh2C76MaNZH4j5mvgcKcZHRaoqAgDGo0DrVZwZjVrbLiY435NiN9bzvABawQ4MJp3JSyr9rNxqIoGHkrGq6uZnNyzIiwLwhdl3iA1UIW+XoSEYcEs+QWov8uiusV0cL1Qn9o9bk3oXeWz72xAfTUDU97IzTMs6iyFfH7efsCSsemPUYsLbH2jiCBIgPe9aQqzdqFkQ5zYFCT9OPFfjlXDP1vhwQQx6iMeisk9h/rmfFXhx9BH2makCTRrHaM+UrHJq8RLlmy6J2MkodaTMJ/BvZANxunzsbZFMNTE0YNp4QYlOD+93Ps4WRyOwZU1iLVPf8ZoW9xILQ62K/6W9eER++nXVsDfDXi1Lx/TjNbJuzhcImhIMW/OHNqGHb+OrGJg/zB0rtDvK0Or12kRkYs3OaKBjqifTfwWQ5yPEgHMVBM5nXECJ3v32aYz0oM+cdETgsaHv2VEIAo6aWzj1XHg4uZ2XfMuUMootGLNll1U0Rmpkc5m3UdG0utwc95gWDQ9NpN5YaeAEz1vM4OTmv+Za1Fmg3/UaBM03mBsbwwN4iFhG07X4UsuFLfFeC3GxfP5SCEmipDrhAVhOxobOOXWUwjwMX8BAN+fNgQGf6jfXyi8EdcimRYV7d8G1MgDmf7maxU4ZqU+b1EpZNIVuqf1M7ZAjrBPx86mSX2lwFashEuTDO+ARUVnoCXCV7HNZXMDUfM4jALj0KjQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR03MB10396.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(52116014)(7416014)(376014)(1800799024)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8H1KM4mWF7QlFojQbZ/lQM3M69hrIj7ru3pwnhtZNDuTXO7FRC2oIi0SGaOCihC2NlCkXYabU/rTff9FBE9gx5sn6XSRfIVMX0/xdOSqhRQpigG+m9D09PTR/4WFmCj/n1KSx6VJ821S7IHrWo/EfO5dpUq93i17+BgPYnGkxkRUy+iPPxFUVVdlFPZyF3l6JQkBoYwrubho/VUEYre898oDHEHNeBUYwQePeuqc4ia7MLpb2FE6d1bSUlPAbvnW0Bjr1MoCMlQ+TeM4zjEpz0pRBBcbH0FxSDAW9TpzxqcuNn6gHJOoLvwMx5VuAZRqzxLerDezTSkk8iaFRxbnjltPkTUc1ojfrNX3L4pQ4VM9NQTBO+TJtcnCaGthrOaF8VC+iKS+XtXYQFFIAzxD8tKdm4EnqzybsZB4ZcI5Tj7qZViB0tR+Pq7ip/OPQphc5iWJK7hrmu5sA8luLDDLlYRHcFt72rrgOxWBbtghyt5vsHqM3EBsw+wlmrWdvd5CIRtszSTQZ3gyuPBhADhuH91QmIhcIG8XRUXH+qFZVN2282E3/0VPjuX+krYrGHuwQmKbQ18sm9aGBuou52JvW+z/6IoncFryji5+OBj/qxTrogyUCdBpd7VLQJDqxfJbSRNoUgD9TvLve8/dfMyNzEdyRGtG6nhdqgB/qX3DLnXHiXKmjevOJ+sRIW4AymAWT4o4jIgNfmeRwzCXsMhDTUefNwkIrlZz029hb6V47toz9wy4q70xmm/lnjHx48rTbWtNLn3GozcyCzW8EYa7APSbXSVaEocDIZKCDybzvFq23Pl7iZS6orx2n2rKi+JFxxGqA8vTMXeL1OLjprsNkVN9/Q/WJnlsAL4bXpEXEOn1J9rtLExZGweC03EmtvJB/+n5qsHyRh+O1mJCyVqPhnXQYPdhu3Yi8j+4bZGIhk5u3pb42K5CcxuZI0Q4O4z7qauUhx/dHzqIcKgSZCvf7WnIowkrhB9866vELhRgcNEaVdXul/W6kMi/FgDYUU7mfNZDm/muBPkbccH1A32ufGS71du7aCxI8CyBUqf4vpdf3HV/R5iDNVIlsQEI1FDojMr2jmxz2lFfVFfuKsMVBLYL9cBsxT6npQ7FA/tBYiR2x6yALS1CM2H4H4MVrI/VWTeln7xCa4yFJKcCcSZNTBG5v9QRLC5EhaSJKMZUrDt1T1z1SrmJ2jrwHSWrXdgjODn1WPie2Hhu9kmqFRi5ERz35VyWT/3EJi/9yoy9gWFbzE/J7BX8K7skIqZMTEiVXcBaUJwKsRvsSKSrpRfhcWFkJIBhxNQDJv2FQou1cSsOrEryDmVPGM2HYbESLEQ7TjnosLYzK9MxGfvIrk1lhDHq6FetvMYZCl+SJiF/lDdw1XJhpWmIvuxfAVS1775ZhXuIPsxAqlXZ0LpwuuUh4CLnXCaLFm38vLInoFs6bVUWvZTL+NSoeapHRjN7dzK46zcJgvL5BfkCpE7TbjDGaK2oAHqoKsPhiLgiceLfYtsjYPz4n10fijZT948kFwPvRSk+laAhDJmObWZqgR3AMfHI3/LzEKl/r3PK8ZeBGfqpaUJj2b+Zcj7tj5nvdeJa X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3dee3b22-2dfd-469b-8807-08dd993dff01 X-MS-Exchange-CrossTenant-AuthSource: DBBPR03MB10396.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2025 14:36:10.8455 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fb4c0aee-6cd2-482f-a1a5-717e7c02496b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: V9IuvscEgPeGkIwRQlMqsI3L2RjWkHjeopFtxI6LmjEHo3Q7iz/ChD5+pmAsDaOFn8ySdg2v/VJKubp6ME2vhg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB9912 The current implementation does not apply changes to the crop- configuration of the sensor immediately if the sensor is in streaming state. The user has to stop and restart the stream for the changes to be applied. This can be undesirable e.g. in a calibration usecase where the user wants to see the impact of his changes in a live video stream. Under the condition that the width & height of the cropped image area does not change, the changed cropping configuration can be applied to the pixel-array immediately without disturbing the IFP. Call mt9m114_configure_pa() in mt9m114_pa_set_selection() if the sensor is in streaming state and the size of the cropping rectangle didn't change, issue a CONFIG_CHANGE to apply the changes immediately. Signed-off-by: Mathis Foerst --- drivers/media/i2c/mt9m114.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index 7d39978835fe..e909c1227e51 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -1301,11 +1301,14 @@ static int mt9m114_pa_set_selection(struct v4l2_subdev *sd, struct mt9m114 *sensor = pa_to_mt9m114(sd); struct v4l2_mbus_framefmt *format; struct v4l2_rect *crop; + struct v4l2_rect old_crop; + int ret = 0; if (sel->target != V4L2_SEL_TGT_CROP) return -EINVAL; crop = v4l2_subdev_state_get_crop(state, sel->pad); + old_crop = *crop; format = v4l2_subdev_state_get_format(state, sel->pad); /* @@ -1331,10 +1334,25 @@ static int mt9m114_pa_set_selection(struct v4l2_subdev *sd, format->width = crop->width; format->height = crop->height; - if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) - mt9m114_pa_ctrl_update_blanking(sensor, format); + if (sel->which != V4L2_SUBDEV_FORMAT_ACTIVE) + return ret; - return 0; + mt9m114_pa_ctrl_update_blanking(sensor, format); + + /* + * Apply values immediately if streaming and the selection size did not + * change. + */ + if (sensor->streaming && old_crop.height == crop->height && + old_crop.width == crop->width) { + ret = mt9m114_configure_pa(sensor, state); + if (ret) + return ret; + // Changing the cropping config requires a CONFIG_CHANGE + ret = mt9m114_set_state(sensor, MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE); + } + + return ret; } static const struct v4l2_subdev_pad_ops mt9m114_pa_pad_ops = { From patchwork Thu May 22 14:35:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892362 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2067.outbound.protection.outlook.com [40.107.21.67]) (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 76DF828D844; Thu, 22 May 2025 14:36:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924596; cv=fail; b=AA6IzelUgyBE6OEFEFWu+P1PXEoQjLu3Jzw1bWqI2yAlAr2N+h4gJkXbr/OGFF/3aQjkaStdqcBE6M2/Hg2JtjmSioAIUjdyqZH7Gxe4YtQZAHyRV/BpkmHVjM4y4TwHDQriPnfg6j95tawUsDYgTKFn0SnW+VlcEiBKN+V04WE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747924596; c=relaxed/simple; bh=PtwewO3aSQLZ7VyBimnpgEkU0ZpMJ1lwStOvh/AbqX8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=NNS3RopyOxVQB4t7kLqqbyVggGUbMCHghdsnGL3CdNSebIXxx7ePqbEObz+MbO6/61fU+obuoRMeL9vF17qMro9ilt/ZekbbWkHkyoq+crOkcXqGJhDBB6qI59pthfd3zyXYEflspV75iRM1TQqNH2uBqXTp9VbLXCggi2teVpk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com; spf=fail smtp.mailfrom=mt.com; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b=nd4WQiuj; arc=fail smtp.client-ip=40.107.21.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mt.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=mt.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mt.com header.i=@mt.com header.b="nd4WQiuj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oLbonfZRRhT28+IkPJD7UFW1acHm5xsQ8TYBvzgcA3lsW9wkNWM5ov+T9vfcrYzTt4PlZrZQEb7RNlbSQf/mpbghIhE4/OWx+TrC6EXMmINZvYRlZ5wmpfG5IwM3wKA74lUhuuXq5vir0uhcjTYfXvy+9VF5wd7JyRSpILrbb8vbyrlYvcnv3Jm2/OUGF6lutKb8DBnycFiKZX7nTs61HBoYyB++gxJwN28/1FR6pT8PKCMyVidwLluSgY2y+tBdXNMrxDWM7P9/OqaoZCUV8wAmywdt8iZD7e+ICH6iRjYkU7u3bTPP5CyZ1C+X9lZUwgMBbqy7h2BJva5ldhFVBg== 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=pZ57eQBoB2f7s7tIlkzOfXyE1kc9Z36D+uRS6bnHkv4=; b=GbEpIyDVQ6+uwzrb6dMgNK9FiW/hB49gtFsMd+anIzGFc1tkKx++alNvStq9UDH13HGwJEM9eyXHgxO35f9Y13yhgwD3lyAGy9E4fzx+8vLxDOW1DdCeGiIiQ19pjPG022w0+kyUyDkM/2ZvWg3XEX9lattGq1Wh14ky88H4dsCAwio7fRmfMbxSHJD53bXXLjOV7z35AiLJinv9uvm31DpsVKrzOUdFGG77O+QSQvrsMHC6kEfcRqLmWo8MxNJ1GrknZj1AE+KRwyiDlk9nHr9+7UwNJ+mjZBZFp9/qaf3562fgKXsiJHmtocmhQtk8AWaGY4D0CzX0PCKwDir+cw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mt.com; dmarc=pass action=none header.from=mt.com; dkim=pass header.d=mt.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mt.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pZ57eQBoB2f7s7tIlkzOfXyE1kc9Z36D+uRS6bnHkv4=; b=nd4WQiujbJZ+2kDkuKg7O/x55Q0XY0BNjM8n4qUOP9bbrmTkS0x1Qnouyf4U2mI3LffdnXfxV0Dln2G7FPI/aJR5r1KmW33W88u8dXQRgajnoW0Hhaxft9s6PdWfg2E6l3I/Qce5bAaxJEKzXP1m2O/RfAsnh57yuGxQOOZnF+Uqt4AiSVnJEfc/JXPONlsICYCC2Ct1Qzgp+cIdkoHKUtzJMAOrYc53w95MGyomNCvfM9V3DFVhj7g58hWlsx1Uwwlo5ABxvU5OUrOcIBlFHcPjxLdBT5BCLkIIlCj767kaHmcF2JAD/w+4pQong1d52Y4FPxSl/r+bhQQAW1rQNQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mt.com; Received: from DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) by AS8PR03MB9912.eurprd03.prod.outlook.com (2603:10a6:20b:636::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.20; Thu, 22 May 2025 14:36:31 +0000 Received: from DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf]) by DBBPR03MB10396.eurprd03.prod.outlook.com ([fe80::ee3c:c9be:681:c0bf%2]) with mapi id 15.20.8746.030; Thu, 22 May 2025 14:36:31 +0000 From: Mathis Foerst To: linux-kernel@vger.kernel.org Cc: Mathis Foerst , Laurent Pinchart , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sakari Ailus , Steve Longerbeam , Philipp Zabel , Greg Kroah-Hartman , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-staging@lists.linux.dev, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, manuel.traut@mt.com, mathis.foerst@zuehlke.com Subject: [PATCH v6 7/7] media: mt9m114: Set pad-slew-rate Date: Thu, 22 May 2025 16:35:11 +0200 Message-Id: <20250522143512.112043-8-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522143512.112043-1-mathis.foerst@mt.com> References: <20250522143512.112043-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR0P278CA0182.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::15) To DBBPR03MB10396.eurprd03.prod.outlook.com (2603:10a6:10:53a::11) 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: DBBPR03MB10396:EE_|AS8PR03MB9912:EE_ X-MS-Office365-Filtering-Correlation-Id: 9fc942b7-1fa5-42be-e208-08dd993e0b38 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|52116014|7416014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: duJ8Bb/ruPoKtfMAIlN9JAEAtkJhB543lJzersycVGKIW2j5IQpRKn/aZNivUvZtUBKC75Ae6iUCqK+kWhczrpNq2W/pgW5+/vw4tJ4I7pHHlBgOk3rfZANkqwoeR0hvUFxsmF9bkQfdigcGCxbAqaiZXMPuzA0wSGft8O8gSzeiFOb5l2xZnmuqA/yK5gmTRCfwCH2hqB1cB3REhknE+JnY7+L+0K3awyAm9yzcDHS01+QpUtEfGoHTkhGgHtKbz7LElvjl2SuKGjA36ANZd/6SwYMpjCJlf88f2fu0nG8HDXNrKEzxspxCBSODW+3ZW0jXFQuGiG/ZvnJZMGrzRwFhzLIsfEZ3MfsXS3A5t7lqACdWRXCPkIQwb6N7mdGtze7GogVL2wKW0b4EHVl92wmZi+q8AldjRBOwjzF1h7I9G6xj946kCWaEwt23ftnP9ITe7YlUzb2I9Yg0KNxooT5DvEKs4b0mNkUdf35ZHZLvorc0H7Nk68xkzW1GdKgMG/2DdMgthPUJ2gYVce7E/0O1OjFRDPa2w97f6w8frxMtXNTtXaokeLjGI6u8cciMewXUp3tlUeWdbOGCpUC4jBHn1TuJ3Uf3WW2kGzXDJOdHPSJMSRaLZqMuCNJ57lFYb6Siyx6gZNn0JeuvgLDrd8jwQxBploQ3aZxVuCNjZf/jKFSOYaLBOmIeHlPop0t7sKFFqFKKtjDTByw3zRLEXEqjkSrgQZ8KDipHYebNoZatH0I4InQ1rjjb/HaYZwJvXcBviETr7Zpm0SUi4FVdrEEVG2CZ4TyojFg41oixPBunFy+Iqj1dot6y+VoxNrbzQdeNxuFODAJG/+Onh3c1X4jCyk2hkHTM/eWSxTiDCWQcAhRZvS2LYEqSVUIfdWGtpV4+6bl9nuSO0ZSaCKynVqGWjpEdi4DbUD2CBlwvpmK4/aOPxn00eTxo0yZ7c2bn+5L/shEpZJJMebrSS6XkoMnti7uyZvy8CQKV0F6SUYaLiyBrwID2MHGH/SQmPNyqi9KGWisp+Dehvx7cMZDQRyFQJx3KEWBa7yo6KROw5cOlt3L4/RXa/4JelT6CTQVi57NNotqMlcXGkgneEXDGL5KWe+vH3lVps8hUihmspgtGeHKTlYWgxAnFCTfdvXMCe1RSP7CfRJJm9tz9/kTCbLLQxl3DK6gYA5P4d4r7MoAnm6p7Yzcx/EJCHliYGMjNMhFm/BqIN8QFDNR3dk/y/J6TR+gv+Gw2McVBoNjLebwrxmPk3AiWHvN91J00Y6nICsD3LX8YWg8CwePhNKcXRneCmhpQbHeQLWh0iW7Q3DmfsRfmaZtyYhONPdMqlZmVNE8nSsC+K6V8TTYPTqTiAdiz12fegG3waTyE36XMFCLEfisR6YnrjV9tdRELxhbhQkIZU4Bm5f3BOgOhcrreQVtYAG/n0QUhlM2/RaG8KN4YzggQ/PqAjAQiWb+Itauhp8dlyzobdqB6fCqJApQt+w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR03MB10396.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(52116014)(7416014)(376014)(1800799024)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NZfxVcOTo5odOlGD1qZpfaTaC71Q/swU7u4v3CXxKby4xy1PjgN46YvamixhXMGMHp3KcPMxEStPxcXFeJtCOMbtsW9IoeCWD7/oSVgC3DwCwsXn+o1vXmQE9DBLaz7U2NMr58Lt9Xwb1myT0+jxWFPCKUFSRJrYVmC50EKPmrHw9JnCAViTmA7z5NKfKFNah9JyfQVDbtqmsQKFlyZDWFl4NOWlmmhy8NgvC17PqVR8P56kB2RkAjTUHGttXtHYxd3/23Iy4meJAIJalnKBIF665JO8xoheFSnXBQRRbtwPKNnEQPbvOkiKip3v+f0DuLyQhNti1eo2xEW7WtU/z5yK/Xjgu0BrhrW5LDq7a35WMQnF+7z8kISc+UsFidRcZlIWthbAt+VKwBb7gJwpp9SJQFaKMlYRAOPE/WFKti8A/H1L0rz2XGO8lFDnERP+c3GFY1eXivtKs//61UiNR7bRGc5T7aled/cte41T9ny4Vw3FnfYgWc1+i96s/oeV7xJlERuQzTera0xtEohr/rgGF/BzEUOqsJKqXYfNI29CtOn3O97sdfBUpdFYH01zO6crNlIz+EG+ABa7S0F2KP1xIutcktGWKpj+5/kIGZqRRlZn6kjuyZcn2VCjhEsht/xu6Ozlqg/ptyM5qCZsXtsEakD/O193PwSLKKGPnExvndO4zflaxpKVJXM5Zh0o/d7kVR+z7B0/MIIuID6zSj1fum5MquRq5U4cKn05cT453gdD/Tn3EjisR9jIZ01CGIMKfvmU0Fk0NjU1PEWn5akZmw+UZCxFCoGlfo4JAtdOJJnMuAAsNCQV0Z78WegGYN6D/jyMVnq9vY1GckKQKAsBZjsEwyaB/Yad+WySxMiMUirddUhwRylrxMQsxCANgLykQyDZWHgOdP6vswLmnSFrEWHFtpJ06uq/Btjr69im+3vCz7nnD5Za3RmM+AZ6Zn0JWSj9NUTXIu8Ta5xVN+uHs+ACf3vLHP7I792qfR1hCWZCYwOLif0vkoNxp882mvT00vvh9yOyYtcrsOlk5/4Exd5x8a0MQqi9MBZrQoFJuJDSx4REmXrOz+1GlBjVpEp7xtUTUT3/r+S6Ja4fEXMVLi5LHNXqXt02mwu6J5YOTrzq04OSOma8VOc12t6gnS6JnOWk1O0aZ3ZzYXKib+zvYZqxJxPtMFcRJuEbl0cK1EePHcMVpbrEZyqL3aX9dRZRkbzVszAw83vmOZTatu1LFhL+iykFrmC0VYAWYIrVG+shTGhDK4qOnaeP0M87CKbjTtzXLkBOo+o+3OBfZRFU+rviEMmxE/AoMK1TwdUyg90PrOmB9F2c85+Sxhh39os8FzZ+JJ5Blkfuj43HK4l/UjI0p/Wr2HOz5C8r8Kjjuf1L0b1YdW6nIXqia1dB5K2raUPD1XmEKK8vYGmmcg9Vw2vk1rgsy8FtUpFgAPeFaZxzpJw/wQSqFml6eAAYX1/dVn6S29YWMIbZj1WR3hQ08xhAGk6sGMOCkjCowrxKSM2XXKS/FyfeS64Qd6WxzhVFbzqrL1P6wuLFSK74r1ThCxPBYrLhg1uMDfUsW5Hqc6KFhQYxMZEd4uWk2G8P X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9fc942b7-1fa5-42be-e208-08dd993e0b38 X-MS-Exchange-CrossTenant-AuthSource: DBBPR03MB10396.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2025 14:36:31.3003 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fb4c0aee-6cd2-482f-a1a5-717e7c02496b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9bjZEnwPB2vFHVcC0MwM2EoS0O4t1iT4LbH0pDKV9dQs69vSN90I46NDDevJUWnjvWExPustTTGS0bsMdmrJUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB9912 The MT9M114 supports the different slew rates (0 to 7) on the output pads. At the moment, this is hardcoded to 7 (the fastest rate). The user might want to change this values due to EMC requirements. Read the 'slew-rate' from the DT and configure the pad slew rates of the output pads accordingly in mt9m114_initialize(). Remove the hardcoded slew rate setting from the mt9m114_init table. Signed-off-by: Mathis Foerst Reviewed-by: Laurent Pinchart --- drivers/media/i2c/mt9m114.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index 9ff46c72dbc1..f3f9ecc0866c 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +43,9 @@ #define MT9M114_RESET_AND_MISC_CONTROL CCI_REG16(0x001a) #define MT9M114_RESET_SOC BIT(0) #define MT9M114_PAD_SLEW CCI_REG16(0x001e) +#define MT9M114_PAD_SLEW_MIN 0 +#define MT9M114_PAD_SLEW_MAX 7 +#define MT9M114_PAD_SLEW_DEFAULT 7 #define MT9M114_PAD_CONTROL CCI_REG16(0x0032) /* XDMA registers */ @@ -388,6 +392,7 @@ struct mt9m114 { unsigned int pixrate; bool streaming; + u32 pad_slew_rate; /* Pixel Array */ struct { @@ -650,9 +655,6 @@ static const struct cci_reg_sequence mt9m114_init[] = { { MT9M114_CAM_SENSOR_CFG_FINE_INTEG_TIME_MAX, 1459 }, { MT9M114_CAM_SENSOR_CFG_FINE_CORRECTION, 96 }, { MT9M114_CAM_SENSOR_CFG_REG_0_DATA, 32 }, - - /* Miscellaneous settings */ - { MT9M114_PAD_SLEW, 0x0777 }, }; /* ----------------------------------------------------------------------------- @@ -784,6 +786,13 @@ static int mt9m114_initialize(struct mt9m114 *sensor) if (ret < 0) return ret; + value = (sensor->pad_slew_rate) + | (sensor->pad_slew_rate) << 4 + | (sensor->pad_slew_rate) << 8; + cci_write(sensor->regmap, MT9M114_PAD_SLEW, value, &ret); + if (ret < 0) + return ret; + ret = mt9m114_set_state(sensor, MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE); if (ret < 0) return ret; @@ -2398,6 +2407,17 @@ static int mt9m114_parse_dt(struct mt9m114 *sensor) goto error; } + sensor->pad_slew_rate = MT9M114_PAD_SLEW_DEFAULT; + device_property_read_u32(&sensor->client->dev, "slew-rate", + &sensor->pad_slew_rate); + + if (sensor->pad_slew_rate < MT9M114_PAD_SLEW_MIN || + sensor->pad_slew_rate > MT9M114_PAD_SLEW_MAX) { + dev_err(&sensor->client->dev, "Invalid slew-rate %u\n", + sensor->pad_slew_rate); + return -EINVAL; + } + return 0; error: