From patchwork Thu May 22 14:06:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892370 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013006.outbound.protection.outlook.com [40.107.159.6]) (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 8034228CF5D; Thu, 22 May 2025 14:06:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.6 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747922804; cv=fail; b=EUFP7O7vy7gt2cxwHNi0i0LzLsqbD3iMjObf25gtN6putkZwumFhNzqE6gUIJjvGbGeUHavXrHRqckUeMmHpERlCg+bsH9j3Q2EdBmjXU0iVHOQPCOji9IiDhjbKK2OddOfLiM4CJnGVPVub/OCOCs4GgBWG3WAst1ExdttzTHY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747922804; c=relaxed/simple; bh=HhNmQl32WKJhBHXcguxD3ErQxTRXGkcjtBID8jYEA2g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=krD+uNugc++DFz0KOhgZmK8a3348OF5OMIxiRRYTH7jiI+VbVbGAQJC3OmeC4Ts4UuChu6X1q7qvuL6AcCUEAjO9h6UeJbSWx+7kcTvnCv/uCWVLOKzNB00hTX2el71rZtMBvADSR125SNEmToh8jTJBCNrhJFLfS7gW2gpv0LI= 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=B3RHgWjF; arc=fail smtp.client-ip=40.107.159.6 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="B3RHgWjF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ov3bB7jkyX66JrRqL9duYS4XvU+POjzZ//lk34PL3/Xlea1SgHfHKjMn+ga97/YZTDCIhwV19rwj6zSHy7kOSVutbbhJqD5w7Q1aXY1oFu6EYz5X0uE3Tnf9nMmC8eZ208/T8Bio3PUrKH0lv8t37jRXb3901R74rL/O0kYvQ+gJ3/AVU9+yVszwQFBvlBXviywjKzGsRBnWDF0XnSP6fPKjVB9F0tec/2PJJ8RE6sc6iTbX++PLT6v59JEfFEOD85qhDWcCZ1IwlQOIGxm5yPy0edYw96Ku6+TE+abvU3e1BXh+zWUNEJ/HakQGFtMh0vA8CQyNdrpkO2m+WNTv1Q== 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=gy9MGTCRduhdAoAvQAPS14CTOGmLEk45T0GIzvZOxO8=; b=AI42F7tnPGJTngwQZrP9X/1New7WbjT6H2SYz2blsG49lY+7AF2pr3YOVefzgGvfT1Lz1SLqaTSP4gIskdaGS6iEdFdo+UZaFf+YZawB0Mz62WWdE7cJCLDPIXPxjFu98cJ0ohLYsHaXI/WgCBIo5VIFNj2+hJMRWjIseMNB7T/Sa2m945mxnbm4ZFPRdnVxDhimd/8roPpw5iGnq1lZ0rUdX//jywPgQZImitmUpjdJlaLcKPNgGnsHNSq3OpAfn+2L6XKtB5KNut+LDl3PuQHQa8groYZLMOlVHahXyWx53I/dsj8yWP85LP8r890+1g87pN2q9fp4h0mpjdRrdw== 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=gy9MGTCRduhdAoAvQAPS14CTOGmLEk45T0GIzvZOxO8=; b=B3RHgWjFXTmmwUmejUqQLZWJwFblmhEnLX1XMyDipmgpUnxBnpCJPYWcphhgYIZuYeGCMV7DSX+jK9ov5rZNmlOCteuieai6MFPKJiRWp2vemYy4IfDugYBTUmmY4T5SdCrbK/QvYY+rHNntL8s+ybJOz59ibOevdeqTIzKq261RwKYNrsoNzsWcdaso1UznS1jkrUnyrEpSDUpOWSSIawpugI9aBUFS53oNo/aODmu3LUSGGsMNDI/OCO+4Rl6V/0l/mFjmbbgg00+xpYRoobF70nXvDEEbKUWVKv9dN7gbAHxZj4rgB/K05528oNJpM4VUkIK4W91wKIrBLboxJw== 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 PAXPR03MB8252.eurprd03.prod.outlook.com (2603:10a6:102:23e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Thu, 22 May 2025 14:06:39 +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:06:39 +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 v5 2/7] media: mt9m114: Bypass PLL if required Date: Thu, 22 May 2025 16:06:08 +0200 Message-Id: <20250522140613.104963-3-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522140613.104963-1-mathis.foerst@mt.com> References: <20250522140613.104963-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR0P278CA0158.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:41::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_|PAXPR03MB8252:EE_ X-MS-Office365-Filtering-Correlation-Id: ddc0323b-c95e-4cc4-6288-08dd9939df32 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: SBrck5b4+aWhqO/Pv1ozeKj4aKhrjQI2Iell2x/sTu+NVuO9KR521O6HRXbGR9rf7b5krloCgPM39GTpCOkNyb+sEvwqH5oybgqwXuKqaXWQVI4Uh0C0ZL212L7uMa458GIR5RK7/m5/k7IeVh8Fp77tmiMxPczr4BJih6KSEbfYsei+RN8DANEdtEI7tBJwMY2nalzfjHeLPv1ekVdMRMKhI3IV9zs1FID9lGEeZABxrI1Zf+cIjubws4bamg+obaoJ646tJFcVDKzVD5B0nE7xSRsOUCIGnpwuzZ73ADaQ8uYWF55str/sqb0+0KwC4AKKpy8+WpdavQmw6aG5OPkMlkkbz97cGC646/y0RPAx+Wzla3s5n21CF9RMjp2VqazocEplmhBukBS7MsFQOyKgcasETA4wozRMyYPO3PfOWCWsu5nrE8Bgv7MwuPEc7JBCjyk58jp6g7p0thbvGs/hpllVv888IEQH3yWCBZ3D7xabGoZ6WmA/qTz/XnXpMJ+qIOyA+BWV1SlN7I3TsVAZS+Z8HZtefnA5hx4LHXtFFruzehXzepkYAsAVLoGPRyUFuTy7EQPHGabV1aVNWdLgwCt/83lLhuf85qLBgmUu4FdC91oHER4AILEktUS1duURIxntScIYmXWQvoagXf5UyRFXKbKoPg7Q0Orjp6m1HumVCK4lPm/gEzaSZu94Lag1fy/4Ni3rPmpZabhm9HbkMdBG8EbFpwp9CUQsn9i+J0bgNBRr7NGj3WQA46ikj+D2dnM7M4X88ymIxd+yhjQ6oNr5z2wlE/0aVcX5nD5HI/MwfOKdEo+NiOzzxOqTTusTwB3oJuYU1UbEZcYDtzyRa3F8uNkuw1sZQDiMCe/q4mqbwOeNv/Mh9aybRJOMRsnm1OVSrqDoxYf/cRuId06Mnpq69gRSJQY/ZtzVou2c2HFK/XmDrC1rOVU5RSGdWwnAXjUxEaL9Qu74QT/qAs9bqaQ+IcWYfCWMDWAw5lmIj9EDWZadhEV0B2+D1vkbmhqYSk1otcSjgP3hJ/eqpYSqte9CvsGzimaeC9xtmykwrKZK0ULRQzq/nTdVVly5zlNKwoW1QjG0yuK3C6v1ku17CchqrJmu1Y+OBwi3i1eZYdBqwgOeIm+YKCJBjKaM95D+KF2u1XepWPfsq+LPH5FkWoqX65bjOFX3EuYiP1gY8NRsWQ/5NgOH1ItDgs7jScL4qiyZr4V55kqUurhlAK/k/hOkI5EqbfzwmMbamLxF6DJRVFhWiOK+x6aL9/blqRNjuMVC5luJEoxnQV0nLhk51ljk68KX+d+V/daWLcleclwwxYXB/gKHptxzQ1yfId+G+NTo8WdOwmmT3b34RugjdlSS+RM+LAHCbR2Oj5wjhVHiwEqCKD6Y54O605AieT+ZNhiveAXiGPqBokYXYaYOmaCJ5FpE6O4IdBDKWqsLf7cV23hbY9iourWeDGBtM/8lW9phdoCw4PdUKr+oDA== 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)(1800799024)(376014)(7416014)(52116014)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: F5oBxSOVosI4sApeOjhHz2lpSP9WzQxumK8uKi9hJyJKprVq0bCuTNGTNHuGS9pBoMKv0LmT05IptXn7sRLRk5Gczw9xW91rHLZmogJ81gk86VfU3uZVbmR/1wDq7l8AoRHntCGft/If0Ys7faCgSiwdIPcW2wwyV1kKqbLUb3cX7IdDdX2icvztqpSdQN6SF+ZlwmbIlR0UxOKuxxlUpsOH4wlwKom0gm0V0cVF8owWdMwBebSaBQdyTVdosTT0vNxRVHu0RmmEnhitvtGGpa2KkBJLbsavvNDgyyq1/mc1wjS37TaXHAWChaiwG/YJe2/YyC1FHqOXaZhvBRkWyToiAp5Izxi9lsFlBcFfXk1WoWZ0p/kuTjyEFJHL5Pbc7K7GU0T2VJyCH4b6g88hbGNqeBjGIxSQ8nTm6J6LBclKVI6qkg3j1FNmjLl270+ZJCMp1xtctWbjs5iN48amYMhZo96puhvp8D8Koy/OcV/ggmv/TczILO/i04k95WOP5mB6Rh8rri6X3AgIy/xr1ztz07Kv+mwWPKKBQ1R3xqS7T5FY8b8RK+zBbcA3755FAkjLXrFBwfKe7T3sXEUNnaXrsqbF11yRZt/81eBOgkgmxeRDUq+r1bY21dDE4ZBuQGMMm4sITh/bvNSsZxXzJddx5bYMTzkDferGlAfSCXLRsZ3GAaVpDwkvAU9HGU8j3XY7OHE14u/LD1Ds9vBmqAKHNcOAZ435Cv0TSQSvNUPkH+JDwottkcKX5tabA3WX6LRduGiRWJwVXOFbq616Gh4RQnjW0aUeQtTdyV0HBScWymdQR7rjkd1o35SPnKRxW2oVk/tPDyM6T4kHmud+SvY7NK0uKdJ5j0FZsvC8NQb/Ts2hE5R3CxDB+jEltIjEiQYsHW53tW57wpNfN/luNQgdtUIfHQ34KJNphDEX3uLqZpZnEv06nMQuZZcitv33BZfjrjEMXTP9AUNJ4w+fXv9qduy8635SIoCa9zoNx4CMP1sv+PcSvBd3Md3AZ5T2NazRBmwBxDTHHLYmbrLmdIO08y0iyY5rTRS006VpLnsAW1s7NYHjLJApq3mq+OgLNXIkieJSX/cI2oo+Uw8nIasnXrRa9Ot0mbauQdxoT3npa22IAZDd2eIza+C1gCrpEAEEX41KVbTYdTFO+QetMsJTdsF0GVRsMAR00GcyIbTNBreIRGZZLJT3V6yopNct5UMHYaRnwefQHkONXudmzu6OpV8NiRq/CkuuMs/B31QMAq/dBzilvT2NiZ0wiBl3w976fQ9S7KeIivy3MGyst/aw0tJSnPvczhxkyOktFLiyog5fE+Fr3kD3/Hy0JMO9hITPgTy+Eu5trcNE/RmwML6Lx+DM4JOQ3SZ9wbHhuDDaVWUyuSn1aYOuCEuwHUphtTQPwQf9SLcbGmOyC2vBd36K1ryhJu5d7ntl6JkeC7CF99gc9lPQVZ6Md4CkC0o51yKX4ARSAia7ZolU7VmAvQFd5/J8krysi1ed/3SI3wvAlP7XiA6z8lZXml18Kc+/GA9L/DEAUwUsnFnbIOauC0t2Yh1IRCz/UFRdi4KPOdTENTOMJvEprvsb/HJJLq1D X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: ddc0323b-c95e-4cc4-6288-08dd9939df32 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:06:39.5214 (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: 1hWITxcMVaJeopN7CNJ0KXCMZiHXksx6NvscFKgbrMbyCInA2ihqYCawsS9kIr2QUQukTzPvpnf4J88WENNRGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR03MB8252 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 --- 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:06:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892369 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013020.outbound.protection.outlook.com [40.107.159.20]) (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 087E328C5C0; Thu, 22 May 2025 14:06:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747922820; cv=fail; b=QNgOKSRUxarfi0dFiuM+Paa46qTcPd6Urr1UKGTPDnXH/l1NHKAH5C3EasN92WpHr7cls9qIGepzKtJ0LB9cb62rggJhUF21b+YJU2pRM4Eeq1K6iK0Yg4lEc1KPQ1dSb+qUWgmXmCNEcmvLqkXeWcBH6XMKYrzIqKr5aTvBpag= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747922820; c=relaxed/simple; bh=TV156EtxR6hzu3CGex0/aWTtznD3wHRyinXVeLsQk4U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Fw1m2GgmwdkzzMDIpr/O9waXzitlBy0TLIJ/MiQCYtY8S0E+2QrAz0BWatPQjBl4q3UYkxPj0QC6zAfNNJjUZeS8dik9BVijGL9IYhkWZWsth979kw9O6LFd86L2irdA95weX7pCr67Tf0yqJQtHuaZZzG9JOvcv3QfkwYNNFVk= 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=DBqh2uJW; arc=fail smtp.client-ip=40.107.159.20 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="DBqh2uJW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BdG+s5pVPrMePhexFDrHHQevyzEhV3OvbKZwTf42baCDifmkdR6f1VVAo+bkzjMSccjO0GY6gAuZ1fMS0XTocQIgHILAFEGJm16RmgmP8+zWEHhJZBr12YiiP3MRz8OEd0BrX0wVBHi+HANcWod26q7/Gv3AYOQQOnTt9Jq9MIo46dTK+TEu+je6K9735oQPSSb+SLnCTyakFqUMCKhMRWm5uUhj6Udt8N/TexJ30+ZSiJWGV6KsO4nnAEswmGzeBklQ83FKdXGEjgF1pmKxXdktxx3e0J11DcQFtB61VYNZzylYLYBFCoYZIfyo0p63bI03ESY+6db9kOwNRU55qQ== 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=o3ZiWvfW+NmR6QNPMxVhi0wvo+OYomNh/F99QUvV6sc=; b=hpheX+zTUmQniqCHUviojNleBGGQL9ywoDqZKErnmwFx3VEmoCt/18g0eoNPu/G7UL+iONwJG38MZi2wf0grIE/BjSgTnX5s8VDdjjpHHNMURxFp6Mg68wkwpNG6Fovv09NEJnBgUKp5PLtPWbb2C5+FTs7xlm8ViIZzTxt1D5mW5TQfllATsPFb0X89K4O6aY/oQm+I0dlAfrCY4ZdvreK5iP+zuSnFxh4YSS845lvehGpt16tpmBdKKd2vqAbYNX98hyRyDdf8Xe/XA9eQwREeINEa5I/qp7UTDORNjel1V01Iz6o9guaCETbayeTiJVDJU8Z9goAkMzBq8fhWtg== 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=o3ZiWvfW+NmR6QNPMxVhi0wvo+OYomNh/F99QUvV6sc=; b=DBqh2uJW0Z+AT5hRwW+S/6IhgXqFtj0jzTVkfd/abSnoUFyH/Uo5X4oeLQ3TvxgDhNZJbpQT7ycCr26RWK0QVpOUPjCLk4MqKSPvAXdFUFrglrDjSkKpEC1amwIdndvYttfKFh9LO6xgzERvLezm1RN+kyQLeYJElVZ2zD9e0ZLMB4ogWsOkADDo/fO/aMO4A2LCL6k6lldwdBKDvFjfYq9DFLutFIECdjPX3Yjc9dGvIjebVZO499UY8dmcq8LJgJLXwCvQTRCgxaI4thgTuIpHSnBcXH/mwpPv4lACyXsOtNlEmh5Ol8pbE/sIL9Lv/CzakqvICjuPZVpGCxBXgg== 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 PAXPR03MB8252.eurprd03.prod.outlook.com (2603:10a6:102:23e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Thu, 22 May 2025 14:06: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:06: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 v5 4/7] media: mt9m114: Apply horizontal / vertical flip while streaming Date: Thu, 22 May 2025 16:06:10 +0200 Message-Id: <20250522140613.104963-5-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522140613.104963-1-mathis.foerst@mt.com> References: <20250522140613.104963-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR2P278CA0031.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:47::12) 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_|PAXPR03MB8252:EE_ X-MS-Office365-Filtering-Correlation-Id: ee92e31b-f3e6-4f5a-fdf5-08dd9939e8a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: GWNSrNo34HOeDHRbngPBzlD9eArPSTCRR9LxWRbKeyX3aw24TcnxF2BjipNM072WzKgI7kTKqK3YCWTfoEjhXL9T7WZwyXWkhgS3awUXBGwaHnnvicXp7OCKssY9q07LcoFMgkKp9YR5ZBEfMkZflgehf1JZtUHaTsG8eNiPx/nG/ZTjZKy5Z+8ob39HwJkfVWL3DWYgeejO4w5v96MohdYtQj1M/C1Jv+m7uesI1RFYFWQ/6H0Kd9G5UxnKE2rWoYVUCgi1qaZ9Rczo3g2WQ+ZWc6sbXtl/OzunO3cNMEbgHCW3ZKtabrs4KQYRqBtcx0eYMhxeVHPbmSaFNjOfEJu2cuydX1nQ07kWqTv19N8Y8s40ujShQ3EHf5KttiSeos+UCjqT95eVeAfpwqY5sCypiQ182Bj2owxeWLW8vpaJkqhjUb8OvGs2cELjoMXEnpUAWyHKgc07VPKcei2OCnyVMTqA0yhoXk/xnllbDk9PZQHyWtz2K+hVOYnvdwJuYBjMf/rDgsQi4hugoaKPPHXUdqhZlFDErUZ9Ay2/CYbzH9JiEBpjlD3MFj1eItI1Glz9TShNFopiXT8ACwACniiY0rQgih8WdDQD1swAW7VpvtjIOdQeu4ZjFD86TlwAoaLyUKGb8sqdkJkHLgKJvyKe7KWq2fuIcKOD+FSme+w///byU2Hf+nBDULG5BPPeQwYnfOpm/aKgfmZ92rdVk3WupnZKYxltsjsdPDgS53+nwKoE61VXHdTZESfZQeFDSio3kA7c9IHsquzcS/kjUvVAushl6OH4lwhe5M2hX68fk3gcRkQNO0dg67O9loJZFdV5eoKNyRH+fhuathwAyuYBFLFpFK1O6LeRSTMPkLWLzuocIEhvu353+UyHs5KRsgeZiZLSw1QnSf6TLI14fCRvRX0UHefZpSXDRomOmpMXfIxeKLd6mM3ZX/i5tNesG9rC+aTV1sIngq0TgesSgsSuLeOQGy5NXJzHmyCF/DpsltYE4xGGtgMRRP7RHaMQUdUx+2L7zbuGQU/aF6zK+vUOjCj6aivg+DwZJJol9K4Gl62IJICQOkhxUGS7vomvDnsgIG/91ByvhxJxicJrCpg0mir4bjsQGydNpn6aapCUudHyezdL2tLBHTbi3rA7bny1jbJL0ffW+y8ReF+uKcOkHCZUJZeb7s6E+syQrRJT2allhdFuOIY6XqMBTuS5wIvyMyieWNegSx0+bqCbAbX9dxi9/cvs/GU/z+A0+wiZlpovPLmalQlgtwjshjnnT81gba6naqgQimR3RfCQExCCP75auZCaPdeQoNMBOBMu/0GbGI6c7M5/ReKx52mwFEITpQa2hwsQW5qGAj9JyIsvBP+MZiroeYaVbBjptmv6jgjOKfwUKwhaqZYk1zKPQlV7sHrw4a3oDv9Nxar+XnnOsnl6EvkHGZeyaEjsFxcaPnbmZHnqNTJfY54YIUt/72KQId1grdG86avkQKAjeA== 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)(1800799024)(376014)(7416014)(52116014)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VkgnKHKzd6Jp35jhUhbmybbehL6Y333Vy64YH2+jONZOyErJ3EnQ+J94UP55kHg7J4+oYvVT/5vkE1zQMR7E2sCBsryltyW8+kMzQebwIqSXI41EuyLCrkrMb6VD+9ARrBFp1PXg0zJoy0Eg1CtmDqrC0C9xR1z0hw5UOd2T+I6gp7Xrv5/u/fP0rLAWx/QUvOXXqXlDBftt2h2/6blARlApjRpQKa3CwFvVf8u4/cSsz0ueT0SMfKob+kUto9HQir0FWnVGEtWCdiwiJ72uDyQy6LQVMHCUOwQQyDGghqQkyTaPMBMedNf8r5WXzkIbL4eIeRSgARro7F6ERq1Zu3F4aLwLZ/s8P+Oyjxthx4Yibdc3/vIuHbmQGZMV3QKiYMClYLbijL30Wquqyn+r0Qne8wA1FDbs4+AlwoA9aEeVz9QTKuYQUbx8EegnYdPQ0drEBc6QSnxFBQi791B9mM8S1PYuQi4UqaadUm4BsSEUV7SkPGRsZExoVnpZad5UIISFhJeRHA2AcEWYAI2Hym/U8DtZpQ2lrxDyyKhpKx/jLUYBH46aF0vF18l1oESz5x7W3n1LTn0HqenTybX7JQIOYNJ9W0/7Pgfe6Nxc+wH2q/GUbKvmJdVdHCq90PW53//ersfX+yfAgRmGtDYWs7FztkapKCHgSHnTp3mZctgl/LxsSXA+MGKzPIr0hj9ojgMMuCrvrwbkmtzrUYOB5axsuXpkbmAyTcG6ubytGDKeOp2zLDvqshGTo9d0/qsGZBS4yv+uX3++NVMqgC7VzMZuqyM1MGoipE8e+QuWmht7LKcNbnvV+tptjJ1knOqpnis8dmJVqh2qgAHtAsU9jGnGvpOPyjSn55SxAwRaFKZcdJR4TxtpkVEipy9C888HhL41RBnKTv8BPxYuHAhrXI1bNKRWyI/AGOjrY/3nf64qmIH8g4R0xS23jITIeNSE0p2NQ/ZgwH0GFYqjlTlVwHwAedcSmeQ/JRcvTttCrBs1ChUvaaTLM/cv6oa/ywyIjE9rRhxVW1bY4RSexH9GkSTw+PN8tofwEsnd2z75+EecexW/+QaYq/nAvyzug/8F8vem+EPld3q113Dx9Jyi3mj+2wSn37Vbp8u6DtjumuTvlpir+Ee2e66oR/eREBBrmVDlbzH3/pNVvuGPwv0jNz1NcXt4arNXWwyE9sEYQpgYEwa1vtmJh+OEDL0bZd8dIr/P56VF4RR8rKQeSoHRbqNNg7KY8qk5ZRYg4eYmezkmJOrOvawsziHn3WrkOQPRtbRnKB1HWSbnGdyudeHhpXKBT169Iy9+YMCHGuDkxa2IHfA0XoAJjm2FqP8wt6ADyON9gtH5Lg9eu7CQdvpmloCVb1tl7I7yeuIHaZ8ed3XqbkLNa16wLju6I6P3GyeKdYUQ2uRQ91JWMW4Kb/QhfLSz5eww10jF2HBmWjQoAQOUJa98FwIE6EAFJD6f0xwThvpmdx3QGbqaQ2hRRAAt9EyyoMKsD3UzqnUn6tpi70uUdz55PtQSWW/lpaCdjBbZ9a4sPsystWJUAuuMMaY0Ea7WzR1N/TZdQt/O4RY2n2lnGvt+7ngWufny67m+upg9 X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: ee92e31b-f3e6-4f5a-fdf5-08dd9939e8a5 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:06:55.3487 (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: 0cRmsa6V2g6Gn9jZEMzZG/kvDvTtQ9DjdjR99RIdZXWUBKe1dxfiaSBnVBtPkjJ9bc4Vtl80MP3wCTzTQUeVaQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR03MB8252 The current implementation does not apply changes to the V4L2 controls HFLIP & VFLIP 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. Issue a CONFIG_CHANGE when the V4L2 controls HFLIP or VFLIP are set if the sensor is in streaming state to apply the change immediately. Signed-off-by: Mathis Foerst --- drivers/media/i2c/mt9m114.c | 43 +++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index 6c80c6926aef..7d39978835fe 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -399,6 +399,11 @@ struct mt9m114 { struct v4l2_ctrl *gain; struct v4l2_ctrl *hblank; struct v4l2_ctrl *vblank; + struct { + /* horizonal / vertical flip cluster */ + struct v4l2_ctrl *hflip; + struct v4l2_ctrl *vflip; + }; } pa; /* Image Flow Processor */ @@ -1059,6 +1064,7 @@ static int mt9m114_pa_s_ctrl(struct v4l2_ctrl *ctrl) struct v4l2_subdev_state *state; int ret = 0; u64 mask; + u64 val; /* V4L2 controls values are applied only when power is up. */ if (!pm_runtime_get_if_in_use(&sensor->client->dev)) @@ -1095,17 +1101,25 @@ static int mt9m114_pa_s_ctrl(struct v4l2_ctrl *ctrl) break; case V4L2_CID_HFLIP: - mask = MT9M114_CAM_SENSOR_CONTROL_HORZ_MIRROR_EN; + mask = MT9M114_CAM_SENSOR_CONTROL_HORZ_MIRROR_EN | + MT9M114_CAM_SENSOR_CONTROL_VERT_FLIP_EN; + val = (sensor->pa.hflip->val ? + MT9M114_CAM_SENSOR_CONTROL_HORZ_MIRROR_EN : 0) & + (sensor->pa.vflip->val ? + MT9M114_CAM_SENSOR_CONTROL_VERT_FLIP_EN : 0); ret = cci_update_bits(sensor->regmap, MT9M114_CAM_SENSOR_CONTROL_READ_MODE, - mask, ctrl->val ? mask : 0, NULL); - break; + mask, val, NULL); + /* + * A Config-Change needs to be issued for the change to take + * effect. If we're not streaming ignore this, the change will + * be applied when the stream is started. + */ + if (ret || !sensor->streaming) + break; - case V4L2_CID_VFLIP: - mask = MT9M114_CAM_SENSOR_CONTROL_VERT_FLIP_EN; - ret = cci_update_bits(sensor->regmap, - MT9M114_CAM_SENSOR_CONTROL_READ_MODE, - mask, ctrl->val ? mask : 0, NULL); + ret = mt9m114_set_state(sensor, + MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE); break; default: @@ -1406,12 +1420,13 @@ static int mt9m114_pa_init(struct mt9m114 *sensor) sensor->pixrate, sensor->pixrate, 1, sensor->pixrate); - v4l2_ctrl_new_std(hdl, &mt9m114_pa_ctrl_ops, - V4L2_CID_HFLIP, - 0, 1, 1, 0); - v4l2_ctrl_new_std(hdl, &mt9m114_pa_ctrl_ops, - V4L2_CID_VFLIP, - 0, 1, 1, 0); + sensor->pa.hflip = v4l2_ctrl_new_std(hdl, &mt9m114_pa_ctrl_ops, + V4L2_CID_HFLIP, + 0, 1, 1, 0); + sensor->pa.vflip = v4l2_ctrl_new_std(hdl, &mt9m114_pa_ctrl_ops, + V4L2_CID_VFLIP, + 0, 1, 1, 0); + v4l2_ctrl_cluster(2, &sensor->pa.hflip); if (hdl->error) { ret = hdl->error; From patchwork Thu May 22 14:06:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathis Foerst X-Patchwork-Id: 892368 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013063.outbound.protection.outlook.com [40.107.159.63]) (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 A856B28CF40; Thu, 22 May 2025 14:07:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747922843; cv=fail; b=D7/S3lcwGytTu1O5LipxDdSklPAJYZnsjYgI5r5go6s2JzYbzRC3qR2UaSCZVP/S9owb+YpKYSqnMOlwZBaurgRkA69dPK9aLFX+PZxsSE6bvfcj1pS+2fCqxe4EOoyJ13RJ1VK/Dsr/60IRHoraueAappWLQUEUS4fw87NmDOc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747922843; c=relaxed/simple; bh=cFy0q+oxb81aAMnZBgnZKl58oMAIAQmaAQocPFqZ+FU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=TT/1LgszEDD2xMox3p4N/yBnykWc/qMK1lv/G5RPajrHa0M535p1KRgv/Z+xZtvu+JrqXhds0qR273OBfdF3LlBpMqv8VUtWY1jbZZJmOaFMob7baGXfJN4gV6PFZdOvTlF+KBKwxQ6XrSkQC4OsUlsa70FB7jkQ0e+gnci0fco= 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=HnsIETk1; arc=fail smtp.client-ip=40.107.159.63 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="HnsIETk1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kfN+n2FHenqAE4F5ztlbBkoL2iLU/aNTCJTKMEhgluog4uDsgULNJ/ec2jnr+M152XDtHsKjPFYcChfTge8g68VBfhL2yMZrZCyr5gRJuLGXksMDOdlC3+z+4fZ645l6g/fKWVzJSVfaZCSQFZ3LKQBTrKTeiWT7MCGHEFDwOSGaDKsC0S57/KcW203d/Zt0mzsTa+g0rxYTGiq9FWzRbIr2TOVehO6wyEi6bqefRrhbTy3IeCft3hr9muhOszUqSSC1zvympOqSfmdu8wjgvqL6bRvZz/45nvFSSuZJLaFQyyPy1uNJogFNeCt5da1RcAZdEFFJrvetnXMWwaqgtQ== 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=wBNE5LCuzwyvFwR4ORzgj0SMZ3EikbH2HbbQ8Kiyx+c=; b=NoDe0OyCCcW8HPHwLWZ0NcplEz+x0hI/N3YPJZgB6qCdTrLFWRGy9We2/SYjeTtlblYbIvXT2OHcV23eymvmia+xToM6q8Mv1MfST0kU9sxay+KN/hZYPKxw3SO9qonf6pL5FloMmROTj0LuQZE+UYxZD7rLd3LKYJrLA6zIEDoUXXMbkiAuaIZRb6jiQv14lXWhI+ehUF9urUZS2bGtGocIFarJywKsvANKTswGE2g7IVHN5RlMgSWiiOaTw82b4R58bDEDm2BP2kS8iowGte8hYV9amFQqdSt3utTFte1mKJ0XZGKgdtAWex8lZYu2j7xQAhzaTMj3QXC0Uh925w== 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=wBNE5LCuzwyvFwR4ORzgj0SMZ3EikbH2HbbQ8Kiyx+c=; b=HnsIETk1cRDO/3S58KA5Yhy/3kPrdRX+VBIXwm5LOze0ZW8iLuDEDLeEgtrOUIJCosN4dSuBKik81qAAojfOVEbhFoJMPsh6VaKi70wNsd+wvRU8vBSmBPrgRidmQcvhhPYvkTfhHEWbqvwBIChDacYM6tprSzvPYGgVSt5EZbvc+sMS4Pk0E1ahr1arr5OQVlLKyIKgPJhQm65XeqOgAeAaKCU9gxn11Uj6+cn+PJhFpZDwVVpqJ7Xh0Io0qFPyUN6IoIUOmUzHusxFisQQYfpTNXnysGr1E2soJFufwIMcT1BsCaLiOWMXhvMY8NfgW+dhKJFYPmUzcGb6XEGCIg== 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 PAXPR03MB8252.eurprd03.prod.outlook.com (2603:10a6:102:23e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Thu, 22 May 2025 14:07:16 +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:07:15 +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, stable@vger.kernel.org Subject: [PATCH v5 6/7] media: mt9m114: Fix deadlock in get_frame_interval/set_frame_interval Date: Thu, 22 May 2025 16:06:12 +0200 Message-Id: <20250522140613.104963-7-mathis.foerst@mt.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250522140613.104963-1-mathis.foerst@mt.com> References: <20250522140613.104963-1-mathis.foerst@mt.com> X-ClientProxiedBy: ZR2P278CA0036.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:47::14) 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_|PAXPR03MB8252:EE_ X-MS-Office365-Filtering-Correlation-Id: 353897ae-4ced-40fa-f884-08dd9939f4cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: HoYaWzdaEnpZHzQcOBMPss7iK8f8yyeZyW0CUgRs6NMROq6btwArECjL36kZhPxVlOPdp5y2F5uPByawev4q8/NUGq/Hp9tASsyEaLEBFAx6q62YL5yX8OTOvGYuIfjK25LQ3rqsthE+Y/7U9u+FsV+4BaY/CJC8+KJ08cuRryeBsdxP5AQ12kngPFPuH1f3RAA+xrMO5SrNWDhKkJdp8XGqtFVLDbum7VZ1KnV1MmWd4bkevz95b+DHKZsZJombT1XKCPy9bbyXmjLZRRII5Gh5F4CmiycAndJMvh8K5sEQ8MYpfE8l6ksu0uDXfJGSMoGcWG+T/oA69kt3uotWa/o5zOLDtPu048ZpM8+tnPLL/qO2mxyMMEtud0Ocr7lxKFy7FKvG98nQ6fUnAsiTzrBnzeafPsEMVbIJQeQOkaRZ653N4boWMUKxmnpDUAwYKWwlVJegNN5bz4vbCzfUmrrqqXbmK3P6S89dwMtlCLseRT80dGWSI6Q2Qdtf8IpKsuqNm2AIjcWaM3iS/6WNtPirJu8IBdL1/JzxFlbDNa2edIMpRhfmda5BF9n+RKB/2YUOJ+j8on0y/WBa6ytUo3m9Zw02Uembsh4SnbuX7TF6/PQEYAz1pL2B8YHwJiLQD8oMaXn3YhCAxyOjSf6w0svy4wmpYjDDR+NQeWsYerj9EY7mImMIC//F0RGJeaOjajNeQJ+0DueDvByU/12eRSZNRrvCXCyGbCWdm3uPl0gB+BXDdqLtPbic4Go2brp7/icjkylJSd7zS5ohPHu3gVB5EdYB8Bnt/4XlLDVr+o9VhsfXu/6+u/AyIH60TPkBMUgTCnH9aO4fXPS/eWy3iYliB+NJnY6ZQ+vVTve+WVQeomrP2FPm1P7RYcfm4r3hKdZYPPbIdWuthyZXDjHbrk5BRNqTiGmLCOsAbDfUBl7EkDljhsLH45KnPFKiDAseaHjIJK/94SdL71jBsDB1sSTcmdggBdlL6VjUraTDAmagtPo7OIrJQvg+nFNJ8BpGZmufAxBIsBJndxYvdw8yHjG0DjRqBsD+DzUAMKBr+B1okXCH6Ya4pqxd845AqVSrYf0TWifEJ9jAETQ0I/eDhaunWO4qU/YM41ZzQ71fNM87SARTb7JnOds0O5cbzNoAtmXJAtlBSpMnRID4+9KMAByQtISxuiziT0APzfxy+4oTO5mUO5R/Rixp6mAblMHVMKRqryLyh4kqCnwRdigGBfHuiD+cBD4/X2oGpWwOD5/UlShsLHWQ2Pk2v+a2V2p9XX8fRWdHzO9QlNH9fSWltW7dSfLk5rMxhP0w9uLgDPffA25vis2S4zuYWvFBV5vmyR+PToKWHqSe+F/QXZv47KF0w3ptwANPVEkD7P2Gnwt389HfUAI+qdHDMCDUX2VtWh/Wxd95Z6SNgUGkPQXj2eFZ3v9HZHuXTOBf1ilX9gqKRREnVbcp0URYJTvbgFx0jjX8JaHfqks0dwqvjLedgw== 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)(1800799024)(376014)(7416014)(52116014)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: r1LY5sqsx30Av8DrbiWxrlGOdsyuxTCvoznfqubvlc135VByUE+vt8nzeUutuVeqGHlM2ZgZTc1LlAVfH3LMIc/Snuv1FYKyZdHNEitonUFCqcJJZV8iyaGiR0+tn2OcPQ9JCqmB9sZbOqgOtD4ka1GzWIzSJu4IdqyhXwls9tNMUZC/Xyrz8SFN64jXQoLrlL8UuyqPcVyq8SjTrEnzeS7Bn6HjMZnoUagHLWdgJYRxK6Hmm8TivsLVKW2byZWT+ShTZp9tJ6Wbb9ewVJlciB+w1OsY7ZZuCc4QNrYG1/LXBMgWOVS8LhBEOvtq4ywW9bBA+SzWQIaNOkXP8Kun1QAlKxJPTldo4dFODil5ToV03XnaZp7cGtyTrqtniyxOnw73gtSmzCifW2vK3k84aJ5f+26JosbZD2Mej1HtHnY2wSfGkKA9CC0tcRHfyabJjewyHtLugu9MEXIHHYtjJpaK1ujlBIT3fzRorBT29N69CSBoq1Y435R3XHkE+OczF82zE6LGeQn1c15BQEIp68iVGIObUhZ9/eTEWUZ86ek+WjsJLLSJSS4XpAal1VBwZf5vWud6si2t1eQuyfMyx9kBA26VevSq9m14SZCuj9leyRQk840GmwLwKztvHIWpKZnIuwqloNPRU0v6ppTvrZKWwdjxnYx9UbiK9CJJoikykc2dvKqDHnJn+B4gf1kiDhi9KRvLfy7bqto4IbcjglMkU6IasNhYe7JjBN6MsqKFGRcRSNBwDj2qiFAwAsamQ80K1Vxkll0wfzwIhGpjn7Q+Rf3aQg3Y5c8l3XVBQv2ikWHoyjwHhHzWQpLzKznqNDoVie5FRZb7KZysOcngo8ySSpvrgEM1IDzf265FYmXPD8bSk6Rcca6XDF2kM3H2sQCAH0+YjKYkJKTQQbAD6nO/46DU2TcnAx+lX9PDXjt1/Rv2o0i8bZjzaSfaGDv0XvX+O42IPjlprdrB0YkREP4LKwsYSquAa2e9b8fUYCRym7ELJOXPntsIndMUrSRNh0QOLtQ3BuGiO/Z+ngK3hLIPEtfU1Vz2u9DXIwJY3Po/LgEgHvJHeq5/aDUEUdxTjCyt/E8Hr//bMrooKaN6GksGhCJPhabdKZfEuiZ6QXa7tXqsEIND30b+sU0yB1x28L/VueYBMmDqzKBZNeWierIVmR/tdmuuE1lTiPebEJTXsdbpBySyqneeY7Qc0qEBjb+jba8XRbW8VRpycK0A49uXcuvwVMbJLfFIySTykuqYVAenQWqsdEDkDUhBdwRRJe3Z2o8J99uhL0ZseXJXhaUFSEN+iw4gdvbqV5HY0GdCIF0WdWLSXQcrAw6k8SV6UsW6SLOYhSeMPvEX56zMbxDF6GrXThBgAqVZfuh3w/whP6TfYhnpLWT07AvvIUnVA5C4YMWUuTM+vBJ1ALYTiLpQ7995+3/Zt/RbgWuXugSBbSsbYXKG8KIeYwwwLiXmcQkBEvywwi6URyUkS6JJDU7Uq14g1WCxwr4c+M5/5zj0k2QhJEdEm4VuMpH2xPJzFRBgVP2uR43VSa6Aj2oaQzhWekwkyQSrw6aCQ+0DxaAAmJwArmIjJ31rgQbFZ2np X-OriginatorOrg: mt.com X-MS-Exchange-CrossTenant-Network-Message-Id: 353897ae-4ced-40fa-f884-08dd9939f4cc 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:07:15.7627 (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: 1VOqJQ7Wtsu0S/yY9bkhWG0tRXomnQUsLK/J2YpXaTekC9YfhnLl9LRJyQfMa2DpYmWqYs8dirW14jnUL1CkOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR03MB8252 Getting / Setting the frame interval using the V4L2 subdev pad ops get_frame_interval/set_frame_interval causes a deadlock, as the subdev state is locked in the [1] but also in the driver itself. In [2] it's described that the caller is responsible to acquire and release the lock in this case. Therefore, acquiring the lock in the driver is wrong. Remove the lock acquisitions/releases from mt9m114_ifp_get_frame_interval() and mt9m114_ifp_set_frame_interval(). [1] drivers/media/v4l2-core/v4l2-subdev.c - line 1129 [2] Documentation/driver-api/media/v4l2-subdev.rst Fixes: 24d756e914fc ("media: i2c: Add driver for onsemi MT9M114 camera sensor") Cc: stable@vger.kernel.org Signed-off-by: Mathis Foerst --- drivers/media/i2c/mt9m114.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index e909c1227e51..9ff46c72dbc1 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -1652,13 +1652,9 @@ static int mt9m114_ifp_get_frame_interval(struct v4l2_subdev *sd, if (interval->which != V4L2_SUBDEV_FORMAT_ACTIVE) return -EINVAL; - mutex_lock(sensor->ifp.hdl.lock); - ival->numerator = 1; ival->denominator = sensor->ifp.frame_rate; - mutex_unlock(sensor->ifp.hdl.lock); - return 0; } @@ -1677,8 +1673,6 @@ static int mt9m114_ifp_set_frame_interval(struct v4l2_subdev *sd, if (interval->which != V4L2_SUBDEV_FORMAT_ACTIVE) return -EINVAL; - mutex_lock(sensor->ifp.hdl.lock); - if (ival->numerator != 0 && ival->denominator != 0) sensor->ifp.frame_rate = min_t(unsigned int, ival->denominator / ival->numerator, @@ -1692,8 +1686,6 @@ static int mt9m114_ifp_set_frame_interval(struct v4l2_subdev *sd, if (sensor->streaming) ret = mt9m114_set_frame_rate(sensor); - mutex_unlock(sensor->ifp.hdl.lock); - return ret; }