From nobody Sat Jun 13 15:20:51 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013037.outbound.protection.outlook.com [40.107.162.37]) (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 6F4DC23D283; Thu, 7 May 2026 01:38:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778117903; cv=fail; b=JAzrJbCGwIx4oAlJNbw0nxo7dOfnSBF6s0g3RGHM0+ap1FOzmTlxdv9PYgSDvonnGHe0FYhIjfiu0hUYAGjz/tYqscegNNKAGz6VUmxS2jGxoqpl6nlZHcH7kVpWmftR7/ZTaPPEC3/rEB/l+HFerAv3gN7+OF+5sEmm6G2dsJc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778117903; c=relaxed/simple; bh=NfDW//XZT5Seb2kfExXkkHGkPDQAW8FYdZnL9tmea2M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=c/m9yg/DcQPN9GDYboQECGoUePF82EuxtnBc0s517EC2hyjWvggaeGkUosORqj7oPlL5JLemzW4LjDv8l6pB8SXe3DWZ8W2AorVGCIW1Wdtwe/jZK65VrHr0J1e6DlhTkMFLTbJPGCmNh4WcRNMyVcZ1uOvLxY3RrsNAWyfxeEc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Lr2l/dVm; arc=fail smtp.client-ip=40.107.162.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Lr2l/dVm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Isl0p+tfDprF+leICZScicOe/sxKfeqAdFMOlmn+Rm8zZupJQqjk8aVC0WLjkPt13TsueeYAaGx4RIuY8iLEJok997RTbD6MqtvDnfvn2nlJr6MvjS3Q8WXuIEf7oPANrQcHgVEDf2w9PyRMUIGzrESDCI+5ojuymWDxMhYzyXLjqdQbyb8Hr32KkaMJiOeZX5fPzrgdSewMSrfcgSFNDBaPqWIqOFBuRGf/Fd5ybfSocfvDbGN0CtdbzoDVBvaTdzxLV21hkTzvKX5nPG7Dz6vR2vkwP9V1t45GfxlIWhE7EggTk7iFk6FLuFESq5NBK9UTjXkqss7TnKFYteNPFw== 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=glTG0ThCLDduxOOOOfFYsw56YxCEixkmSVcCypHOEww=; b=UVd1zs5bLtYBz9lxvlOe0qwVefMeInf76XnpvH3MOa7QPe4IUkHVsuTB9oV0cCMxBEA7OKgXzHIHw4dTrsSrTCgxeDz5Q+2yp1w/nwqtd2dP4lwnpjJ0so7MeJwqKlMkl9tiH2HOBqW3WNkQyYQR8MXgVTBqm7MsuEGvBeuKNIuGCZNduaTCUIOTlwlxB+z+fcQyHAqO3ulk1Arn1Eo3aNtj3TcAN8tT7y5Sj6R+A4JzsGKW93GrxZmkIhgWgNHzgL02pv+b9Ps8kK4GPDkMHPB4e4b80D7bgPuT1NujeRJM7N/JJJvNrB4+tjy2Rrb2TvfXlFIMqbHQWcOembfSpA== 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=glTG0ThCLDduxOOOOfFYsw56YxCEixkmSVcCypHOEww=; b=Lr2l/dVm2us9wtxPHfVrMQavyfiEWrtX2aoYlS95z6s6jsnnTfB167/bBHR7lKYEALTdyHHFZc3XhIvJUzljlM7Yv8u4XhG4ZWygYp7ArZf4GjqPDuivlzWwOW4e+E8ClU4gqujP+PFoHasdgTCzrMtooRADI9NqKJ2Iog45xi87sQ7j13GCzZjZGykcCXm8h2J7kGDYY119fp3kLzifY35PwYUSx5yHepl/Ur7V9pHH1QjzWHBfzN+5h7la1a/ufiL3i+8Cs2FDLEyx/z04ktBMiPvIrkI3tYfvZMqQYtmIb4XQ5F7v+JaA30KDFErNDFMwYOk0R53RsLgxhc9oUw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8353.eurprd04.prod.outlook.com (2603:10a6:20b:3ef::22) by PA2PR04MB10514.eurprd04.prod.outlook.com (2603:10a6:102:41e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.15; Thu, 7 May 2026 01:38:18 +0000 Received: from AM9PR04MB8353.eurprd04.prod.outlook.com ([fe80::46ae:f774:f04c:a1bc]) by AM9PR04MB8353.eurprd04.prod.outlook.com ([fe80::46ae:f774:f04c:a1bc%5]) with mapi id 15.20.9870.023; Thu, 7 May 2026 01:38:18 +0000 From: Chancel Liu To: lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, shengjiu.wang@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, nicoleotsuka@gmail.com, Frank.Li@nxp.com, s.hauer@pengutronix.de Cc: kernel@pengutronix.de, shumingf@realtek.com, pierre-louis.bossart@linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 1/3] ASoC: dapm: Fix widget lookup with prefixed names across DAPM contexts Date: Thu, 7 May 2026 10:36:52 +0900 Message-ID: <20260507013654.2945915-2-chancel.liu@nxp.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260507013654.2945915-1-chancel.liu@nxp.com> References: <20260507013654.2945915-1-chancel.liu@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SEWP216CA0087.KORP216.PROD.OUTLOOK.COM (2603:1096:101:2bf::14) To AM9PR04MB8353.eurprd04.prod.outlook.com (2603:10a6:20b:3ef::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8353:EE_|PA2PR04MB10514:EE_ X-MS-Office365-Filtering-Correlation-Id: 5cb19c47-557d-4b69-cc2c-08deabd950ce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|19092799006|52116014|366016|921020|38350700014|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: rDLdk+qGjTsYHcA7vvlpKvWWV1JolBKHX4GrreOWHY6/aNm/+3Gpj+FZLw+GnBP1VeF4Z6i5VLxbFJe2TAzXHgr5LRJxMnFgaRBr4Of/IA8j3P4DE5+zomsHlRQA41uk9G2cG+K3vKpOtSwW0HGplxT2eADGtYLG3FAnmUJrXwHDnkNrnc0fUbie//fGRctO1EbZCvQGLazlSGBUQusUBHVtdvCBerYEsyxekGvwMabj90aZROiLRK1VpwOGQEslfkOMSgE9fec+j5S9A59bTcRDEjwYGEO8BIyghtna+BBPUGWIpeIPkRtq81BrldvaH9t0sfgZmlpWMZNUBoAERp6VheW+avZ89f9z19FBftC522trZ9GevlRMUqbhM+ntSTryomMqrN/WmPmZEoEtt5ThdNqUqfjAbbnw8hbPY6GAdFKWAVJeVjg01irj8zIzPpV7tOZp8Se0N19lL2bmyECCGEwhKclW+I75eir8bBnSzDY+5gjb5DlmnnvMuGVcPZeXD8cbR+zut0dPGCyLBG6l/8ZIJI4tHsxXvvoJim+Q49czSga2ILvLm3MzVDuodh9kM7kjk2Sd4aTZfOh53djZzBmPKLzy2LROfLfa5fEz5/Z/+HXHFTry+tRKwWMtG31DMpyybq0YRtwSgdfE+HnOGbS0gDzyTajxzWafCb0l/3V9resJHZcrNpZO6on67h+e8fbePKWdSUWeioFdNjZMK7pJIZZhsuxTfTJKpq8mzzZvlh5Vfu2aG/nowLQmHe1F8bNy/PvaDykMj+93gw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8353.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(19092799006)(52116014)(366016)(921020)(38350700014)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kSQymjcs9sF63TwyvlQst3xjg30BEuVYwU5H1d1MYThB7+3mesLs0Qq6Bxht?= =?us-ascii?Q?fpQAMo3RClv7Q/f8RxRbY+z6SxrU5AuF3V7nMlkSY0lDah8dhRRzJaTMHPh5?= =?us-ascii?Q?3PZKQbHMV26RceX4LrFhZEpDtMHfSTS+cXXi/vssJt7Y8ODklmIS8QrrQSZr?= =?us-ascii?Q?ZFjpTiT8Ym9mEBFTrUcu7Y0OXyN23wjAR7M7rCUWeji6JUcSF9doSCUnG4qN?= =?us-ascii?Q?KMumTu9yQ/TS+4+shbomfYZzFJQZ2eZS72uuPd7/u2KksQSX/dZqGUyipx3E?= =?us-ascii?Q?BRrCs8NRtcu/lBA2/4y9vvR/wq3++Ctbe1Jyx8KZrmfnypy58XMeXcc0AR8F?= =?us-ascii?Q?cilY4ePqpE5DK1kCGZPjMwoxbuMsSZiVYKZh1znOfvDj/5L/70lpRKjzYYAo?= =?us-ascii?Q?DPQ8pewSpHue4ynz5PmPm0UBgLGNOeadWdM8q6GJWrYE1xpb36OcB65Uwtml?= =?us-ascii?Q?jJ7q1MmqCWKO0h4Wr39c3c6ZQ6L4WhPI2fjkFQ/ZtqDVlufKP3DAP0AXJiuz?= =?us-ascii?Q?zjFQ+CSqOdsN/L61wazn4dN2N7ZrO+UWqvyYT9Gzm2gJxlotfA6B+UF11cy1?= =?us-ascii?Q?qAwuQeoIRxYlkLQ+PPiehteUHgouuwXtywCJvNvtD+q56BFu/bNb4Lu+CVjp?= =?us-ascii?Q?Ik9ojeJ4qzC7n64T+WNMbt4lcyEDz2bUYIbR/eO/Teo5LBfh5XIt3OujH6go?= =?us-ascii?Q?jLEMBL4VHmx8FYlzPfAleSZYWA5J1t3UFDP9hA6kgrvA/hChwtVsPB73ajxv?= =?us-ascii?Q?A93uTuUIb8Hot9fY4BkX0/wjqlQmct+AJTFbAuYlsLM7FFMEWZLVTv6dnsmR?= =?us-ascii?Q?mSwU1uEzQczMosBAMz7paNaSPiAxTTH/zM51YL2p3u6ejpCMAirABxSv8K7B?= =?us-ascii?Q?8JoM4F0jQkuulh9NV7dVZxh4Wk1x25K+oxPGmOlnYOUhe8FyjfQszcZSLyIW?= =?us-ascii?Q?o+6wrh7j7cKG/Vcj6sCuA1vN2ad/lIDaAIsY48kBCD1Rb8dadVXV7mP67hoI?= =?us-ascii?Q?jNTdqPtasa44sGtkcGaq2iFNXBovPIJLRuyx2u9orIVGx8ipHemuwanLeorW?= =?us-ascii?Q?TYtuRLoPahWKE/uGPjnR2w5T+LjV2HhdrFdmnC6kyQaLEA+JL8NE0FrpKt36?= =?us-ascii?Q?1rS611q0ZolAxPF/2pq+O8+teTZ1wkVfxcJ1bAMuKk6TLSnPGTlzXj0fH7lu?= =?us-ascii?Q?OVM0cJqa7EV+zBnD//wkt1diUZYBBx7jqfw4RZ4Vq0GgKjAecJW6yMlyUIWk?= =?us-ascii?Q?sBSoiuZPYzIeUniquGLmQn2JYsJFT4oUuJnQfEp6DPDUxLyehVSz3KdNmn0k?= =?us-ascii?Q?WcU3J/g5eE8Y7PXPpafd5aPPiqfD0ZieW4KhctKIkaSZeqSIa87yw8HfJs98?= =?us-ascii?Q?gh2TLDponIasMO24A/0pAvz+wABZO2JW1hON0w/lVAd63ey0Kk0f78kbO4Ul?= =?us-ascii?Q?mBG1kXbCUz9qr9V2N+biMZ4iED8LzbsEuYc2kQKUmvBVPqj9iESvS/9XEV5G?= =?us-ascii?Q?8xEAxZ2kGYAmwlg1/978FIGTo9SY+vcN0G2KAdwBDqqhx5OcUdQ4WQ+OQrhP?= =?us-ascii?Q?rNmSz5pGorRBbLS6N+FXl7m7B7+sLkJfm5drjIUxFT5skwkel6udk2GEZEA9?= =?us-ascii?Q?0vCk9tIWEj2JRsA8d0EJjoC8lVZBNysZD4CZ74US/3tBf00eETDL6XF7ps8Y?= =?us-ascii?Q?c4ChrjHVj/4hX7B3vpQ3MGOH4NhNaTqTS4KdbeKr3Kn1jJE4y4I/sflxQzIH?= =?us-ascii?Q?nplBH1HDxw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5cb19c47-557d-4b69-cc2c-08deabd950ce X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8353.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2026 01:38:18.6224 (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: wiWnORXBPnbtofDf3ti33I55MvlZzvImLZX260PKqemJJEn1pPL+Jri6tPfz/G5KMeSJfL8jiqxoeMYAOU/iPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR04MB10514 Content-Type: text/plain; charset="utf-8" Currently dapm_find_widget() manually constructs a prefixed widget name based on the provided DAPM context and compares it using strcmp(). This happens to work in most cases because callers usually know which DAPM context the target widget belongs to and pass in the matching DAPM context. However, this assumption breaks when search_other_contexts is enabled. In such cases, callers may intentionally pass a different DAPM context, while searching for a widget that actually belongs to another DAPM context. For example, when searching for a "DAC" widget, the widget belongs to the codec DAPM and be registered with a codec prefix, while the caller passes card->dapm and intends to search across all DAPM contexts. The current implementation incorrectly applies the caller card DAPM causing the lookup to fail even though the widget exists on the card. Improve the matching strategy to support both use cases: 1. When the caller provides a fully qualified name with prefix, perform exact string matching. This preserves the ability to use prefixes for disambiguation. 2. When the caller provides a bare widget name without prefix, try exact matching first, then fall back to prefix-stripped comparison using snd_soc_dapm_widget_name_cmp(). To determine whether the pin name includes a prefix, a new helper function snd_soc_dapm_pin_has_prefix() is introduced. It checks if the pin name starts with any known component prefix on the card. This fixes widget lookup failures when searching across different DAPM contexts while maintaining backward compatibility for explicitly prefixed lookups. Fixes: ae4fc532244b ("ASoC: dapm: use component prefix when checking widget= names") Signed-off-by: Chancel Liu Assisted-by: Cody:Claude-4.5-Sonnet --- include/sound/soc-dapm.h | 1 + sound/soc/soc-dapm.c | 49 ++++++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index 4f8fb7622a13..c1e4f467efda 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h @@ -685,6 +685,7 @@ int snd_soc_dapm_sync_unlocked(struct snd_soc_dapm_cont= ext *dapm); int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm, const= char *pin); int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *da= pm, const char *pin); int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, const c= har *pin); +bool snd_soc_dapm_pin_has_prefix(struct snd_soc_card *card, const char *pi= n); void snd_soc_dapm_mark_endpoints_dirty(struct snd_soc_card *card); =20 /* dapm path query */ diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index d6192204e613..a26771c8e6ee 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2906,20 +2906,18 @@ static struct snd_soc_dapm_widget *dapm_find_widget( { struct snd_soc_dapm_widget *w; struct snd_soc_dapm_widget *fallback =3D NULL; - char prefixed_pin[80]; - const char *pin_name; - const char *prefix =3D dapm_prefix(dapm); - - if (prefix) { - snprintf(prefixed_pin, sizeof(prefixed_pin), "%s %s", - prefix, pin); - pin_name =3D prefixed_pin; - } else { - pin_name =3D pin; - } + bool pin_has_prefix =3D snd_soc_dapm_pin_has_prefix(dapm->card, pin); + bool match; =20 for_each_card_widgets(dapm->card, w) { - if (!strcmp(w->name, pin_name)) { + match =3D false; + + if (!strcmp(pin, w->name)) + match =3D true; + else if (!pin_has_prefix && !snd_soc_dapm_widget_name_cmp(w, pin)) + match =3D true; + + if (match) { if (w->dapm =3D=3D dapm) return w; else @@ -4872,6 +4870,33 @@ int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_= context *dapm, } EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend); =20 +/** + * snd_soc_dapm_pin_has_prefix - check if given pin has a known prefix + * @card: card to be checked + * @pin: pin name + * + * Returns true if given pin has a known prefix + */ +bool snd_soc_dapm_pin_has_prefix(struct snd_soc_card *card, const char *pi= n) +{ + struct snd_soc_component *component; + const char *prefix; + size_t prefix_len; + + for_each_card_components(card, component) { + prefix =3D component->name_prefix; + if (!prefix) + continue; + + prefix_len =3D strlen(prefix); + if (!strncmp(pin, prefix, prefix_len) && pin[prefix_len] =3D=3D ' ') + return true; + } + + return false; +} +EXPORT_SYMBOL_GPL(snd_soc_dapm_pin_has_prefix); + /** * snd_soc_dapm_free - free dapm resources * @dapm: DAPM context --=20 2.50.1 From nobody Sat Jun 13 15:20:51 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013062.outbound.protection.outlook.com [40.107.162.62]) (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 D61D0271464; Thu, 7 May 2026 01:38:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778117908; cv=fail; b=FnETUy/gqRDIXyk/Bi3hNdjtiKKHMDer3bxjKrL3CFKCdVxOGKKAbWU/pAsm6qLmrUoTfrKUdRVRXgyMw1UgwpsRqNmZCNiTj4wgHPah04PVHtoP+vrtcJu09A+SBKTpVpDQ8u5xTlGPS5pC7XDNz1Sj4RTmNEUeNSd4CDJaDn4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778117908; c=relaxed/simple; bh=ttt0TI/NyvcNrUSbHrjt3+A6zcdZ6FdsSNHrqGVcxcI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PP+rVDSPX2pfwYZeMy4X1tbo/GkrDResbr+k+znSnP6jHx+OTgqTmLfvqNtyflqsr2Qf1iO7G8d97h8ybQ/dMXZjfa/PKavLt77pIOpbd/KHutwo3xZTztqG1L1vXomi/MEzaVhkVISNvdfrmVXQvqykLAXVH9LQbpHPK5LaU/k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=IV9TXnHI; arc=fail smtp.client-ip=40.107.162.62 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="IV9TXnHI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iVVRqN1i13hkYWUL+4PsD/tV6uAOlsK8B35hz789xIRAoRaGLhtwUSYomC5PKn4OzIRSlebnueyAtDm9YP0kaVYkW4ehenhU2kaXRpCDPKDeLyRXra132uZcKvuaZ0m9PVoj2LYY7634Maot5EkyfjpCgD2VWXDypjYnGyNyu/cEzaEUEnMb40SqF1Ckkjn4ZnvdukJIBTgDJkYuxLMZhkCLHIvVQy84pfm6TJYpkh9xB6Z8zeDFcDsARTgb+6yQ3AzCd0NnL3qS2JIEuYULG+7iAqVMYptuErva9lrD8iR2uB3h6VFK8MyXKJQhj8DskS6AM5s4rENovBzZ5sCUxw== 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=iAD4EcvYTeP2cXqrJeQ2CUQFMiIt5yCxaTk4tuvx+LY=; b=jLtfHEc43JrLqeiXPAHKqKK0CCLN3iQl12XWwQfJ2JXCtrfHtIpaf5xTd5Ls3gJz7H292Sg1F3mAV477/glNc75Sj+Gwq6kLhfwMayprtzlIcvFQ9iYqcWGEsHBFVeqh7WIexUVlEXkcA3drfdCR3552be/bZ8XQS0BYEttSyAVYf5tPvc8KCoZRPbRHkl7aOg6fmZa5LDn8mf0DOS3/wboC/9uFajPiV89051Zhsy2aTjFOukYc00Fx02cAyCQDWbrwIhIKYI8D5gF7JHoTQDo8C0yEubazSrcg6HVI6AuxYHz2WZsMfJwaztri4vIj2DpX/6OKPOWnecQOBOyPKw== 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=iAD4EcvYTeP2cXqrJeQ2CUQFMiIt5yCxaTk4tuvx+LY=; b=IV9TXnHI+KwnW2WIDR+ld4o1ydHHC1RaowCRBgDvERk8KHp1f+ea22z4NkO9eJJGQ3uP5JIh8tpqna3XSANjlUfWYpAHT/ySu5bfV2RdDEcrWL1rfBgeNHfggekgpdkW0R47e8C/FFHlyYTUP8ZrmB2+VXDQ9kmPDrAA/ywwP7bZ5wRyXJfSaZ3ZezoetoQ7HBiOTfyRnjTr5Iw0vF1gsWn7b2FFdGAtOAH+tQlAtFXcaR+hoqncaVQoYcaEsFEM7Cnd3/OLasfbP1lKqNYPAs+W8gKfTVai+M1avZNhcprMnzEhUilk1F1ILpyq8bSJ/ipUxn9F0gCjl58z3a9j+A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8353.eurprd04.prod.outlook.com (2603:10a6:20b:3ef::22) by PA2PR04MB10514.eurprd04.prod.outlook.com (2603:10a6:102:41e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.15; Thu, 7 May 2026 01:38:24 +0000 Received: from AM9PR04MB8353.eurprd04.prod.outlook.com ([fe80::46ae:f774:f04c:a1bc]) by AM9PR04MB8353.eurprd04.prod.outlook.com ([fe80::46ae:f774:f04c:a1bc%5]) with mapi id 15.20.9870.023; Thu, 7 May 2026 01:38:24 +0000 From: Chancel Liu To: lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, shengjiu.wang@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, nicoleotsuka@gmail.com, Frank.Li@nxp.com, s.hauer@pengutronix.de Cc: kernel@pengutronix.de, shumingf@realtek.com, pierre-louis.bossart@linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 2/3] ASoC: soc-core: Add core support for ignoring suspend on selected DAPM widgets Date: Thu, 7 May 2026 10:36:53 +0900 Message-ID: <20260507013654.2945915-3-chancel.liu@nxp.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260507013654.2945915-1-chancel.liu@nxp.com> References: <20260507013654.2945915-1-chancel.liu@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SEWP216CA0087.KORP216.PROD.OUTLOOK.COM (2603:1096:101:2bf::14) To AM9PR04MB8353.eurprd04.prod.outlook.com (2603:10a6:20b:3ef::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8353:EE_|PA2PR04MB10514:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ec2e5e5-2e71-49af-3dd8-08deabd95414 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|19092799006|52116014|366016|921020|38350700014|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: YX2oIFh08GykbtrnRYy/T6BCkS5e0SPZ+qxRvG6LH5x0bVV6lHI67DAHiiP4savaHVC6WlLiNBVjQv7QF88y44rwm6ysO7qbnDyu0k2Hx5HH1X9DhpCapKmQcSz3/8f0nbXyQWMgurZNzlg52H0vVXt/rXFGO31xkCPYWvRNMhColACZfFJ5rY7A2aaLLsDEx419X186fnoCxGR5m3CcMU0siEuHO/WU5nxArPtP/hILNykkT0W2jEAoPSFpUA6JMQ5lKduoLQbc1N9yjysrMREsTw1dGCiQjoPggBI1eqvBVeBSJ44RrlUYTC5bEj46jk3TR3RxeqAvZ8qyG0q0CsvfL5GiLXX8L6187Wn4fJBPbDuFWIc1pwNr7VxjoAPg9MJPBtL3YbfzVFNOjY+aZ+bggeCV2WRyTuRy8xDjm4UnMCvS8OdkYSS8NI7ZvbLPf3jMlB4U6DXJB+3E6VQyI70mWPAAkHt+NF88PLqunp6Ab/3S01AlPPJ8WBJ9zaCLRnEuPcIKablxpM164pSqfKlPiSRgqSY/zjxa08hymuua1zv+dkL0R51YF6/xEFwzCRBTKR3KNT8psOi4JB4DwYv8J+Joqfpt0XI4UzsRANP7GYFgq3gusRj9s6vv3KQbJI0cbTYhw/YU0srPdS2SuqlYtS6SoJRqm54jFWrZtPnF/67h1uWHfOefHNWd9/vO4t8WlEZAFPIwahOre0iw8OiDxgxvXP+dRAMiZcdc/4/b2vqGoM1SHeMqEuqJZ26D90ZZpXgZl6mNWv97XwhMdw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8353.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(19092799006)(52116014)(366016)(921020)(38350700014)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ir9QyJIS/Nyq/Ho8SUKdrS9Xv2KUDgpjZTjL9OCgi5GY649dSXutBZRFgLOJ?= =?us-ascii?Q?P0HeLuOYbQBYVIzTRHWxNchFaqtixEIFToaJa5FQaHW16JfsgpwwCZFUgPVJ?= =?us-ascii?Q?7R/xM8z43DRnXj8pktN23UBbBsX+5R2cdfmZBKqVza//gsUOXuZ3hU4pGwfc?= =?us-ascii?Q?C2UCLk4HGAO8b3GyoZL0CowBQtRH+19LJrRy+CbNiBdxKRodt1NRIvCMTm6U?= =?us-ascii?Q?p/JcJc8JKsNzwsDTk1YUYGGs5HqSIhlPY0ZMpEpP76vsK80tEgcONyeOpKQh?= =?us-ascii?Q?Sqd5EPO/yx2/t4t9W/2oPBFnllBZkULp7pZiJ1jHaEMOZTDF+cukphrttj/G?= =?us-ascii?Q?4PYq2A6eHRJCGLM/jT6kqjdz5T4wLeudrzR0am5k5vfFkyO0/W5Eql517w9s?= =?us-ascii?Q?3JsnEVuAf4IrZsvGpzDnF32ZO/TF+XXadmY93PIYG6fJbcl9MGGK+9icd8V5?= =?us-ascii?Q?41yYtSqoJvaqWwDIK24Tn0DoSzzrYMvOqtO+44deHIdoMHboRpixZ4S/Elfp?= =?us-ascii?Q?w8OdXxYLnmuJrvsUT3ZJ2PLk35FiREen9UrjPn+nesgHiHLTp4ZrnVaRQPWc?= =?us-ascii?Q?5fETvRDpsaYBFCoRd8CTLzgtljxyr8dyEpCdRt0bLy1hVNuxZ0e1awIB8fQa?= =?us-ascii?Q?5ECq8FBQ+ESCo/r7ZwwljM7KjGsh+qHZuPikbgXc71a1IjjDtEfzs/KxsXsD?= =?us-ascii?Q?3escCGbE3p1Z9/LaGES+g9x0bLrVcQX5AsKu9B/cSFFHehZVhWMm1mMooOd1?= =?us-ascii?Q?xbkoD+ZHlccTWLIBznWzNXs0e1TzehS7ZaUDsB6UOwMS4Q5dDwdJ6A0YKen4?= =?us-ascii?Q?RUdIT8FdQ2sfnXgyUTgoCadPKn5fBTLroyyeapbiWai0nA2Zy8xLYU5/6Yuo?= =?us-ascii?Q?6eAw+UunWZOfVkEDMQpYtmAKrPCPK2TI8+icEbzMv37SSxkufybpHZI0kfqY?= =?us-ascii?Q?JrucdoTie7FHzdq2rbhKyVSjSVVx2nACR4pq9WolxqQH6ey6vfjBLbsH1p03?= =?us-ascii?Q?QHkyFNDYroSEAXIgZLgn1eIFqOzv5/Vqbpj3O1CxNB+ch87G6B2r6BYc1BXd?= =?us-ascii?Q?61nftY5HenOMeFi9nkBU1ZlypcnGtBRmj+rhNy2W3jxJ4VbmgVqBD3udBMB2?= =?us-ascii?Q?zAXeppvJ9pt5DYtKawXko5NBcYNidcxkJ6wtgLYPMzFnjnKOhmdvmgEmHPW5?= =?us-ascii?Q?ijWGQ6aVp0+7uMvcjPVrqvDiFI/VftGWxYks3D9brNH0fUg/K3OCvFNqKE6/?= =?us-ascii?Q?AIto9yLL6RDcQNB/qZ9Dn0PSs58ZWdEwLiQdZiBTV6ewaLr+r4N2WuysS3Dg?= =?us-ascii?Q?NQFI/ho0MISBdPrqRolb25IgJ3gDVX64paRRV1Gxkzem/+Il2i4JEZb6Mvdz?= =?us-ascii?Q?9cffjAqldn7XuZQkUEpQSQYnr/m3LiS2WwdGxWopdYDL0R3q8YU4lyFQKLdu?= =?us-ascii?Q?QKsjicjHqIyjA73Gq/3cQdg66N0YK+w0TA/RB1OXuYhpcMr+3zWZhd54bJI2?= =?us-ascii?Q?5YnUPxgMIT7imJAZ+HY2iA7O+E1sElhB3Nt8kO75CGkyN1ErzofCCHomvAYo?= =?us-ascii?Q?sR+aWSdh4hyLjvBQI6BJ4wevORaZpsBfoPc0fFOyb6WOn+0fo0w+LqUp+Dqo?= =?us-ascii?Q?/W7sG5wQ6CxrQGZhBaG7xjXtp902K8NZz3RGjfreQttU9yOnfX/ft+uSVH1C?= =?us-ascii?Q?aKXcPrIzecIydWQK8hX/9ZsomXc8nEctdms1uYB85kI5EW+WRK9ZgUttz1AD?= =?us-ascii?Q?SbjLUct95g=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ec2e5e5-2e71-49af-3dd8-08deabd95414 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8353.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2026 01:38:24.0856 (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: zJx/t6b5IrFPqu7RVWM0rJh4r9I0O+bR9XDHudgf05A/DbilnSOenTWOzlZfQBrIKgpHB6AQw/FcuFmKvSWytA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR04MB10514 Content-Type: text/plain; charset="utf-8" Some audio systems require specific DAPM widgets to remain powered during system suspend. Introduce a generic and reusable mechanism in the ASoC core to mark selected DAPM widgets as ignore_suspend. The unified mechanism consists of two parts: 1. Parse and store the name list of widgets to ignore suspend in struct snd_soc_card The list of widgets can be provided either by the machine driver or parsed from Device Tree. Different machines have different routing and power requirements. Each machine can specify its own widgets to ignore suspend through DT property. It enables flexible policy without hard code. A new helper, snd_soc_of_parse_ignore_suspend_widgets() is added for this purpose. 2. Apply ignore_suspend flags during snd_soc_bind_card() After all components have been probed and all DAPM widgets have been registered, snd_soc_bind_card() performs a unified lookup of the configured widget names across all DAPM contexts of the card and marks the matching widgets with ignore_suspend =3D 1. Signed-off-by: Chancel Liu --- include/sound/soc-dapm.h | 1 + include/sound/soc.h | 5 +++++ sound/soc/soc-core.c | 43 ++++++++++++++++++++++++++++++++++++++++ sound/soc/soc-dapm.c | 30 ++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+) diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index c1e4f467efda..b0a135b9af50 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h @@ -636,6 +636,7 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_co= ntext *dapm, struct snd_s void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w); int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card); void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card); +int snd_soc_dapm_ignore_suspend_widgets(struct snd_soc_card *card); =20 int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai); diff --git a/include/sound/soc.h b/include/sound/soc.h index 5e3eb617d832..7d6fa79f48e3 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -1057,10 +1057,14 @@ struct snd_soc_card { int num_dapm_widgets; const struct snd_soc_dapm_route *dapm_routes; int num_dapm_routes; + const char **ignore_suspend_widgets; + int num_ignore_suspend_widgets; const struct snd_soc_dapm_widget *of_dapm_widgets; int num_of_dapm_widgets; const struct snd_soc_dapm_route *of_dapm_routes; int num_of_dapm_routes; + const char **of_ignore_suspend_widgets; + int num_of_ignore_suspend_widgets; =20 /* lists of probed devices belonging to this card */ struct list_head component_dev_list; @@ -1339,6 +1343,7 @@ void snd_soc_of_parse_node_prefix(struct device_node = *np, int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, const char *propname); int snd_soc_of_parse_aux_devs(struct snd_soc_card *card, const char *propn= ame); +int snd_soc_of_parse_ignore_suspend_widgets(struct snd_soc_card *card, con= st char *propname); =20 unsigned int snd_soc_daifmt_clock_provider_flipped(unsigned int dai_fmt); unsigned int snd_soc_daifmt_clock_provider_from_bitmap(unsigned int bit_fr= ame); diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 3fecf9fc903c..705181dae472 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2289,6 +2289,10 @@ static int snd_soc_bind_card(struct snd_soc_card *ca= rd) if (ret < 0) goto probe_end; =20 + ret =3D snd_soc_dapm_ignore_suspend_widgets(card); + if (ret < 0) + goto probe_end; + snd_soc_dapm_new_widgets(card); snd_soc_card_fixup_controls(card); =20 @@ -3294,6 +3298,45 @@ int snd_soc_of_parse_aux_devs(struct snd_soc_card *c= ard, const char *propname) } EXPORT_SYMBOL_GPL(snd_soc_of_parse_aux_devs); =20 +int snd_soc_of_parse_ignore_suspend_widgets(struct snd_soc_card *card, + const char *propname) +{ + struct device_node *np =3D card->dev->of_node; + int num_widgets; + const char **widgets; + int i; + + num_widgets =3D of_property_count_strings(np, propname); + if (num_widgets < 0) { + dev_err(card->dev, + "ASoC: Property '%s' does not exist\n", propname); + return -EINVAL; + } + + widgets =3D devm_kcalloc(card->dev, num_widgets, sizeof(char *), GFP_KERN= EL); + if (!widgets) + return -ENOMEM; + + for (i =3D 0; i < num_widgets; i++) { + const char *name; + int ret =3D of_property_read_string_index(np, propname, i, &name); + + if (ret) { + dev_err(card->dev, + "ASoC: Property '%s' could not be read: %d\n", + propname, ret); + return -EINVAL; + } + widgets[i] =3D name; + } + + card->num_of_ignore_suspend_widgets =3D num_widgets; + card->of_ignore_suspend_widgets =3D widgets; + + return 0; +} +EXPORT_SYMBOL_GPL(snd_soc_of_parse_ignore_suspend_widgets); + unsigned int snd_soc_daifmt_clock_provider_flipped(unsigned int dai_fmt) { unsigned int inv_dai_fmt =3D dai_fmt & ~SND_SOC_DAIFMT_CLOCK_PROVIDER_MAS= K; diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index a26771c8e6ee..4e3feb43836c 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -4604,6 +4604,36 @@ void snd_soc_dapm_connect_dai_link_widgets(struct sn= d_soc_card *card) } } =20 +int snd_soc_dapm_ignore_suspend_widgets(struct snd_soc_card *card) +{ + struct snd_soc_dapm_widget *w; + int i; + + for (i =3D 0; i < card->num_ignore_suspend_widgets; i++) { + w =3D dapm_find_widget(snd_soc_card_to_dapm(card), + card->ignore_suspend_widgets[i], true); + if (!w) { + dev_err(card->dev, "ASoC: DAPM unknown ignore suspend widget %s\n", + card->ignore_suspend_widgets[i]); + return -EINVAL; + } + w->ignore_suspend =3D 1; + } + + for (i =3D 0; i < card->num_of_ignore_suspend_widgets; i++) { + w =3D dapm_find_widget(snd_soc_card_to_dapm(card), + card->of_ignore_suspend_widgets[i], true); + if (!w) { + dev_err(card->dev, "ASoC: DAPM unknown ignore suspend widget %s\n", + card->of_ignore_suspend_widgets[i]); + return -EINVAL; + } + w->ignore_suspend =3D 1; + } + + return 0; +} + static void dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,= int event) { struct snd_soc_dai *dai; --=20 2.50.1 From nobody Sat Jun 13 15:20:51 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013042.outbound.protection.outlook.com [40.107.162.42]) (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 4E716272816; Thu, 7 May 2026 01:38:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778117913; cv=fail; b=H+bRCU5Em+QLJhWn2uA/X30x62/qspp5x2GPAnMAE87ma4ze+nOMJlDUoJ8Yaj9UztWBXFPIoVvXtNCsRo7pNQXYByoNfqKo1TUzJNWvFVV7B7IMLie5RpfIA/ubhdSB49DBMTASFKDqSvcF6/y8k0wC577EChevfXZ9xe0aeqE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778117913; c=relaxed/simple; bh=/LY8GhXWq7+6mLWWC9OZrTcpgEgYsV8mM6lSLIfcvac=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=U8VDs9Y89Cl7lmFxNXazuXerpNRcbcn8U4Ugy/qoxnletKWJv+xZt09DcWNqp4ZEaQ18gZZqDiyQEkNMcH7oTaxKUVvNTCHS3XOusNX85GuRJTcSAr0njYXvLuGQgoqUh4kWXeMUeHOXDOy5tTIr2QvUDjJuDatBZQKSiiXMPNA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=jYmC2/3l; arc=fail smtp.client-ip=40.107.162.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="jYmC2/3l" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LOwqTSCr6TiIVaxuiMBb4jgRYTQ46RTrj96cANikRKvuWcfTEHeo7YDwpP0TbnJGJdZyqhPI3mhbuWn4CkUhsDpOciqFYxGU+1Gr2MBXIQKOo3rizai1EdEI7R/Ub/y4kytJKCvpjR967h6yePwuLLxJYwfhI3cfGW0AzGXP2r38OSPc3kg72l6KfJnxECDNop/oJXDCw3r31uQQChCx2RET4+EdGHhxDLTJzMNsKytiCJsBPvqn9JVmNl7LfDiTwn8DDNvaGJPl1ML2+vOVbL1gTlCPTF5eXJVXQ4adVKF0dFbrJC0/Z5trQ7blvFo8TxEEBFOvGfOM5DQA9mahAw== 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=iHJ6nXuQ4SshV/oziQ5Gh1tJp9/USsj3RYqxbBv4csQ=; b=ZB6Uvs4eFgXvYOaEgnVuJ1J5mxnyJYQ4Gybbl+wlNpv8j9yplBuRVoea7RYkTgTp3mLCh/ErN+AffnbGba5yxQ7LvWvVH9x77LnYstmoE7+8OhrTXlcywr8UHjV/0yLyYNpq0HJt9mjIs6E3dhKkbk/LvNKI49zkFuzDyodwrviQuNxqTk++pK9k1kF0Nx3FIz/FyGZg9givh8ApAk9EBHDD/DeXtySIRFqaMc9aezH3DbzTq5r2YC0jH5wFHvrFN+lCbs0TXcmh+MTgGp9nanmppKb/TtJi9FqGk+y1fmhKR1VhL/FEsMsApoqTC2+oA4IN4b75ke/LCmqCWrDcAw== 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=iHJ6nXuQ4SshV/oziQ5Gh1tJp9/USsj3RYqxbBv4csQ=; b=jYmC2/3l0ODeiwx9VBl/SZs0lrP3mA8FcGAs6oFv0jV7fmS7lNIR3TIHgvzTrMBsJJHrdsxQWV8N7I5hKBzWlU4yHclaxdkMpgiWk/IrGUh6KuNGb3TNNxsl3ivJjgd1SywxztNHxQd6d61YvgbV3GQYrrbyG/yRNH2MRkWveTHyHPN/as9DU+3oaHIEE5KHUaQUJs3f+WWvaKko20YPlMT9sK6AL7vyFTANzZv+6UQCotI1TauxOSsP5GUCSW7CjCmLFUlG6J+cRYp8LKiwlFQppZ1M4/zxAljJ/KMufN94VtTiLff5ADrhZPcsLaISBWbtFMT30rQnEBsXM09ppw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8353.eurprd04.prod.outlook.com (2603:10a6:20b:3ef::22) by PA2PR04MB10514.eurprd04.prod.outlook.com (2603:10a6:102:41e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.15; Thu, 7 May 2026 01:38:29 +0000 Received: from AM9PR04MB8353.eurprd04.prod.outlook.com ([fe80::46ae:f774:f04c:a1bc]) by AM9PR04MB8353.eurprd04.prod.outlook.com ([fe80::46ae:f774:f04c:a1bc%5]) with mapi id 15.20.9870.023; Thu, 7 May 2026 01:38:29 +0000 From: Chancel Liu To: lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, shengjiu.wang@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, nicoleotsuka@gmail.com, Frank.Li@nxp.com, s.hauer@pengutronix.de Cc: kernel@pengutronix.de, shumingf@realtek.com, pierre-louis.bossart@linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 3/3] ASoC: fsl: imx-rpmsg: Switch to core ignore-suspend-widgets support Date: Thu, 7 May 2026 10:36:54 +0900 Message-ID: <20260507013654.2945915-4-chancel.liu@nxp.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260507013654.2945915-1-chancel.liu@nxp.com> References: <20260507013654.2945915-1-chancel.liu@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SEWP216CA0087.KORP216.PROD.OUTLOOK.COM (2603:1096:101:2bf::14) To AM9PR04MB8353.eurprd04.prod.outlook.com (2603:10a6:20b:3ef::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8353:EE_|PA2PR04MB10514:EE_ X-MS-Office365-Filtering-Correlation-Id: 6be9ff3b-10a5-456b-f000-08deabd95757 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|19092799006|52116014|366016|921020|38350700014|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: kBM/xioG2eXmITrpsbKsJQ53HnYUhLaRkiunnMdf+2phRFbOItiTT39wP5G2rpP18YkiN3scE7qzv2TCuNJOsLxMIO8lkzxD4jGMEIVGpsKQVf/faRMo09d0EHrtW4pSt1/xd8Yiio9qGkPhDEqKY5Cm7OFuGlK3bY/URFT8FNlecQKeiCLe86TYV2iIwQVPjnfcX4M9V2SrDoHXxJcrAORYb+AZIfYRB8lSvGjLSF6h93X1ceyXuYHdVKhDzppzLnHFMQUbp43pFIs+R7l1Si69eZ5IUmKKIO0it8PpK9GNtnkoIKYedbDDloOfJjy4nF3xm4VNg2pdeSNw1LgnxtYSPfRLM8Y2ctYJEySPu5g2dztE6N8nP3ZN2aRO07E/1YXKB9kPxDBuuuQ+QrOKMBP+UkM8UMcgJzMgo0rRzHNgKABhOaghIuJquVbgoncwPTUPrXtZOPd43YY4NchTPpc5Wh1us7oQyCobXTZjgLI6RVUzaFDCqOfaQGJT0Nm+J9KkyeFFh4G6/1rFV3+UBwDgLXbvHw67GGSR3SBTdoan3bk2bYbpeQVzyogO4Q8m8IMzKnQRiMt4hw3rrToe0F884Af/kysXfSRAuqqZ4C3Q4w4IrSCspbUGWTqv5qdhDo5+durLGv/yZqy05RwQQC5dkZAH7w166yGbFVtcGlbB1afOV6pZ3UKygrkU6d6TXNmSW3K5cjBfk+ysxMBlmPgwN/eCBpz4npiVLcLdRd8yOAgJfSHLj5BE6LBThIgSB1yd2xq6knnyYknNaI9K2A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8353.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(19092799006)(52116014)(366016)(921020)(38350700014)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?F4rW0XztjmeV5j2nSEUTXZctRzYpZo5I+rdXf47FPjohYCIEMOVQDuaOCBap?= =?us-ascii?Q?c7Igox4VPgqzq8Fhp9KMb9Z/pA1E2o0LzK0ClPzxlnx/mQgsIMr5r1VPS8zC?= =?us-ascii?Q?2KgKVhd6nn4TXwRJXJjkvewsp+TIHwzCaP6v9eSdM1mnJAUVrmkhV2m94H8b?= =?us-ascii?Q?uD3MwzPHvzOOu2y8woZbGKmzyCnccOft/vRMhaexRGOv30pQalI7F9DspkM8?= =?us-ascii?Q?TyzPjC87gYLT9Kt8O0e2M1ZiXaN/q15WYXjing+QagAbpprzz7Tr1wut1TZc?= =?us-ascii?Q?3OCQaI7UkM6cXQ0Z1EKxUZajfwdAjbYm8V0mEh44gbztFWQEdNyheUHrJR9X?= =?us-ascii?Q?XOmFU5HLeSzljrS9cBMRAblantXMCkoaC/tlEvlVgz1i3ed7s5tSQLaFtSWb?= =?us-ascii?Q?rqNmSaAth8f5EkjROMB11Jek3F2RLlKc4cjv79EPANAXQJ3XTB6wg+dHBpD5?= =?us-ascii?Q?KL3w84vq0/IEHFtrwF96dBwgG/J8VdxfhPG8qfmDLkyDGWVmfJGwFNWqmwpK?= =?us-ascii?Q?t6mazQjR27I+JME7EVxyhPBRVDvoKS4I006KXZpv35jfqhCZytpOWw45zxMq?= =?us-ascii?Q?QIejZHX80Wuu2sycQAC8F7qFnaiLE3AhuqUiqqRIt3CHdCxWFLvfJeUjfgB/?= =?us-ascii?Q?Odvp8vFdE4bJemWfwKfWCWVX/mLzdnh7stc7CyPXFuVm6pXbvwQzJD/CYKKz?= =?us-ascii?Q?QUDq0K1KC7TyQrt4Lit7xL9qBCGXZ7xF/Vqb6sKZnJbYgc6vyZO4Gik2oJ1G?= =?us-ascii?Q?CfoJbchC0Wieu9PI/Sg5P7+zlpFKap+qJsSQZcfQPZyUiHeAb+K7ewVG3GMC?= =?us-ascii?Q?9A74qcDd4k2ySh78f4V0PTpntb+z9skkw50doW0/k8ImIc/7tPY4fZkATMp4?= =?us-ascii?Q?mgpueGwnTEocw5+TpwYm0U0KUaF68y4ByP+ipvd8AL2pCOn2I86Ad5q3jyBl?= =?us-ascii?Q?qWARXnaPSluqA7bkx/ftIDUO44rv5gdagMcqspv1DaT/cyAqNH2Yr8r2uxqy?= =?us-ascii?Q?tfsXzWm3DuL/0EypvjlnkPdFaIprxpHHxFX97bsxAXoRtwCjFtv2i4WW3LWl?= =?us-ascii?Q?Lkdqf+D4aiG+nQbH1T/OWgd88EO4N3lap0N3tH3pYTWRFNZUZ/Kb5FgJNAb9?= =?us-ascii?Q?sHFiOiKmTpG0+miGSfUNKfT8zW+3Ja49PD292iKokeF7Wmn6ufpym9Ib1VQ0?= =?us-ascii?Q?nQwNCJxkk/CQqAWsZckCC+TBAFg3GUx0A/vEIyUe7VARY489tvkmlB5S/T7D?= =?us-ascii?Q?FaoJwPf35QC29wmk4ZrzG2DwB1VxSfBPPg9prLOx4bmD3t5BJRXiGhiPub7Z?= =?us-ascii?Q?6lF/JCRLPpoQIKGaVG7ktX/q4yLfTTQXZtY6BXl6HauikBAGQadVYFYKYyMl?= =?us-ascii?Q?YyeezGKSjS1tCqEWig2r+WPhi+paeJYjW2VPVFda5lyxFSrRG8Wrt0VmFOJR?= =?us-ascii?Q?kQhWIrHAV0oox47n7/ruE8JWgYwGwTGLWUKRmsS8T7nPhcYBrAjQ5EVdTWQ7?= =?us-ascii?Q?adG3UQ5QtNgQO3Ct8TVQDHATU5vTmoaIC03aAVxpK8fCMT4FaA++nGNCYOk+?= =?us-ascii?Q?rnpYaB0J+eNNU0SKNYn9iQZykKQ/PRZacB+GijcQusM6XRckok8B1RFMPwjY?= =?us-ascii?Q?X8mmGYIp422wrVKZxvPxsdpj1kCVLQtYXfzgqRTVZPyJxUKQk2Fo6NxJQpGM?= =?us-ascii?Q?MvZK3jQ+gA62UhBmmcSkv0Hbsn+EAteEOp5UQ6W+116ML6ZRxl0MCVzPsZG5?= =?us-ascii?Q?/BHgwt74dg=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6be9ff3b-10a5-456b-f000-08deabd95757 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8353.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2026 01:38:29.5903 (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: ZICdXlvn+k1q21DgoRTk36eMN3Llwl5/9vtLh0j93ILRZ5L5B3yoI3vVpd6XIjVT8aC82sDGbKl8ZjoFUgsgUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR04MB10514 Content-Type: text/plain; charset="utf-8" The imx-rpmsg machine driver currently implements its own logic to parse ignore-suspend-widgets from Device Tree and manually traverse DAPM widgets to mark them as ignore_suspend. It also has a potential issue that some widgets listed in the property (e.g. "Headphone Jack") belong to card or CPU DAI DAPM context. Switch to use snd_soc_of_parse_ignore_suspend_widgets() with the introduction of a generic ignore-suspend-widgets mechanism in the ASoC core. Signed-off-by: Chancel Liu --- sound/soc/fsl/imx-rpmsg.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/sound/soc/fsl/imx-rpmsg.c b/sound/soc/fsl/imx-rpmsg.c index 40e0043cfe15..fd4624786b62 100644 --- a/sound/soc/fsl/imx-rpmsg.c +++ b/sound/soc/fsl/imx-rpmsg.c @@ -87,7 +87,6 @@ static int imx_rpmsg_late_probe(struct snd_soc_card *card) int ret; =20 if (data->lpa) { - struct snd_soc_component *codec_comp; struct device_node *codec_np; struct device_driver *codec_drv; struct device *codec_dev =3D NULL; @@ -107,22 +106,6 @@ static int imx_rpmsg_late_probe(struct snd_soc_card *c= ard) } } if (codec_dev) { - codec_comp =3D snd_soc_lookup_component_nolocked(codec_dev, NULL); - if (codec_comp) { - int i, num_widgets; - const char *widgets; - struct snd_soc_dapm_context *dapm; - - num_widgets =3D of_property_count_strings(data->card.dev->of_node, - "ignore-suspend-widgets"); - for (i =3D 0; i < num_widgets; i++) { - of_property_read_string_index(data->card.dev->of_node, - "ignore-suspend-widgets", - i, &widgets); - dapm =3D snd_soc_component_to_dapm(codec_comp); - snd_soc_dapm_ignore_suspend(dapm, widgets); - } - } codec_drv =3D codec_dev->driver; if (codec_drv->pm) { memcpy(&lpa_pm, codec_drv->pm, sizeof(lpa_pm)); @@ -274,6 +257,15 @@ static int imx_rpmsg_probe(struct platform_device *pde= v) } } =20 + if (data->lpa && of_property_present(np, "ignore-suspend-widgets")) { + ret =3D snd_soc_of_parse_ignore_suspend_widgets(&data->card, + "ignore-suspend-widgets"); + if (ret) { + dev_err(&pdev->dev, "failed to parse ignore-suspend-widgets: %d\n", ret= ); + goto fail; + } + } + platform_set_drvdata(pdev, &data->card); snd_soc_card_set_drvdata(&data->card, data); ret =3D devm_snd_soc_register_card(&pdev->dev, &data->card); --=20 2.50.1