From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7285A109E528 for ; Wed, 25 Mar 2026 23:04:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=NiYL3aVB4ZIKEaKk26vFLZVsbHDB3saRnU0wHe9RgBg=; b=F8xYbI0TMT4pYPAaoWpryjB5zU Xu/gyCU75e3s+VwWSFqiEhNA+MqdczR7gPIfbV9mu2h/XAy4A86fWiYBwwGJzTULNgKo78pn4r/bR h04B1y65rAkNEO4yeGXehzARDb5XnK8HAu6NiOVSGttW06u6DFzherCyFW/v4i/2rseWxK8RQoFc4 7w6WMC5nLIxCbjaL/KLZsv5JJSXAlasUJJDjRQ4NZg0zMVJ6qleol5kV4g0ZAM8ev4nztY7w+gxAq z8J7EdluzIO8xdnbHXmM1vORa1Z6SDT6Vz47s20pH8X8g21JWVLYIb6VHCfngH9DlsQIaBLAprzce e3KC4xog==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w5XHS-00000004OOD-3LYR; Wed, 25 Mar 2026 23:04:54 +0000 Received: from mail-northeuropeazon11012007.outbound.protection.outlook.com ([52.101.66.7] helo=DUZPR83CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w5XHI-00000004OIT-0M17 for linux-arm-kernel@lists.infradead.org; Wed, 25 Mar 2026 23:04:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HXqCbDueKQaksoFq9RRV+TbVE0Q8S2eB40YUi+rOzOmA94QEjnURuybMHu3uep+ldtxPu1XDIOp33qVLRwKmyRP4jOIJdKaPEHHcgHomcQ2Zu2+e8MZSq8QgC+8XTlVo1QTrbyl2TmdRQaeDIDRzYnBB87PapyKUHo9xxXLfUmz+kSefpG3OYc3ldZjJp637uLmGRGaysXgJeLUPrSiYr9HoekHbVE7diPKqK/bsGstJT7+X8dmtSqEjgCN/YZoHFSHs4kdeBo93v7F26muMlAGhY1Em1fEMqsihjbGbCEPMN92oz1obZDXX5TyyxzEWncXiEuj3L/YuYviKaFno/w== 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=NiYL3aVB4ZIKEaKk26vFLZVsbHDB3saRnU0wHe9RgBg=; b=IqWiWWcv9K1lYebCrnIgyd/slZZ5VFmPcVwQRnkYp7Njb7UOHoCYUlHeKAfRVBytudL//PwgxMGbMC8ysDmUDWsuhWf0N+JNwOPwHTGWt6NdZH3dsl8L8B7mCtd0F/fclZePIhbqz2wNqLDudLzxP8CobIY8rx6S6mKDWHQhZZ996GMJXcei/vUqFXgwOnB9gX62+ZiSrrfB+qgqOCwMtLyamKw5mhqNhF24N1oRg9jTkHzIlHkhkTPUAD4opCyMG9O/0sIqHgi9CgWyHwUehLi/7PrjACpbMxJHBfy1Ycpxa5/o3LMQ9MWcT07A6GA/ynF9OFcmic5ZIce5tjEajA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NiYL3aVB4ZIKEaKk26vFLZVsbHDB3saRnU0wHe9RgBg=; b=ic+CNpluEf6Gb3Qrw0/uCfig2P7ROnhvQZGMO6toFK4NBny605K3kGSZMKmqcYmChMpvKVFHAyERw3OfCtpAC9MXaXt58V9511RhT01SrzeXWSo5SPUsUG1+b1a+bBw7MwdvUYhJ/q3nKd+sXajHVZaqgtyq7OQdlRd/OpXSWe0dvH55nX3X7oppAKBYtvg1/xo31DA3tR1S2U1YOwWEBvf2YMrH70uZT/cfZw+wdh5WGTSYpDKJ56VKDMg2T5QWumvr39JejeravUwKq9IfylzWmupvJ6RUeD6wvkzYUknxRKwA7IWL8UOF2EpGwlDHpLBu2UFeHKuVS9LSI6LE1g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DU0PR04MB9372.eurprd04.prod.outlook.com (2603:10a6:10:35b::7) by GV2PR04MB12140.eurprd04.prod.outlook.com (2603:10a6:150:30c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.24; Wed, 25 Mar 2026 23:04:39 +0000 Received: from DU0PR04MB9372.eurprd04.prod.outlook.com ([fe80::4f6:1e57:c3b9:62b4]) by DU0PR04MB9372.eurprd04.prod.outlook.com ([fe80::4f6:1e57:c3b9:62b4%4]) with mapi id 15.20.9745.019; Wed, 25 Mar 2026 23:04:39 +0000 From: Frank Li Date: Wed, 25 Mar 2026 19:04:12 -0400 Subject: [PATCH v4 3/7] pinctrl: extract pinctrl_generic_to_map() from pinctrl_generic_pins_function_dt_node_to_map() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260325-pinctrl-mux-v4-3-043c2c82e623@nxp.com> References: <20260325-pinctrl-mux-v4-0-043c2c82e623@nxp.com> In-Reply-To: <20260325-pinctrl-mux-v4-0-043c2c82e623@nxp.com> To: Peter Rosin , Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Rafa=C5=82_Mi=C5=82ecki?= , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Haibo Chen , Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774479864; l=6125; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Ptt/TpQC+N2e1tHU334VkibMJXEsxKwNk6LsSqK9JMs=; b=XHe+h80OX6rDZa9Z2vCe/VNvbiYStmzAhkuZhIjwmdLQhHlSx2JsEXvSSuo3yyEkvQMJxPBnO q7W1mHpI3i1CmrXGb7tKEkZvKlaJXNK8N6pq3XD5nf9AnnY1b0AGXbR X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR03CA0161.namprd03.prod.outlook.com (2603:10b6:a03:338::16) To DU0PR04MB9372.eurprd04.prod.outlook.com (2603:10a6:10:35b::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9372:EE_|GV2PR04MB12140:EE_ X-MS-Office365-Filtering-Correlation-Id: 430a4b53-3fcd-4197-fd5f-08de8ac2e480 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|19092799006|366016|52116014|7416014|1800799024|18002099003|56012099003|22082099003|38350700014; X-Microsoft-Antispam-Message-Info: OR5jeNcqLYDBXWMMrwicNvaDkAdM9mB3k+gXDlBx6MIKUeRO9j2xO/yxv6JHvRro2fO/Nkb8m8hr/h7pmv+xD/zU3uKRud5O6RWQym1TILlng7x5PRyIPeg5lQCebwcUVu8Um3jfQc5e46jL6fzi9MbJPMC+SPn4Dwy8GqTmjL81uTM5AAHjea0nCqlBsjS9x7zZSwkKRgGb1+dL1aqRRHMMklfXlTjTMoyAcx6EdUgTgaFxkFqdR7TFyKHgXXqLlHJcZURkYGHhxiLi36OdxusR5tAeR1SfedOEJ+7QSI9rVoBfSJ6UtDv5bOgdcSFOiVhVoRXYZlQNVXSqevp1NhGinn9U+oF0QconMSemrY0DaYZOQkA/+/G2PbL77OpsZzlw5MqXApCUlsH/m/d5Lz2gxttn2lDt6R7pcqPPtFQUqVwm457xqUkc2N0drAA+xelS3AMegYFAboPjL6DDTdFSJGVklT9KmgVZeiL13j92kbyT0gafQp/Obeet6uH9V2RjQ0f9AGRv0UMx4yVebUyjFK/0yPIvf3slBqFrsVhGrKSkdfV3XFSzGE0ODGErwmkS5fgciEJfhLfjN/b/vGHcdYExWAx/2sHSwADzdBQMLABK6dqTuMlDacGqBfzfyQSjLuy31nBq3zEvFuIXphcHOQmW9ANt9wa0iRFNrcqzUWqzWm/AQhL0AkEFc7xygLv1OMqN1tDfEWqXyigd7HtCY1vXfztWkLQezPmluHfm7MoHXbVdvZFTTPAVpFq4En1/I8Za9QtwofEk2urjLtwz7dnZVDyySm5WjoUwMVM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9372.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(19092799006)(366016)(52116014)(7416014)(1800799024)(18002099003)(56012099003)(22082099003)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R0dnWkhVVUVlQUpOYW42QzAxZmlqdlF4RTRHclU3dUlGdDZDYVdEbTRlZ3Rh?= =?utf-8?B?UmdrY0I2N1o2VXc3Kys4OGVIc1Y1czg3RjR6RjEvaFEvSjVQQ3prK2dzQlNW?= =?utf-8?B?b3RVWDM5RkgwdXgraU5GTVJaNC9XRVZhWnlaY1ZPYTVXTXNnc08vTlBYVmQ1?= =?utf-8?B?RGpVTmJidkwvMUhBcjM3UXdLUEF4RXJJS0RxTVZudVJNYm5JampRMFhOc0xz?= =?utf-8?B?V2dJWmNkVTZaTGlBS2txa0ZObExWK05ZczdDclJFOURZZDNlMFJ4NXJ4YXNT?= =?utf-8?B?aEZKRkNVSHFDdkYwaFBtaXFtOXVTbUtGQkUxNVlwUzBjdkZiZlkvcW9lVlpK?= =?utf-8?B?cDN2OHJFT1ltZ2FISDFoYVo1U3cwVDB1cDE0d3JHaklaVG81bzNTUzFzSERW?= =?utf-8?B?aWZmSTRQMkUwL1cxbkhkWC9kWm1NaXB0QU5lRkl3dlk0TDV0OExSTVNxei9i?= =?utf-8?B?QTU0VVE5VmRTS1lOM0EzTS8xSGU5K29QTnIwaVYvTVhkUHFzQkxPNWg0UVVW?= =?utf-8?B?bERKemtqNW1xQnlzVHR4VTdSTjNlS2tHMjEyVks0a0lza1UyVWU2OG5Vd1Nk?= =?utf-8?B?WkQwbHljWDNlSlVZdmJNZUhSY2J0KzlpZlhyVHErSlM0WXBWdjhkN3BVMWZv?= =?utf-8?B?N2ZYQ0hvakpEclVvajVHM09mVjlrS0Myc2I2TXA4ZHpwMjlUWHREV0FMSWdx?= =?utf-8?B?OFk2TWRkd1U1YlpEM3VxNlZDWjQyV0lZRUJUZ3RRNjlFcmp1K2w1cWpwR21v?= =?utf-8?B?ck1lWm1oK2xEWVp0a0JtZ2FHZitVV1NEM2lTN3JoS0x6VDZoUytaUDJlcFFk?= =?utf-8?B?S2xyN29zdUlaTU8zTDNvU3UxQXZVRUdoTmhjNTJRMUZRZnpVTUtkbWRsQjJR?= =?utf-8?B?YU5aS0cweFhiZndVR0d5QkNzcjA3V200U0lhWjg1aUNYU0pzREhXUE1hcUxG?= =?utf-8?B?b1M2Yk9zOFFvaTd0bm5kd0owdStPT05aL2xBZk5ldmJIR3hrZWdRUWZtSk9Y?= =?utf-8?B?aElud3FJaFNMb0N0citTYzZUNFRSTEovWmFERVVMUXZyQ24xNGNGNVgvZE0w?= =?utf-8?B?ank4dHhNSlIvRHhXb3FHcjZqanhrRnpONVZlOWtUWjNsbUU0L2F0aDhCeFNE?= =?utf-8?B?YXlISzAvSEV4Q1dlL0FNTmFDdzQrRGl0R2hsWHB4dVNWMkhnQ1NGaFhqbHpa?= =?utf-8?B?UVlObFA3QVd0WEFJU3NYL1dDek1MZEV3TnovbjN1MnZjK05vaEN2YmFSKzBE?= =?utf-8?B?Rmtac0FtZytzZGk3b1p0dHd4cFZnL0FLd1FOdTNVVHRHSTZmNEprZktodzhk?= =?utf-8?B?WDBLQjkySVUxbi9XcUFYdFpIV2pRTG16QUZvNlB4b3FqNWpUYWdRRWU0bEpP?= =?utf-8?B?Q1RKVmtmQmpya3ljSlJBYm5BL0kxZDBiZUpuWjF1ZncvVXRUSnVwWmlLcEIv?= =?utf-8?B?Y2ZPc2Mrd05peVlBSU5FWkd2M0hDT3VIazY2c3Z4dmJOSnFMeThPSGhZZ0Vj?= =?utf-8?B?RzFsRWRSN2NlSDRWQjRIV05nYVN3N3pQcWlxK3BMWDJhL0pQdTVzdzFqc0Yx?= =?utf-8?B?NCtYWktIeG8wcmxrd08zcE9SVlY5czdxUGZiWHhZRmRpVVQ1RVA3WDFxVXA2?= =?utf-8?B?KzRFYUx1MzNuVXdrMzJWem1nYXFzZEJKZ1JSRkhDUldhajVWb1lheDVKb0M5?= =?utf-8?B?a1pQczZkaUtoZzNsZUxoc0Q5TFdpZkdheDFZUklFUEd1VkxwTWdSb2k2eVdL?= =?utf-8?B?RlpuMDlkTW8vVzBzWDJCNnFlaUV1Zm9tRENXc3NqZysxNmZEZ1NTaU9RZHRY?= =?utf-8?B?RXo1TVliOFZlM1NWT0VJOStqbnM0WEdGTlpVWU9BZGM4cThQRndWTzZYK0Rv?= =?utf-8?B?ZC9oWjhkR1EvOTgwcTUxajBPWGE3SmVSa3UzTTVyc1UwUG51ZVlSNjlqMHRF?= =?utf-8?B?RG5kaksvaC8yK1ZUVmlGV3ZJWlRhK3pxUWVndVFuS1lvRFZ6TTNad01FRU5N?= =?utf-8?B?YnB0MmEyU0dicUdTSTh2VXpvYjJmTGZtZGFZU3ZWbmllMERzekRPeXlVSVZ4?= =?utf-8?B?YXA3Nzd3V2J3RDI2eTF5ZWI4S2FlQXpqZFU4T2Q2NFpSN3YzdVNUSjdOd2FM?= =?utf-8?B?bXlDdmlVM1ZwS1dTSDBRaHBvU2hyejExTlJDQ3V3TEZTZDdzVXEyVTJOTUxX?= =?utf-8?B?K0ZWdnZIOGJHNTlOYnNZdDNKTjJIY1Q5QmxYZy9lcTVNNlJkWFEyZTNEdlI0?= =?utf-8?B?WkpRSkJldE5ldVdkRi81S3pITWRXZmU0NEpoR3VrU3F2elBwMlBlY2dCVFZZ?= =?utf-8?Q?BVYs/+vaWsIUAqlk3W?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 430a4b53-3fcd-4197-fd5f-08de8ac2e480 X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9372.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 23:04:39.6704 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Gm8Vvb2gAg+pimg3suJxMgGcKqWBvC7pOowiCbK4W1zE5/Q7kFaQIkUW5wXL92DEDE5pQ4RzGTAY5gDcMTil1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12140 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260325_160444_282208_090863E3 X-CRM114-Status: GOOD ( 17.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Refactor pinctrl_generic_pins_function_dt_subnode_to_map() by separating DT parsing logic from map creation. Introduce a new helper pinctrl_generic_to_map() to handle mapping to kernel data structures, while keeping DT property parsing in the subnode function. Improve code structure and enables easier reuse for platforms using different DT properties (e.g. pinmux) without modifying the dt_node_to_map-style callback API. Avoid unnecessary coupling to pinctrl_generic_pins_function_dt_node_to_map(), which provides functionality not needed when the phandle target is unambiguous. Maximize code reuse and provide a cleaner extension point for future pinctrl drivers. Signed-off-by: Frank Li --- change in v4 - new patch --- drivers/pinctrl/pinconf.h | 18 ++++++++ drivers/pinctrl/pinctrl-generic.c | 91 ++++++++++++++++++++++++--------------- 2 files changed, 74 insertions(+), 35 deletions(-) diff --git a/drivers/pinctrl/pinconf.h b/drivers/pinctrl/pinconf.h index 2880adef476e68950ffdd540ea42cdee6a16ec27..ffdabddb9660324ed8886a2e8dcacff7e1c6c529 100644 --- a/drivers/pinctrl/pinconf.h +++ b/drivers/pinctrl/pinconf.h @@ -166,6 +166,13 @@ int pinctrl_generic_pins_function_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node *np, struct pinctrl_map **maps, unsigned int *num_maps); + +int +pinctrl_generic_to_map(struct pinctrl_dev *pctldev, struct device_node *parent, + struct device_node *np, struct pinctrl_map **maps, + unsigned int *num_maps, unsigned int *num_reserved_maps, + const char **group_name, unsigned int ngroups, + const char **functions, unsigned int *pins); #else static inline int pinctrl_generic_pins_function_dt_node_to_map(struct pinctrl_dev *pctldev, @@ -175,4 +182,15 @@ pinctrl_generic_pins_function_dt_node_to_map(struct pinctrl_dev *pctldev, { return -ENOTSUPP; } + +static inline int +pinctrl_generic_to_map(struct pinctrl_dev *pctldev, struct device_node *parent, + struct device_node *np, struct pinctrl_map **maps, + unsigned int *num_maps, unsigned int *num_reserved_maps, + const char **group_name, unsigned int ngroups, + const char **functions, unsigned int *pins, + void *function_data) +{ + return -ENOTSUPP; +} #endif diff --git a/drivers/pinctrl/pinctrl-generic.c b/drivers/pinctrl/pinctrl-generic.c index efb39c6a670331775855efdc8566102b5c6202ef..20a216ae63e91b69985ea4cfcd0b57103c6ca950 100644 --- a/drivers/pinctrl/pinctrl-generic.c +++ b/drivers/pinctrl/pinctrl-generic.c @@ -17,29 +17,18 @@ #include "pinctrl-utils.h" #include "pinmux.h" -static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *pctldev, - struct device_node *parent, - struct device_node *np, - struct pinctrl_map **maps, - unsigned int *num_maps, - unsigned int *num_reserved_maps, - const char **group_names, - unsigned int ngroups) +int +pinctrl_generic_to_map(struct pinctrl_dev *pctldev, struct device_node *parent, + struct device_node *np, struct pinctrl_map **maps, + unsigned int *num_maps, unsigned int *num_reserved_maps, + const char **group_names, unsigned int ngroups, + const char **functions, unsigned int *pins) { struct device *dev = pctldev->dev; - const char **functions; + int npins, ret, reserve = 1; + unsigned int num_configs; const char *group_name; unsigned long *configs; - unsigned int num_configs, pin, *pins; - int npins, ret, reserve = 1; - - npins = of_property_count_u32_elems(np, "pins"); - - if (npins < 1) { - dev_err(dev, "invalid pinctrl group %pOFn.%pOFn %d\n", - parent, np, npins); - return npins; - } group_name = devm_kasprintf(dev, GFP_KERNEL, "%pOFn.%pOFn", parent, np); if (!group_name) @@ -51,22 +40,6 @@ static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *p if (!pins) return -ENOMEM; - functions = devm_kcalloc(dev, npins, sizeof(*functions), GFP_KERNEL); - if (!functions) - return -ENOMEM; - - for (int i = 0; i < npins; i++) { - ret = of_property_read_u32_index(np, "pins", i, &pin); - if (ret) - return ret; - - pins[i] = pin; - - ret = of_property_read_string(np, "function", &functions[i]); - if (ret) - return ret; - } - ret = pinctrl_utils_reserve_map(pctldev, maps, num_reserved_maps, num_maps, reserve); if (ret) return ret; @@ -103,6 +76,54 @@ static int pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *p return 0; }; +static int +pinctrl_generic_pins_function_dt_subnode_to_map(struct pinctrl_dev *pctldev, + struct device_node *parent, + struct device_node *np, + struct pinctrl_map **maps, + unsigned int *num_maps, + unsigned int *num_reserved_maps, + const char **group_names, + unsigned int ngroups) +{ + struct device *dev = pctldev->dev; + unsigned int pin, *pins; + const char **functions; + int npins, ret; + + npins = of_property_count_u32_elems(np, "pins"); + + if (npins < 1) { + dev_err(dev, "invalid pinctrl group %pOFn.%pOFn %d\n", + parent, np, npins); + return npins; + } + + pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL); + if (!pins) + return -ENOMEM; + + functions = devm_kcalloc(dev, npins, sizeof(*functions), GFP_KERNEL); + if (!functions) + return -ENOMEM; + + for (int i = 0; i < npins; i++) { + ret = of_property_read_u32_index(np, "pins", i, &pin); + if (ret) + return ret; + + pins[i] = pin; + + ret = of_property_read_string(np, "function", &functions[i]); + if (ret) + return ret; + } + + return pinctrl_generic_to_map(pctldev, parent, np, maps, num_maps, + num_reserved_maps, group_names, ngroups, + functions, pins); +} + /* * For platforms that do not define groups or functions in the driver, but * instead use the devicetree to describe them. This function will, unlike -- 2.43.0