From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (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 0DBAE3E51D3; Tue, 21 Jul 2026 14:37:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; cv=fail; b=YsAJY4Uc4S5LxC25ZYpv73ho7rV48nnTupvXXlN4RRPQ+aPALMO23o+ifF7aUzwNVrZWsMrIKCE4u1uWiLkcazljvgIQkiFK0mL9x/hkFDbogRKruIr3yDhGLT0ZZH2bAyYAUsXfFqozqmnkBGh7PsvDS1GGxrqbHwGH62Uxgyk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; c=relaxed/simple; bh=YeXBt0ZiS6G4r1845dRQdtspRBx3lc3q7L3qMRGS5zc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tem2p2YrQ7B5/Wed30QPyMKmk5NoCDXf9vH3EDEIGB8kQ7bV/PAw2DGmEAAz/ylM5gYHjxh59DlvY1aHfSX3g9S2DoWi9mOF7bstLVB+Bq/vKkDJ+tfSYxWZkRl2GEq8E75dNHZxmfIHNlUazKFEASeMNRiQVeqEyYmcVXOy26s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=GhWkJ4+R; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=HTXJGtAp; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="GhWkJ4+R"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="HTXJGtAp" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66LEb6xx668630; Tue, 21 Jul 2026 09:37:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=TGabG5n4BFQzSFv7nAT4MS8uuZgr4bOcZJnKyZRHhOk=; b= GhWkJ4+ROtM4IXO1eDJIdSy86/WiJIC7q3a4Thv9RdZqCJQY0ivJ6ZwvIJFU2r7L mc88fwr3yQrTiEIxCmlAPlBksTzeABNDfffy//lDsrLzAjK+Gd4BPd9TRPbM3vKc HMpJJyDqeQS0XQiF6CkPZAQMFT/WFO3dzDyXa36Vj+slh/0Dco+BfWh3cHQgDIDd i7HW7bbgifDcSrXoG2Iv0Dkiu8AltiGUPXwD3o/vQcTO8Z3MX+nRnhUeYrTZXdKk wueft0Wj8p6kraKp6GjiglA7voyuC6F9t+dbcN5b1Db6L8bY6l7dxcSW+NdbDDY+ xOZ6IxkT9Mpfto5JKg2T/g== Received: from bl0pr03cu003.outbound.protection.outlook.com (mail-eastusazon11022080.outbound.protection.outlook.com [52.101.53.80]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4fg5wfc7ca-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:37:11 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jqAN1JnjVihoHwmx4F8s9dSgbAe5iq/XOrrfEf7CmhXt8qmc4UqhAm9IrM8Idqne0bTXdONy3kMuf5yadQpEoPTRdh218mfBRbz1Td9E0BKvJqlhX3cp6tn2k6zKx3X0EF/mR2CaqtmqkBDEjm3xZNFadhFF9U1udeFcRlxbbEryH+VTDzQ3IQmdb0N+oYAISQxrg3gY/7HX3mPO00YVHlS2VxUthnW419/maIEXx5Lw+1ms8kUKKaNvvg8aS0jByczAKEOlFvLc90ri6FXDBd4keKB2CeQjS9jloRN+vlg+Q4aqa1x2O8NVms1ehcG2AojqJiz/yCOEhdaQb+z9/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=TGabG5n4BFQzSFv7nAT4MS8uuZgr4bOcZJnKyZRHhOk=; b=AqFawUTzW51tDCpFlSYZ8k6sg14q4U+i1w4ofdOcVLW1xS7ramhyeMU+JLU3iMc4eqD0sfI0kN1st4qSTq6ehA8ScTGrkaoXEsX+KABlCm5A2G/CipMTTv7yE+H/4qew8HPjc2ngAyXNWgSdFMDKbdblAY7hSFpapm88auz7c+xdKZzUUFdKvxnwR9mkRmrisuTv+WvHRQjn8NFkEnByveyWMIPHo+dGgUvfiIRpctwwc1dCr0PbsPYnh6edCCrj56yKO/0bkHu1wgDrkIayiNTJeqo6jGHkwwEgFYy7oYG/uSQTWZBNp9r77Ev9Kl0Zr1xeMEPabSsjYbJIzzKS9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TGabG5n4BFQzSFv7nAT4MS8uuZgr4bOcZJnKyZRHhOk=; b=HTXJGtApobmguib39jVxlQIIpmynV/UHu2SKkw8qzGIb2EuJpfLd4O7yg4tTo/vgNZrTk9MCLOt6Xa1BZhCfGssRngZg+xkGzYD4YUAnchBexd3HQPoD9Nhl8r8/T/0cXz2oSMdRPSrzUZ2MyafmTs+Eoy4A/V30MGSpjL2QgOw= Received: from BN0PR03CA0060.namprd03.prod.outlook.com (2603:10b6:408:e7::35) by CO1PR19MB5030.namprd19.prod.outlook.com (2603:10b6:303:d8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Tue, 21 Jul 2026 14:36:41 +0000 Received: from BN1PEPF0000468A.namprd05.prod.outlook.com (2603:10b6:408:e7:cafe::56) by BN0PR03CA0060.outlook.office365.com (2603:10b6:408:e7::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Tue, 21 Jul 2026 14:36:41 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by BN1PEPF0000468A.mail.protection.outlook.com (10.167.243.135) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:40 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id D959A406542; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id AF756822549; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 1/7] ASoC: SDCA: Rename sdca_irq_allocate() to include devm Date: Tue, 21 Jul 2026 15:36:30 +0100 Message-ID: <20260721143636.361814-2-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN1PEPF0000468A:EE_|CO1PR19MB5030:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a4984fe-2ff8-4279-cb04-08dee7357a9d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|36860700016|82310400026|61400799027|376014|56012099006|11063799006|10067099003|18002099003|16102099003|22082099003; X-Microsoft-Antispam-Message-Info: d5w60LEySYULf5dorTjopb+R8HNx/gfm+0LuUFB9YoX1P7RnUNIbkUCJjcITCdzWpmkl7Z/cGXgQSk4cxWGvxy7QxF5ng8yWLitATA5hwZUNU5seOqc024b2NnjO99lv21p17o+7HPeudRiuR3VN7JwE9kHhLmZysSmf9tR5S1KtDuo/W8mfon2bNT4sI4XoWc66S3n570RztlaT4cMAx3ZN3GU/EcEzQ1AbRCBgpl2vah3NTpuoNXKXJN4Im/YgDuCZgOVrmoKNAFwQgUwZRxc80LbWrzAl60ZjBr+ml9KD8UwYX5VwK2eNi41wG8OPgfQph+OZyk8E76I4Z3NC5LlQjA8n0f8IaSWBFt457Em7Gr3hBE+KoBugMl3iCYx2MoeLxikR+kxu3MbtYhjjOY0uf6Nzm6cTamABRb3gRn1iclIlmXICLWMJgjG0tCF2FSPx2ZWkWz9gClpziCd+nTmDqXg3iafwOzqLnjByfvAy8sEr8GFPJmU+DRkuP9PBAAPToObo3qeUDDRPbdKDHoInbnfce2dqPJIov/sx2BzR5jUCmvy7jQPUXQeM8ygUZLYICVsyC6E5en3N3mC+GVLJkMtGiuI7n8vm0VzX+Uzq1ZPDu/+zHg88E3RRcPhvUBXooxraM4u9s8dQytGUU6qoFH14FQWzadOW7P+O7LxJU2yDZHeXSiHkf19iAFC3942/KLDHRHIQ6c7yVvFXVg== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(23010399003)(36860700016)(82310400026)(61400799027)(376014)(56012099006)(11063799006)(10067099003)(18002099003)(16102099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GsuouC5RQu1MfCMX8gl2Pyyga8shMfaP1KC8AekDIVM9XSbuHEDp7BidfSWKnASW1R51xCKTWRB4N3A4h6xjOyk5pSDnS1ywedhzMsacEIVTV8jOtubUdr1wNeML6KLkaLGPAdfv5adXJWVvoDrW1gs9NrYEladjp/FeUMrXWwSX9wlWhVaZzBgE76p/hAbYAsYHaYJBoJ5kvfJOOZJ4Cyo4YymYAB4tES7a8HZbbPV+G8YX9dvPtzzE/9wKKc5Q++7ZLTqLdZ0zjdY7Fx2qBn62RjmAb9qIGT9VsQT5fmiHJPVVFa7Bs7v2HakDN9W1PeWBgqM4Bg/JFzkHUZh58luAHhiLCHHb5PwJd91659eSC+WVRAdFxztX7BWV8lHkL4bcY24R1k1erMLDCHaehdaoDgXg+h/fe5P7p5kigJjGX0D6Q5zJZ9/vH0XKarV/ X-Exchange-RoutingPolicyChecked: GhPX5xJ2gZQmioDQd3ylc+YVmpjvvfYkQQSgIcqZ9eLQMam4KyDF9v1n0F/tO59aSA13G4Ub3uqQCTG7yDlBubbssVJ+RVJZBB4ACgE8kycE1bgWEg1/gzfD5Zvzik3H8Dtr1bnzRYzhJbfbgf5urx47LVmu9xRgwNnQmhuHVKwqckdwIayPVqJiRKMZKMX20yBL6r6bqBYDP4ERcoSy1hbPrnlSOgg8Fxm7OdMRyYCBf6TAgKwK5t20czVwPNo2IoOf76ifsiOwToXLOBog0tE9jkKaWZkJ4NCXvIQdz6dltqjCdjidherBwJ0NZqRdgXrLMufghqYJp6P8wKQ3zw== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:40.7511 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6a4984fe-2ff8-4279-cb04-08dee7357a9d X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-BN1PEPF0000468A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR19MB5030 X-Proofpoint-ORIG-GUID: Gp5kanYpPKtJhOcbi_-Epuoy2KXx8Uzs X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfXy1HXz025gxFH 7pyAoIYpLRdsa+1EnEWiGLYOWucRfbSaJdvqNIvtMqgJikM4lTuu9WqJvvq4UPWsO6kCcE/BvNl BLn9Yo9B7SuFF4VBqgvx8N1/KQTTtLQ= X-Proofpoint-GUID: Gp5kanYpPKtJhOcbi_-Epuoy2KXx8Uzs X-Authority-Analysis: v=2.4 cv=BdjoFLt2 c=1 sm=1 tr=0 ts=6a5f8417 cx=c_pps a=kZfhTMRA2IuZrtsc375NMQ==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=KfkQE9S9VqCBgivYGm0O:22 a=w1d2syhTAAAA:8 a=2FUqhSEOnl-TlfCfRYUA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfXzjbHE1MiHGPJ uYeg+b1FLRbtMvtYM9wcR4zF1nDcepVe35BZyVK1xfwDHsCa9SHgQJFx/UcXlVOtEj4mohTo8Ed GL8umEJANcWrqTw9TSVc5/L5mfzJpgy/gOkkKD0h2tt23Rd37im6KDuBedtog8/lFBNfjhe0UpB ZnSksYsu3moSgj8iIA0RflM6J59PYOQ6YUpoYuCNhEQdqmTDheasM1J+3MTV2uKhbILSVqdWva7 qQMYSFfSR9Fi3Zq8Ppny5jVeZf70B1sP8ol7GwyqV8xUkDH2cSKDD+NPtmkA6sn8Xp9blfasITk 1OwDBidVGXhvVLAPi815KrjXMMAZ19b22YP+rgcr5FNwvd6WPeR08emBJUi3nSzqfUlHpHw7wdD 1AQlp2wmGc3HjRorD5rarw7SGOb0T0h++tHplSzNzMqsspbzWgmEnAitS+t4dEV4w3zSoisa1Jf MBb76M/UALBB9ef5UGg== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Make it more clear sdca_irq_allocate() uses devm allocations by adding it into the name. Signed-off-by: Charles Keepax --- New since v3. include/sound/sdca_interrupts.h | 5 +++-- sound/soc/sdca/sdca_class.c | 4 ++-- sound/soc/sdca/sdca_interrupts.c | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/sound/sdca_interrupts.h b/include/sound/sdca_interrupt= s.h index a515cc3df0971..28fd44eb93343 100644 --- a/include/sound/sdca_interrupts.h +++ b/include/sound/sdca_interrupts.h @@ -86,8 +86,9 @@ int sdca_irq_populate(struct sdca_function_data *function, void sdca_irq_cleanup(struct device *dev, struct sdca_function_data *function, struct sdca_interrupt_info *info); -struct sdca_interrupt_info *sdca_irq_allocate(struct device *dev, - struct regmap *regmap, int irq); + +struct sdca_interrupt_info *devm_sdca_irq_allocate(struct device *dev, + struct regmap *regmap, int irq); =20 void sdca_irq_enable_early(struct sdca_function_data *function, struct sdca_interrupt_info *info); diff --git a/sound/soc/sdca/sdca_class.c b/sound/soc/sdca/sdca_class.c index 8d7b007a068fd..d7444f442c71c 100644 --- a/sound/soc/sdca/sdca_class.c +++ b/sound/soc/sdca/sdca_class.c @@ -111,8 +111,8 @@ static void class_boot_work(struct work_struct *work) =20 regcache_cache_only(drv->dev_regmap, false); =20 - drv->irq_info =3D sdca_irq_allocate(drv->dev, drv->dev_regmap, - drv->sdw->irq); + drv->irq_info =3D devm_sdca_irq_allocate(drv->dev, drv->dev_regmap, + drv->sdw->irq); if (IS_ERR(drv->irq_info)) goto err; =20 diff --git a/sound/soc/sdca/sdca_interrupts.c b/sound/soc/sdca/sdca_interru= pts.c index 4539a52a8e32b..1e4efc0609d93 100644 --- a/sound/soc/sdca/sdca_interrupts.c +++ b/sound/soc/sdca/sdca_interrupts.c @@ -592,7 +592,7 @@ void sdca_irq_cleanup(struct device *dev, EXPORT_SYMBOL_NS_GPL(sdca_irq_cleanup, "SND_SOC_SDCA"); =20 /** - * sdca_irq_allocate - allocate an SDCA interrupt structure for a device + * devm_sdca_irq_allocate - allocate an SDCA interrupt structure for a dev= ice * @sdev: Device pointer against which things should be allocated. * @regmap: regmap to be used for accessing the SDCA IRQ registers. * @irq: The interrupt number. @@ -604,8 +604,8 @@ EXPORT_SYMBOL_NS_GPL(sdca_irq_cleanup, "SND_SOC_SDCA"); * Return: A pointer to the allocated sdca_interrupt_info struct, or an * error code. */ -struct sdca_interrupt_info *sdca_irq_allocate(struct device *sdev, - struct regmap *regmap, int irq) +struct sdca_interrupt_info *devm_sdca_irq_allocate(struct device *sdev, + struct regmap *regmap, int irq) { struct sdca_interrupt_info *info; int ret, i; @@ -634,7 +634,7 @@ struct sdca_interrupt_info *sdca_irq_allocate(struct de= vice *sdev, =20 return info; } -EXPORT_SYMBOL_NS_GPL(sdca_irq_allocate, "SND_SOC_SDCA"); +EXPORT_SYMBOL_NS_GPL(devm_sdca_irq_allocate, "SND_SOC_SDCA"); =20 static void irq_enable_flags(struct sdca_function_data *function, struct sdca_interrupt_info *info, bool early) --=20 2.47.3 From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (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 209A33F9A01; Tue, 21 Jul 2026 14:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; cv=fail; b=WWRwFAMEQbVYjGIK2RbVXB7QNMNEHZWHIwRJQKhTAza6Nh3D08c7ys+EWBG/E+qJEz77qhg5Gxm1n3bZvBty4x2LKqz+d1zkFsDgzIS1TXPpG1ETBMhSmIIudiwYOBfpyfthyzQOkYkbC4MsVCuO+GoP6lnonqIv33Na2+YKTck= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; c=relaxed/simple; bh=IUUJylDvxRH1bWBPhdxnIb/nAExjJo7CAPi+Q+ra0/k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HrRD5SGT2VN1Meatol6uVIjxNCvGDRXnGPwNDESx+qH7BvTKZqhx4vrnVh+7MiQhHZW+Av6rkpvAE/ELnYG0leNgxFG8qWveLDgHmXuzv3kot/xNrWQ/ZkgMUpBvsJraVZfVlmB8g4xq2rY9P3cRyegvUqa51gp4Alyd/9NY3RY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=IJBaMA2u; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=N2wlZmRk; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="IJBaMA2u"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="N2wlZmRk" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66LEbBgS669055; Tue, 21 Jul 2026 09:37:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=/mxQ5WByEBRPe1hBTIPImAUQsvwI+YCspiT5bp3BSC0=; b= IJBaMA2uKy3tFOYA6fVtA5jxAG6+Uwu1EFo3oDASksJ+nlj15o+r3lEeVedxZXLj DUxuuUd4ewZwbVZmOXMFOzxtIB81q7YyVEtczg796shkVII5BBcvIH4hVKdhTH0A tCXSSUGR/h5XR106sSigdXZE3EOq5c7cIzxiYKw7+1v1gFZYRpzLwK0xBnUpbPVm khhVYY5YJQMfDFhjGOWKAHm6/7ZXcLK2Ny2Ns8xMVl35ovEtGQRt2gcPba1xta0L jUEUZ1dE+pJBrRBlpNFTO/dBB19ICUE8V/koav5ZrznUCDPdtLpi3/AxiW+/UZMe ++L0csJt7Q/DoBRGcdntdQ== Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11023137.outbound.protection.outlook.com [40.93.201.137]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4fg5wfc7ch-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:37:06 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J6gzhS9iaoZowG7kFKZoqL6xpUUYLNKFBGFGBcucUnrFUwCboXy45lQkQZOZ8a5GQ2+YMuDIucPeRtUmYqH6ZpWM6sf5FvYA5mpAIsHbA8gdYx6xCQrcZmtSeLyP7yFrLG9DjiGb1p5uXtQTWWT6E2nYPGQpZKmu3dBtonnHedriPM3aGQBC6mwbYuAXBlozd3EWrRmmIGB8y/GHiZHHGRNHCkmNHeKSo3EG9UI982BX7ELWPOU47lLYx/ClEK4Lg0h9iJH8pLDh3MUJJgscURhDFgV1ojwmRv/vWcUEqSzUDz9cui7lBK97QlG67N4ySGKiEGOMgku8BJfOobGwsQ== 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=/mxQ5WByEBRPe1hBTIPImAUQsvwI+YCspiT5bp3BSC0=; b=Jh+lcCPCPqQWf2R/8ghU143Ke7qenexdzT0x5NM30TcRKN/EdS0H1vnpMpzuVJ/5Mo2yT6BNWoEY3Yp2XFKDgPTqgwFjeY1mnNNizG1kdIIAAXHY+UVOd0pQoD25SDXHP9SZNE3dJwmxdfRgujiij+ZiZQfInFX5atlD883Z9ub21FeuEcq1o4vnchfPASK10IPnlpj8MG5S0OMf+hlaL9Hfu4mlltRjtEnIDeJprGKbgPa4Zhkqy6mnyttxFmNE40veS3pqQaV3npE5Jl2MmuaQX8dmW15YPgh7voUI47n2qtok9brXpEUecdKYljtyt75za1OIr880QQXDzQA1WQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/mxQ5WByEBRPe1hBTIPImAUQsvwI+YCspiT5bp3BSC0=; b=N2wlZmRkE9ohOXdIGwYpKk+DqemBeBN2Iin+cbgVoEhXZo/UCkhfUdNsD3KazsNOCywLPut+6cFTTaUJVHOoTe8TAWBoRGcHJCYnFeaP0V+HgbX71TIRy1wcXghRJpSUVjubP5FTbeAKdFY4HbSag6nRDmvsX1FwrX01lP+ERPA= Received: from SJ0PR03CA0362.namprd03.prod.outlook.com (2603:10b6:a03:3a1::7) by MN0PR19MB6384.namprd19.prod.outlook.com (2603:10b6:208:3c0::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.18; Tue, 21 Jul 2026 14:36:42 +0000 Received: from BY1PEPF0001AE1C.namprd04.prod.outlook.com (2603:10b6:a03:3a1:cafe::5f) by SJ0PR03CA0362.outlook.office365.com (2603:10b6:a03:3a1::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Tue, 21 Jul 2026 14:36:42 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by BY1PEPF0001AE1C.mail.protection.outlook.com (10.167.242.105) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:41 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id DC86F406543; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id B32B282254D; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 2/7] ASoC: SDCA: Add sdca_irq_cleanup_late() Date: Tue, 21 Jul 2026 15:36:31 +0100 Message-ID: <20260721143636.361814-3-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE1C:EE_|MN0PR19MB6384:EE_ X-MS-Office365-Filtering-Correlation-Id: 62e835e8-c721-429f-ef1c-08dee7357b01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|61400799027|23010399003|376014|18002099003|22082099003|16102099003|10067099003|11063799006|5023799004|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: ORQIJGIZXCyHDZxcIfK5lXgaiJCMeSa79gBmhEMgkPVwb4+yyi5SjGfn04B7WAgqdlv4J/6TPj/cUzRibn6X/Xet2kT/83c5rOCGH0CtF3OpSEwrsyM0jFC5QpmvaPR+BnPftmtnZnJxKQ6AhrRLCWpz+jihx0NqhZUjZEKuWPejsnxWWWKgG4hpu4WsZt3JQ0bbWS3vLDn2wOdI7kgb6QWmQH89tdwLEafyjQ0zDMz7imQaEWuCLMHM6iXcrgeyt0PKjGt1DAN3H/NVHir5lWMU4A60CZ9i175636BE1Qqc6ZEg25wuOa9r9XHU+CHOlbP4qw0welUQcY18+cXW3DFBfz+4+ZK9E+pcMacCHGyYhp7jPB02hRb/gXtbwWWkDQdGijvbN/FpQc+9TH/FleHr6gSJxUZMAphQ5yYRJOSCPYQsXH4yaiEXMdveOjyIaRpejEdhjulVGg6/cM8FR/sxKXcOzd32oFDBw0e/fzWYskLlI0nMIML5meeLKvoGlrCLiLzGvqj1O/jwLJYyyTSmJwVlAAWZE1UFKD3mlLRsecYbkBtK+ZWdrU4wwshYHsg8pGa4HRl25xVm+WWjHX1KySIiVKndQBucYZ3UU819V8dqiqr3u1NAeMeJu8kjvm7mq4XzvyCLPexY6ySJUn7SJhTPU5Z7fN9hb+9i2L9+O2C0ye64G66+/9gB4kQ9qDB7shSru3p2aUShRNgdvg== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(61400799027)(23010399003)(376014)(18002099003)(22082099003)(16102099003)(10067099003)(11063799006)(5023799004)(56012099006)(6133799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: P1RHHpPaItwsFdjihSorqKzHpge095uO1wbeaj0Nh7ESu0LOHj989Q8WjbrRDFjvL9OMsqJMsqiBH1MkS1YMSzI0hB+VXeIJC+Xu5Dw3d7ffN0mzhVjMuvlEnBrcvBCAwgeF8FnN6aGDc0cdYuPEVNSj3cKIEgQeiow089GEooucg6i39GHGoOAJTEFmaTxA+kkdQ6fVTr6v7QKLFFXUZTAbbWr/j+cqGlCtlnmUGFTc8si7TsB+aJ70FYiIUaL0uj49ADgNjj6tfVd8u60/c4WSNtzjfT358gEuFLd/NS1b7cpwyBKcLmUFd1bPZ3oglO8hNAmWPm3CikPeKxNZUxk6j43ZdRcpD3VhsrUmZU6tZmPj9QisOlvfPF3d9QJrfNmqX+ZdoHJaa8g1lsNgT2O+g2wdFFLQ+N21mbcAolaO3rpfYSIMkqHPkBsyMdmY X-Exchange-RoutingPolicyChecked: mDLG2gz1iiBmQ+e+whtpNNZk0+5z1GCE30mka+qSHCztPMFSwKZDvdoalm5zmnTAhKtu78iWIRsv5SJaq3LTm1eWUkRP1cYSdmBLqLqxnGjAnuGG+9Sl8DRPEDamc8XvMtQbkp+PduMA8n9fa7hxMZoymHt+NWflHLvGSHi1TFGoY96DKr7+r+8r/cLadO82vqFzXMhjtmrZAvYR6SyNr3dsRizvgIELBpAEJw/RLHrkzBSpI6wgPPpjArND5d0IflWaBtKrpMNAXhiKCj62LglDIGCk8RHThvyu6Zwma8K8K71uNGf8kiuOGMpgMzJpTJiF9GK8uHawL+B+qGMk4Q== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:41.2977 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 62e835e8-c721-429f-ef1c-08dee7357b01 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-BY1PEPF0001AE1C.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR19MB6384 X-Proofpoint-ORIG-GUID: IdNCBA6qr5LK3MUplr3J-wYtUL32IrS4 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfXw00GG0P1Yfeo b1zYFInnIa2LvS8zs4XW0hFZw38DMJ4XHb2oijj3gvZm+I0OBSJ7mTeey7ZleUayu/5Aw476jLY q5jIuII63bPu2pEN+MmJW3+xpvMfz64= X-Proofpoint-GUID: IdNCBA6qr5LK3MUplr3J-wYtUL32IrS4 X-Authority-Analysis: v=2.4 cv=BdjoFLt2 c=1 sm=1 tr=0 ts=6a5f8417 cx=c_pps a=lhMG70nIYFfcSaqvxYvWRA==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=KfkQE9S9VqCBgivYGm0O:22 a=w1d2syhTAAAA:8 a=2A11PYpd9AFOWc80pHMA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfX0JwHUelcK/b9 JMcltDdt0yqF2t3AhR0V97XR72xiSWGm5Zrc1pfIGY2ymIlWQWeZFwCjgwnCdTkKwcOSjIi1ZUs ++rxoTNbkFdqi+Ylf++JgorGXh6Bw5a9oD3nmWKAwAB2Ay1t0agjnCiLeu4RSjezmpTZ/ESDIgq KiCJWzRtPo9V8W6Md2FqUB0/U7i7u31WycYY8szcd++DhG2bwvIby0s9+JY+WGaFpJSSQN17oyV MpQhACYmXtOvy7JBqY9fnlrySNI0pb6WOxN2Jz+rXBHCdsljRmWNI7Oo+NZtcROTk4ptJTfeouw +YdSjzezJMcmBNaSeRfj3yWHr4EYcuraVzUTeJrRarDZztwc8tYYQXJHozj8Ka0CZPUsfxrJuO3 kWZrNm1IpSy9F9FMEFecmmE2hws1fmUl2JrIPDdQqiAizkeicnVwLxrtJPKePvB/wwax4Cm4PIA Ps9/XzxHBprKheBOJpA== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" The SDCA IRQs are split into two groups, those registered at bus probe time (basically just FDL) and those registered at component time. There currently exists only a single cleanup function, if the FDL IRQ is freed at component time, then nothing would re-register it if the component is probed again. But the IRQs depending on a component need to be freed if the card is destroyed so they can't use stale components. Split the clean up into two functions one for the component level and one for the bus level. Signed-off-by: Charles Keepax --- Changes since v3: - Switched to using an early request flag rather than a big switch. - Renamed the cleanup flag to be a little clear. include/sound/sdca_interrupts.h | 5 +++ sound/soc/sdca/sdca_class_function.c | 2 +- sound/soc/sdca/sdca_interrupts.c | 53 ++++++++++++++++++++++------ 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/include/sound/sdca_interrupts.h b/include/sound/sdca_interrupt= s.h index 28fd44eb93343..38c6c58c2cc78 100644 --- a/include/sound/sdca_interrupts.h +++ b/include/sound/sdca_interrupts.h @@ -33,6 +33,7 @@ struct sdca_function_data; * @priv: Pointer to private data for use by the handler. * @irq: IRQ number allocated to this interrupt, also used internally to t= rack * the IRQ being assigned. + * @early_request: Flag to indicate this IRQ was requested at bus probe ti= me. */ struct sdca_interrupt { const char *name; @@ -48,6 +49,7 @@ struct sdca_interrupt { void *priv; =20 int irq; + bool early_request; }; =20 /** @@ -86,6 +88,9 @@ int sdca_irq_populate(struct sdca_function_data *function, void sdca_irq_cleanup(struct device *dev, struct sdca_function_data *function, struct sdca_interrupt_info *info); +void sdca_irq_cleanup_late(struct device *dev, + struct sdca_function_data *function, + struct sdca_interrupt_info *info); =20 struct sdca_interrupt_info *devm_sdca_irq_allocate(struct device *dev, struct regmap *regmap, int irq); diff --git a/sound/soc/sdca/sdca_class_function.c b/sound/soc/sdca/sdca_cla= ss_function.c index 1496a15f7d2ac..5ae6c727c796d 100644 --- a/sound/soc/sdca/sdca_class_function.c +++ b/sound/soc/sdca/sdca_class_function.c @@ -408,7 +408,7 @@ static void class_function_remove(struct auxiliary_devi= ce *auxdev) { struct class_function_drv *drv =3D auxiliary_get_drvdata(auxdev); =20 - sdca_irq_cleanup(drv->dev, drv->function, drv->core->irq_info); + sdca_irq_cleanup_late(drv->dev, drv->function, drv->core->irq_info); } =20 static int class_function_runtime_suspend(struct device *dev) diff --git a/sound/soc/sdca/sdca_interrupts.c b/sound/soc/sdca/sdca_interru= pts.c index 1e4efc0609d93..d86884a89c405 100644 --- a/sound/soc/sdca/sdca_interrupts.c +++ b/sound/soc/sdca/sdca_interrupts.c @@ -456,6 +456,8 @@ int sdca_irq_populate_early(struct device *dev, struct = regmap *regmap, if (ret) return ret; =20 + interrupt->early_request =3D true; + ret =3D sdca_fdl_alloc_state(interrupt); if (ret) return ret; @@ -562,17 +564,10 @@ int sdca_irq_populate(struct sdca_function_data *func= tion, } EXPORT_SYMBOL_NS_GPL(sdca_irq_populate, "SND_SOC_SDCA"); =20 -/** - * sdca_irq_cleanup - Free all the individual IRQs for an SDCA Function - * @dev: Device pointer against which the sdca_interrupt_info was allocate= d. - * @function: Pointer to the SDCA Function. - * @info: Pointer to the SDCA interrupt info for this device. - * - * Typically this would be called from the driver for a single SDCA Functi= on. - */ -void sdca_irq_cleanup(struct device *dev, - struct sdca_function_data *function, - struct sdca_interrupt_info *info) +static void sdca_irq_cleanup_flags(struct device *dev, + struct sdca_function_data *function, + struct sdca_interrupt_info *info, + bool late_cleanup) { int i; =20 @@ -584,13 +579,49 @@ void sdca_irq_cleanup(struct device *dev, if (interrupt->function !=3D function || !interrupt->irq) continue; =20 + if (interrupt->early_request && !late_cleanup) + continue; + sdca_irq_free_locked(dev, info, i, interrupt->name, interrupt); =20 kfree(interrupt->name); } } + +/** + * sdca_irq_cleanup - Free the regular IRQs for an SDCA Function + * @dev: Device pointer against which the sdca_interrupt_info was allocate= d. + * @function: Pointer to the SDCA Function. + * @info: Pointer to the SDCA interrupt info for this device. + * + * Typically this would be called from the driver for a single SDCA Functi= on + * from component remove. + */ +void sdca_irq_cleanup(struct device *dev, + struct sdca_function_data *function, + struct sdca_interrupt_info *info) +{ + sdca_irq_cleanup_flags(dev, function, info, false); +} EXPORT_SYMBOL_NS_GPL(sdca_irq_cleanup, "SND_SOC_SDCA"); =20 +/** + * sdca_irq_cleanup_late - Free the early IRQs for an SDCA Function + * @dev: Device pointer against which the sdca_interrupt_info was allocate= d. + * @function: Pointer to the SDCA Function. + * @info: Pointer to the SDCA interrupt info for this device. + * + * Typically this would be called from the driver for a single SDCA Functi= on + * from bus remove. + */ +void sdca_irq_cleanup_late(struct device *dev, + struct sdca_function_data *function, + struct sdca_interrupt_info *info) +{ + sdca_irq_cleanup_flags(dev, function, info, true); +} +EXPORT_SYMBOL_NS_GPL(sdca_irq_cleanup_late, "SND_SOC_SDCA"); + /** * devm_sdca_irq_allocate - allocate an SDCA interrupt structure for a dev= ice * @sdev: Device pointer against which things should be allocated. --=20 2.47.3 From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (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 0DB0E367292; Tue, 21 Jul 2026 14:37:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; cv=fail; b=i63qPs5rvpijos0c3wwJRsLcU6tP7b7ZImWtoZmIEAbLE9TH9FFMwjRIp71/kdtlvkLF634+vhxIsdtSwF5C2IF873Bs9B+RIPrp7FlbJ1RIZ5hbk3KTnUv43kSsB7vTr+ZLFjaeKg94z5roqWOX8E0wfKh3LgZgn4K6em9hPto= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; c=relaxed/simple; bh=D3TYXuC20ll3f1n0APOEhJL2Ao4LW2DaoxCIy47oK9w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FOEaCBXiSIHZQVnrhmXmJ1fYF4vwtgLJYgVn+rp/Gu9mREjfrQLM+wpVjdBHUGWi9ObrUdS6SJAFEF5FHPYzw5PRRkFv+T1mvQYBmr7dJpBISat8EuXIbMzydJ2Q4qDX7NpabKjf8SkVpWGQC6u1znlwNOTPgT2D8jJUfc5EGvc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=JydfiOrm; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=jjoDEZrx; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="JydfiOrm"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="jjoDEZrx" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66LEbBgR669055; Tue, 21 Jul 2026 09:37:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=KF7dH2A0chLqrS8UcTXrnDr42ScwwZX/5SpxIvu1BV8=; b= JydfiOrmOXTIbplG7IK0nboCwVWe5abHj47iwBt/ThGBx1gdT8cltdW2ExizONwW glK7n4gkS2yuKEcDIokm0gvB1b20RlRAGnZ7IgQ2z70xo/ZuPCnlUB+6JBQkROmy +kO8p3ai3GBxDpuQXHoHP64E9h/x5cAqiYb7Ks1CRfGAXtyWMMk8nWtRBrygtJqB TPFwVeeoqM2qH7NmBJ/inpJHABJjk/X1GfK/sZPSfsHx50+GAkOaw4Wcz683IHKa amhGow7fS6umsh+bUyRMkettyjhTYbxNukpoC6tQv7B5KLmU/R2dSLPp2BKtuV/a K+MphxdBwzlj+NG1hE2oQw== Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11020097.outbound.protection.outlook.com [52.101.56.97]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4fg5wfc7cb-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:37:06 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W6PkmRq0EanZcg9ltTJpcXSeL1H5IltenBScEsPE0DjnNjJ/5iIPD/EV78wt8dEivYFbX37eUKHhIpvucvvvaiNBVpcfMamW2astpd58F6gIAaUxu1wGhBjnqEHCzP2du1KosyPICGWeCKVkMGKAAPU5Pe5Rc/JLvE3pNjh0wDjF52ilyZf9Y1YcqI3SBREiikqxbB0pijPaVAE6pnEhdqIbyuYFmIkjUdKRujGsN1T6qSGEC2eouYQ5n3O0RnhZkxQfIqUcsKHevQgsBuy++7vUVdLl1Uy8cTn7tznVzuHYYhYyRA3iXiFBvz/rkJ3D9il+FBxX6B7vYiRra6OdbA== 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=KF7dH2A0chLqrS8UcTXrnDr42ScwwZX/5SpxIvu1BV8=; b=VCyD68Dd2Iy3zs91eDvyt6M2fANpR8O3lWq5snWMh2nqshq76mWYJ+GD4ObzaZTFB6m1UhNa+An2/rLx48Jn1Ao13Pjw6aP0E/jx44mKRbZwToENvuDAHQyKE9K/JT0wsD5oCX5OhbxInk6/jcve91tqSueMcwEzdCqsVPXbMFma47lhnF/Pb1Xq/VtP3Z7n/aPnxiI/MYzqQbY4uW5+EZ9vCJ04VOHXVkn8EBA6GtkcjE4AnYkBiETLbwhIO5RXkrP3M5VhLRxRBgDBC5R44h2CUbnyZlBTU2pDm+M+EYPSYytVVHyYKOs99XqHhva8NT1DyYGkcqK+W1HGXsopZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KF7dH2A0chLqrS8UcTXrnDr42ScwwZX/5SpxIvu1BV8=; b=jjoDEZrx5MsiOHPcS1suy0p7oP+ZYZ8YeMtcOlwcz8FRaHY2N6I+6/0q3VxXO/SXXeVLgBELztLzacPbCl+dHWaCAKHw8PHgNPLV/7cng9jzUXvbQ+MtykoT4GdUJClkmIvRPf9QXFhan3+8Tlf0NtectJTs+4rs62H/reSbDfo= Received: from SJ0PR03CA0033.namprd03.prod.outlook.com (2603:10b6:a03:33e::8) by SA1PR19MB4989.namprd19.prod.outlook.com (2603:10b6:806:1a1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Tue, 21 Jul 2026 14:36:42 +0000 Received: from BY1PEPF0001AE1B.namprd04.prod.outlook.com (2603:10b6:a03:33e:cafe::3d) by SJ0PR03CA0033.outlook.office365.com (2603:10b6:a03:33e::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Tue, 21 Jul 2026 14:36:41 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by BY1PEPF0001AE1B.mail.protection.outlook.com (10.167.242.103) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:41 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id DD0BD406545; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id B5C5182254E; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 3/7] ASoC: SDCA: Remove devm from primary IRQ cleanup Date: Tue, 21 Jul 2026 15:36:32 +0100 Message-ID: <20260721143636.361814-4-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE1B:EE_|SA1PR19MB4989:EE_ X-MS-Office365-Filtering-Correlation-Id: 83cf21d7-8df7-4d6f-01cd-08dee7357af8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|61400799027|36860700016|82310400026|376014|56012099006|11063799006|10067099003|6133799003|18002099003|22082099003|16102099003; X-Microsoft-Antispam-Message-Info: miUbS6ZhWH6sWvrF2/wyJ3W2c7eYKwAStck+ZrwyOMN1m+N4SHNve7ggEZPqNLAPCaRqZcmmIgq5A1JsbnuHRLZMoPgDUBz+qAggQky2JNZn+2n4OKBlQMdJUgoOZ0cdtj+T7bCe6hrcqVX+P0E+20Kf+Y43N9+K8T6ReWaJ0ia/yRygNgIwyQUFsYoB2ZNPxk5G3OLb2MpaMcx5sTBpSJnHTC6ipu15EZofdoBGPiZYo0JJYvtMsu2ehYJ3iAnw62Xx2HpB0qcqfrekL9Q28yaDyyRNoeXAxf+58ckmEzJ6/ZOIK7ONQGfNkyU4XUzrNSCJja0NRJ9cIaXsih2OHqVBnMpo8ynxxIyE9BmoOehWkT18T+9ag/04AEUXn+Ls/V2r+xVuBym7IHUJJI0sVGflemCDnPN+aI3Enh8QjHIJFVI27+MhrkcgnwslMXYu/wLBgQnwFS4gR8usbD4hP2/173+EoMqFNvKtH6dhG2FGTvE86wiEZusA0ZyBIEuf4STsZYP+txB9f9ZGj5AYzS3FohEt0+PQ9twC1nTaCr5ApjKaA6k0jEWK5L5hDXIzBZq/0MSvEFOWqlpgywnueFqOJ5kJz2bDb0j+3Pme5Sby3j/gh4s6d0/vX1fNy0uAZQmP8NjRJueTKlTziLh/Eppgqi7VUwL06qZIF/XDuoqMSMGEVCqkN5oBPqShd4/QyBY8Pb51yFO0XOEOosG1vg== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(23010399003)(61400799027)(36860700016)(82310400026)(376014)(56012099006)(11063799006)(10067099003)(6133799003)(18002099003)(22082099003)(16102099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 4teFdmCUwusZE5h3fwEEl9VX1BtuTz/KexfOhaNZqkh7wDxR+YiUd+Hm07qrF4MuTIlG3JeBYw0bggs4FxAjSXVZRKxHigXPbgKW5O0K78wE6GLjGgPOrfR/xFqZEM73WaOI5iNUowvMoCDmsqs3z0JcbkmoSobLo0veKhO1cB5gA49lmzsr2EDyR3w414u2eGKZ0blMzr4kHlcJU0dVCqD7gpc2epm9mpg50WZdpfP//uhDaU6zRdA2maDTsoYVPlHOCN//Si5Gqr72IN5U6v/kF7GsaZk1Qt0+Z9h2wpR1D0EttSOqYAA9uuWUGb2K/2bf2dhmVxnjGD7YFJMzlqqQr9PADAAlmOV/XM+wY0redb5UwyM549Vz8Y0wKe6AkC7MFVNzb9gOLd3HN3boYL878h4eLR5fZSf1sW2LkuKCjPeYjylqUE/09J8F3nUF X-Exchange-RoutingPolicyChecked: S/GUKKHhHNkgofZWw/ctVlPAdmreFdgckpzBy0Wx62AQvxI0kFnGA57dO6eoTac5TLow/pK+2ABER+jxDPOxiKHBTFnnH2iLoaTkAdGqejYZW74OdMAb5pXi02aDjigDvxaFftzO4c3dgJtwAIddU3Xz+dlYi35H+hQBP+w9N/+6icNJkPMYvuaOuD383SHqn+b15v79ghRXouu2SujM1aqYoh+fiaZzz+fFSy7wdtMYB7FeALmTg5jdIs8jvPw5hZYgsvVQGGYwvZxLlGL7/+By8UpdZXhsb+MBHebOSs9IGXRVQCxV8wOulfAG0cyPOKYI4hELw+p2ab6TaDAe6w== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:41.2335 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 83cf21d7-8df7-4d6f-01cd-08dee7357af8 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-BY1PEPF0001AE1B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR19MB4989 X-Proofpoint-ORIG-GUID: 2MUJucz7Kt8jBWPh4-kGdCIFJ5_tVa8x X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfXyw9eGeem5Xn9 +H61iuQtZNZyNz5YukQR3Z1pwvxBKB98TmUfNJwE9nrh0VdWETyQIk+Fiz6sLMCWSkY0aJch9zv RShMFFs+nS/UlY12BvGYepgiXT8n9MM= X-Proofpoint-GUID: 2MUJucz7Kt8jBWPh4-kGdCIFJ5_tVa8x X-Authority-Analysis: v=2.4 cv=BdjoFLt2 c=1 sm=1 tr=0 ts=6a5f8412 cx=c_pps a=ydgU9ZzZ8ygNmgwE1kSFDg==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=KfkQE9S9VqCBgivYGm0O:22 a=w1d2syhTAAAA:8 a=3S7zaM6fbALVu3JDtX8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfXxEa/gdtJ9CJw quy6hxeyZAazW223VRhqOLJ9wktc7P99BLVL4S+xkNstHJ5XUzwiTdtXIh7gdYTnVmW1R11DMC4 gItBDwXkjH4r0ginFaWK9vrx9MJNF2136Kck3+uttmnEf5zYbLaNP6unYaNmILhby4cooUa+iqQ fXolW/ao1RvaUw2o9bpX4Jf/rd4AxwJ/wde+0x+g7qTfvXH1anGw/usARZq0hl8MMlFjyvE4Fik ZO0HaAq0D8vzYPqne1MMKCEz2vUjMCVRI5NmQ06GwKzwZ3TNfWcK3tmZOsClGiV0sTQTz8bM1rT fWAIxGqRbRcFd4OIVr6ABXcD+jLLNka196Jo0rql6c/NfH0ysQqB4QRhHf+9kEISpCn+3LFZPSo Q8jE9L5Vl151FuD3ywZwR0KQMaBlOZ5Sg6oP+sIvshxVymPj24aZTYIPU0fy7GorPGQ9Ug0nEhA HcpW6isahewsIFljJ7Q== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" To provide greater flexibility on when the IRQs are requested for client drivers don't use devm for the primary IRQ request/cleanup helper functions. Signed-off-by: Charles Keepax --- New since v3. include/sound/sdca_fdl.h | 2 ++ include/sound/sdca_interrupts.h | 2 ++ include/sound/sdca_jack.h | 2 ++ sound/soc/sdca/sdca_fdl.c | 13 +++++++++++-- sound/soc/sdca/sdca_interrupts.c | 8 ++++++++ sound/soc/sdca/sdca_jack.c | 13 +++++++++++-- 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/include/sound/sdca_fdl.h b/include/sound/sdca_fdl.h index fbaf4b384c8af..dc33927b82bde 100644 --- a/include/sound/sdca_fdl.h +++ b/include/sound/sdca_fdl.h @@ -67,6 +67,8 @@ struct fdl_state { #if IS_ENABLED(CONFIG_SND_SOC_SDCA_FDL) =20 int sdca_fdl_alloc_state(struct sdca_interrupt *interrupt); +void sdca_fdl_free_state(struct sdca_interrupt *interrupt); + int sdca_fdl_process(struct sdca_interrupt *interrupt); int sdca_fdl_sync(struct device *dev, struct sdca_function_data *function, struct sdca_interrupt_info *info); diff --git a/include/sound/sdca_interrupts.h b/include/sound/sdca_interrupt= s.h index 38c6c58c2cc78..8a44c19e917ce 100644 --- a/include/sound/sdca_interrupts.h +++ b/include/sound/sdca_interrupts.h @@ -31,6 +31,7 @@ struct sdca_function_data; * @entity: Pointer to the Entity that the interrupt is associated with. * @control: Pointer to the Control that the interrupt is associated with. * @priv: Pointer to private data for use by the handler. + * @free_priv: Pointer to a function that can be used to free the priv dat= a. * @irq: IRQ number allocated to this interrupt, also used internally to t= rack * the IRQ being assigned. * @early_request: Flag to indicate this IRQ was requested at bus probe ti= me. @@ -47,6 +48,7 @@ struct sdca_interrupt { struct sdca_control *control; =20 void *priv; + void (*free_priv)(struct sdca_interrupt *interrupt); =20 int irq; bool early_request; diff --git a/include/sound/sdca_jack.h b/include/sound/sdca_jack.h index 181541f0f4d8c..59de40b7d7d01 100644 --- a/include/sound/sdca_jack.h +++ b/include/sound/sdca_jack.h @@ -28,6 +28,8 @@ struct jack_state { }; =20 int sdca_jack_alloc_state(struct sdca_interrupt *interrupt); +void sdca_jack_free_state(struct sdca_interrupt *interrupt); + int sdca_jack_process(struct sdca_interrupt *interrupt); int sdca_jack_set_jack(struct sdca_interrupt_info *info, struct snd_soc_ja= ck *jack); int sdca_jack_report(struct sdca_interrupt *interrupt); diff --git a/sound/soc/sdca/sdca_fdl.c b/sound/soc/sdca/sdca_fdl.c index 994821a6df617..82e09d960c127 100644 --- a/sound/soc/sdca/sdca_fdl.c +++ b/sound/soc/sdca/sdca_fdl.c @@ -481,10 +481,9 @@ EXPORT_SYMBOL_NS_GPL(sdca_fdl_process, "SND_SOC_SDCA"); */ int sdca_fdl_alloc_state(struct sdca_interrupt *interrupt) { - struct device *dev =3D interrupt->dev; struct fdl_state *fdl_state; =20 - fdl_state =3D devm_kzalloc(dev, sizeof(*fdl_state), GFP_KERNEL); + fdl_state =3D kzalloc_obj(*fdl_state); if (!fdl_state) return -ENOMEM; =20 @@ -499,3 +498,13 @@ int sdca_fdl_alloc_state(struct sdca_interrupt *interr= upt) return 0; } EXPORT_SYMBOL_NS_GPL(sdca_fdl_alloc_state, "SND_SOC_SDCA"); + +/** + * sdca_fdl_free_state - free state for an FDL interrupt + * @interrupt: SDCA interrupt structure. + */ +void sdca_fdl_free_state(struct sdca_interrupt *interrupt) +{ + kfree(interrupt->priv); +} +EXPORT_SYMBOL_NS_GPL(sdca_fdl_free_state, "SND_SOC_SDCA"); diff --git a/sound/soc/sdca/sdca_interrupts.c b/sound/soc/sdca/sdca_interru= pts.c index d86884a89c405..cd2c5d49bb95b 100644 --- a/sound/soc/sdca/sdca_interrupts.c +++ b/sound/soc/sdca/sdca_interrupts.c @@ -457,6 +457,7 @@ int sdca_irq_populate_early(struct device *dev, struct = regmap *regmap, return ret; =20 interrupt->early_request =3D true; + interrupt->free_priv =3D sdca_fdl_free_state; =20 ret =3D sdca_fdl_alloc_state(interrupt); if (ret) @@ -530,6 +531,8 @@ int sdca_irq_populate(struct sdca_function_data *functi= on, handler =3D function_status_handler; break; case SDCA_CTL_TYPE_S(GE, DETECTED_MODE): + interrupt->free_priv =3D sdca_jack_free_state; + ret =3D sdca_jack_alloc_state(interrupt); if (ret) return ret; @@ -537,6 +540,8 @@ int sdca_irq_populate(struct sdca_function_data *functi= on, handler =3D detected_mode_handler; break; case SDCA_CTL_TYPE_S(XU, FDL_CURRENTOWNER): + interrupt->free_priv =3D sdca_fdl_free_state; + ret =3D sdca_fdl_alloc_state(interrupt); if (ret) return ret; @@ -584,6 +589,9 @@ static void sdca_irq_cleanup_flags(struct device *dev, =20 sdca_irq_free_locked(dev, info, i, interrupt->name, interrupt); =20 + if (interrupt->free_priv) + interrupt->free_priv(interrupt); + kfree(interrupt->name); } } diff --git a/sound/soc/sdca/sdca_jack.c b/sound/soc/sdca/sdca_jack.c index ae9636622a840..ffa8709649248 100644 --- a/sound/soc/sdca/sdca_jack.c +++ b/sound/soc/sdca/sdca_jack.c @@ -132,10 +132,9 @@ EXPORT_SYMBOL_NS_GPL(sdca_jack_process, "SND_SOC_SDCA"= ); */ int sdca_jack_alloc_state(struct sdca_interrupt *interrupt) { - struct device *dev =3D interrupt->dev; struct jack_state *jack_state; =20 - jack_state =3D devm_kzalloc(dev, sizeof(*jack_state), GFP_KERNEL); + jack_state =3D kzalloc_obj(*jack_state); if (!jack_state) return -ENOMEM; =20 @@ -145,6 +144,16 @@ int sdca_jack_alloc_state(struct sdca_interrupt *inter= rupt) } EXPORT_SYMBOL_NS_GPL(sdca_jack_alloc_state, "SND_SOC_SDCA"); =20 +/** + * sdca_jack_free_state - free state for a jack interrupt + * @interrupt: SDCA interrupt structure. + */ +void sdca_jack_free_state(struct sdca_interrupt *interrupt) +{ + kfree(interrupt->priv); +} +EXPORT_SYMBOL_NS_GPL(sdca_jack_free_state, "SND_SOC_SDCA"); + static int type_get_mask(enum sdca_terminal_type type) { switch (type) { --=20 2.47.3 From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) (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 894182D5436; Tue, 21 Jul 2026 14:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.149.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644629; cv=fail; b=KeVnPDsqVBrvZkJzMcp9v7jP2ya/sf6S/n3X4LzHmf+SfC7JgOqi2WzUVBhb1TzFJPhwBcXyexMFyVw/qpHjmcuAySV3wd0mQrfd5+n0BUOVqxW8LWFq6yWALe8eVoTo4sxlzHQRP/0P3NlAg7VBTJOGdT5NjvH53Up+ldCadok= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644629; c=relaxed/simple; bh=9zcpUT7eA6ON9TXtXO2UaBWU7HB8DkY7VwGnmsha1a0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=A69srgjyKxnFEBT3gIFBKT09FKBxsr+5krVUw2946pTxyP/mZ8VgiYjuHll/Gap+YayaBv8rmU1XsKoOBLEcDShZkPV7jw9lCTLSGOm98YvzpvRbV6L4sc6Z0z2odYFxNOMZeSLdLU1Kx1bpqe3HSDHBDcX6kISbIk9oyEdwh+s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=IhTZuTCk; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=Wrfc5u3y; arc=fail smtp.client-ip=67.231.149.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="IhTZuTCk"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="Wrfc5u3y" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66L5J3dE1828547; Tue, 21 Jul 2026 09:36:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=URS9cDHxbGpO0+JwZ9wJr3El3ku8J+tz2OdUGKrq86s=; b= IhTZuTCkxFd4BTlfU0LaRThZEkg+WkrYSJ//PRCest1KSCa3mXWVdK/yzDFdFxKO HMZzsVMK0DaLpgYufr1r2QjNsD218Ov2g6pJKEJ0DxoahQXjZ11VUg94NKNK+emS WrWKGhDWnzSGPm8pRsrUiPMCSMga9QKlQtCqqDw/Mze2kyTe845YTRR5Hv4tkE+G yahNE3DHlmsWstwKkYLWQA7TzE+DQ8AKnkTUjRT4xr3Z+8stdaJ6pKiKXr9IW/RY uM4JdtEPidbrXQbecsAEYjMAIMOo50rpCjwJthJeV8n0uOcbH+P6n+7CvBQQQ0sX AYCQTTf1yUPMJnHkkILU4Q== Received: from bl0pr03cu003.outbound.protection.outlook.com (mail-eastusazon11022112.outbound.protection.outlook.com [52.101.53.112]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4fg6vym7n4-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:36:50 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ChUFlFJe5S2RgHZY542TgXeBiDEXrxlISkw9tVVXA66vsQt22OLvsgJWg8zIoxtXsDsNA+mdDA9KzwMQLDhVoNqyIMZyp70wbrdYVh1trDFT82hRL+pDFgdJeX2yyYMqMMK18qPcCOlf6THVJp6vr8UctmhZxZ1HbXSer8Yil8hysLC2MqWCl6HWZ6n5ACf31LAdSM42RKeBx0Q7kiOJn8Rr/v2vFKLUk+pfgQUHFdLWJUrOUMJHDPPDT5E9ravMF2ZTFEpiFwjQyOT7kUtP7XU4dTGmrAs/sALPh1FC34maN2CYEdTwfvBJy42HDq6LO+H3JGB3Afhzo3UDsKPrGw== 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=URS9cDHxbGpO0+JwZ9wJr3El3ku8J+tz2OdUGKrq86s=; b=DNIcymv3LKwiwswTwgzo1787w/3e4ASUIRL6DSTcnEZhmXrGT06fCnD6yLJtDNyLxwRBz6KX9xyKhFphky4JHCvXaAY7NvrDQrNRd936nfBdz5ChqoSq3mr7ksEcHhRRO47pZku2IaH+c/rCuj8p9H/20ofi2gf0mXI7uph9Ilf5s+paK4wV3epzldV2D8Z24wbc4jqwyMZdW0dyfjoBTI4m2OhLYmReZxVMtMHsbvZxzUhpoAxzdTor01Iy11NNgF19yJMFSSWGCnBZe92RzU2m2WIjQXR2hMF5Dwm9TVeuG5KZM3IKCuh9vdNTE58b+XrosV0ajOpQDWEt7+40tA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=URS9cDHxbGpO0+JwZ9wJr3El3ku8J+tz2OdUGKrq86s=; b=Wrfc5u3yM643lYJ1fyDs7kMoXSQBmcfpgd/keoOAis2VOz+2fYCPrcMLzHFQdid+qRuNAfcpEa34SPEJ7g7y0DQLT35qo3G+kJSP1iMlxJhc9oDF9/rFpYaI5LTX81jwAn0LBn4//Dhz0cOZn17ARudpRjFEjj80/aq4gtQGTIM= Received: from CH2PR10CA0024.namprd10.prod.outlook.com (2603:10b6:610:4c::34) by PH8PR19MB6619.namprd19.prod.outlook.com (2603:10b6:510:1ce::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.18; Tue, 21 Jul 2026 14:36:44 +0000 Received: from DS3PEPF000099DE.namprd04.prod.outlook.com (2603:10b6:610:4c:cafe::5a) by CH2PR10CA0024.outlook.office365.com (2603:10b6:610:4c::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.18 via Frontend Transport; Tue, 21 Jul 2026 14:36:43 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by DS3PEPF000099DE.mail.protection.outlook.com (10.167.17.200) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:43 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id E203D40654A; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id B866E822550; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 4/7] ASoC: SDCA: Populate IRQ data earlier Date: Tue, 21 Jul 2026 15:36:33 +0100 Message-ID: <20260721143636.361814-5-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS3PEPF000099DE:EE_|PH8PR19MB6619:EE_ X-MS-Office365-Filtering-Correlation-Id: 9665a9c9-e595-453f-e4d2-08dee7357c37 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|61400799027|82310400026|23010399003|376014|36860700016|10067099003|56012099006|11063799006|18002099003|22082099003|16102099003; X-Microsoft-Antispam-Message-Info: iZ6d/1tUylk4G4K3IgtkLh6idT3YCAw8vrm7n4jwhDpBB86WHnHcgSDFLkF7OaCmhYd1GkHqkokNB5fUYbSr0GR06mXQTi+53JXTmy+B+72pryFBt8jp2JpHFwhrfXcDZakxs2kgEToSIOMloCOBI5spt7m1Gybg+UTCqDBa45u7+R/uUycBFV5ax62jHxZDA2Au0xum19VqkfDzsQNz9Glo1ZZ+MfoSNxN6ArhnXogryPmQqZ7x/Ee1R/f3PnfzPHccq+s8rpXAB+k2nhAioPKenARu3RzE64Ax5J9C8fVtfK6IX+Zxg0rrERUvp2rURs5mi0tXppEDaiP2XfjH+iThLW+kz7w9Oy67++dJp8tZiTbcDb6fg8n3JZJYB8GUJdZ/hYnqpm5nMVymnHuvq4XG8H8NYm8eQlwM//afrG9eO+/yyPXli6+JA1N14p/khMypqKfjMTOicuxUwwO632tpJNr5FWCWdMkXWfQTSSqgpDJqlj+p7YLpalXu5VC6nAvbdjqK+5HSTqjxEaCxOCzIcegIl7LUwov2jF48I0Lv0N7++COFNP101AQiooiqO2a6tM+izCi+gDo5RCzunOffguTL9lwTdY7y7E2zIqA3mab7Eopdw+qit4usJze9skVFq7r4C0Le9plHNht/XE+dIuAgsqUdFWUFWqjM0sDLYMaw8WVsl41LbddGQHr8m4gxmn4ZDaPSiTgAhW9/6g== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(61400799027)(82310400026)(23010399003)(376014)(36860700016)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003)(16102099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oPEzmK7y2Ewhg/WKal7RBf4EHxzHvJI2tQ1A3SBoXG8UBgd5u9OQgRcyIBpvzjB0u52oT1Em87jtROih5pGDHHIswcxcZn1YMLk5hLQ+e5y+jXHwpVa/qLzyKkw+/OpOWg0UTn9abww3hD0Nd0zah8bldG301RPZoLnl+48tz4uVaBN7zX6kfifz+G0BRPrJjhYrYjap8/nUV7pohqNbMy2kO5R5FnsmaDBnsMJ4BA1vG4C+87KlhclqX5bZr1tyjBYHQaA163IUDGhcwhPmH1CLcvAjDjmTccSNAY017vqM8Ozjc3iq11o0go54lGmB43WEuyFe6kLMMapwXFnIccH2f1H2pDyi+SSEC4Iybp6o9+/tGkxMnCm3wY1fFRUKvF/UeKNpeasf8z6TTT/6qDw2litF+Ol3jb3GbN+DK3z/kBqw8wx/75eQLsCIMP5S X-Exchange-RoutingPolicyChecked: b4qnkWXu9wL+AYtYkz1Cc/0MwaIyzs/5oxuPv41VcdZUI3upf70ServWXNqppJFVpNRdmvYXQISAjrZl5kgaGn2EtBLKqZ1ZnzpX0Msccqgt5nacU+x09kQhHKI0AK7NbLMiGrPnabNlZTK9qcskm/azMxgx0/VZvNEM7DIp3GLkm10FbKltpxtVJtMoyjwRMSGgEco+I/hCTd4NoI0bChcFeWbwCuSbXVHmQRnWDgn0Um99LpRpfeulbyk6arIa1Sno8QIZ3raARNLXXJD4Dz3rpuu3DKdrkhtZF8Gqvv7SKFb6iRcUCcGoiRUuxQ07NhHcx99qh15GlCkGy8y1JA== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:43.3743 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9665a9c9-e595-453f-e4d2-08dee7357c37 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-DS3PEPF000099DE.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR19MB6619 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1MyBTYWx0ZWRfX84HgMl6PqDGB tWI8GE6/mX1CBJ02mNO3KtNYG7GYwj+4Y+FJzX39reE/lhcSGODEbezmIglIUkALdPBQpXYHWNT PXJTPNsNv3pZMM5pR/lZ2wZHdSGavgg= X-Authority-Analysis: v=2.4 cv=f5l4wuyM c=1 sm=1 tr=0 ts=6a5f8402 cx=c_pps a=2hvfkwp4b152R1AolHnjyQ==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=Dj2-6B8FqX4mGL0U3gbX:22 a=w1d2syhTAAAA:8 a=HXU3PlZKHoDzXa_cyEQA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1MyBTYWx0ZWRfX5MG79E/H01iW bKmuHuc1Ws3lImphrqFhcsm9H5xX+42WDU53TPzPUxQ6Z/8lsYxn7kvfwqhNMqh/aM5Q6Etuy4X 1V3B8MUJ9hr9B6lfllmseqfJRBwzNJ49Oo+YpiqtaasUoFMI+GTLq97+8RSN0tGhc5Mpu9CuidV JuxZjbjY3TKE1w1Wacc9UftjEtecd4E5PSuleWgjYaGPAx3Co/ccyvcoUfMdpLfdRvpTUi7aVPQ c8KmADUVAnLFdjunj7BHRkxD3eaB9ps+1H5t2DTnYaLbINY1zcKLPeIrsVrsfGprqvjDDaYX9Jz IRLlKogJUnfF0J+a3A7pPZQLKx52jFh6zGr4GaIKlmC/x/ahKq+h85kP9VvSHYknDoehZ7nfP69 JV1FvI9bmghYtiWahYvpUh58LOtQJq+LJjpwNnwqqiZ8f2lJyVMz9wgke8AY/EgGwNCT1dZbO9J 1vAYfU+e29FTJjIvMOg== X-Proofpoint-ORIG-GUID: cwOlGIzGV1-ydIAx4jGNNdzYR3EYciez X-Proofpoint-GUID: cwOlGIzGV1-ydIAx4jGNNdzYR3EYciez X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Currently, the IRQ data (attached Entity/Control/etc) is populated as the IRQ is requested. However, this can cause issues as occasionally the setup process wants to access specifics of an IRQ before the IRQ is actually enabled. To facilitate this cache all the IRQ data during sdca_irq_populate_early() and make sdca_irq_populate() simply request the outstanding IRQs. This also has the advantage that sdca_irq_populate() can now just iterate through the IRQ array which is much smaller/faster than going through every Entity in the Function for Controls. Signed-off-by: Charles Keepax --- Changes since v3: - Updated some bits of kernel doc - Moved before fixup_controls in the chain include/sound/sdca_interrupts.h | 2 + sound/soc/sdca/sdca_interrupts.c | 115 ++++++++++++------------------- 2 files changed, 47 insertions(+), 70 deletions(-) diff --git a/include/sound/sdca_interrupts.h b/include/sound/sdca_interrupt= s.h index 8a44c19e917ce..3b30146e21db5 100644 --- a/include/sound/sdca_interrupts.h +++ b/include/sound/sdca_interrupts.h @@ -30,6 +30,7 @@ struct sdca_function_data; * @function: Pointer to the Function that the interrupt is associated wit= h. * @entity: Pointer to the Entity that the interrupt is associated with. * @control: Pointer to the Control that the interrupt is associated with. + * @handler: Handler function to be called for the IRQ. * @priv: Pointer to private data for use by the handler. * @free_priv: Pointer to a function that can be used to free the priv dat= a. * @irq: IRQ number allocated to this interrupt, also used internally to t= rack @@ -46,6 +47,7 @@ struct sdca_interrupt { struct sdca_function_data *function; struct sdca_entity *entity; struct sdca_control *control; + irq_handler_t handler; =20 void *priv; void (*free_priv)(struct sdca_interrupt *interrupt); diff --git a/sound/soc/sdca/sdca_interrupts.c b/sound/soc/sdca/sdca_interru= pts.c index cd2c5d49bb95b..6f0d8c0fe622d 100644 --- a/sound/soc/sdca/sdca_interrupts.c +++ b/sound/soc/sdca/sdca_interrupts.c @@ -421,7 +421,8 @@ static struct sdca_interrupt *get_interrupt_data(struct= device *dev, int irq, * * This is intended to be used as part of the Function boot process. It * can be called before the soundcard is registered (ie. doesn't depend - * on component) and will register the FDL interrupts. + * on component) and will populate all the required IRQ data, as well as + * registering the FDL interrupts to start booting the device. * * Return: Zero on success, and a negative error code on failure. */ @@ -448,24 +449,36 @@ int sdca_irq_populate_early(struct device *dev, struc= t regmap *regmap, else if (!interrupt) continue; =20 + ret =3D sdca_irq_data_populate(dev, regmap, NULL, function, + entity, control, interrupt); + if (ret) + return ret; + switch (SDCA_CTL_TYPE(entity->type, control->sel)) { - case SDCA_CTL_TYPE_S(XU, FDL_CURRENTOWNER): - ret =3D sdca_irq_data_populate(dev, regmap, NULL, - function, entity, - control, interrupt); + case SDCA_CTL_TYPE_S(ENTITY_0, FUNCTION_STATUS): + interrupt->handler =3D function_status_handler; + break; + case SDCA_CTL_TYPE_S(GE, DETECTED_MODE): + interrupt->handler =3D detected_mode_handler; + interrupt->free_priv =3D sdca_jack_free_state; + + ret =3D sdca_jack_alloc_state(interrupt); if (ret) return ret; - - interrupt->early_request =3D true; + break; + case SDCA_CTL_TYPE_S(XU, FDL_CURRENTOWNER): + interrupt->handler =3D fdl_owner_handler; interrupt->free_priv =3D sdca_fdl_free_state; =20 ret =3D sdca_fdl_alloc_state(interrupt); if (ret) return ret; =20 + interrupt->early_request =3D true; + ret =3D sdca_irq_request_locked(dev, info, irq, interrupt->name, - fdl_owner_handler, + interrupt->handler, interrupt); if (ret) { dev_err(dev, "failed to request irq %s: %d\n", @@ -473,7 +486,11 @@ int sdca_irq_populate_early(struct device *dev, struct= regmap *regmap, return ret; } break; + case SDCA_CTL_TYPE_S(HIDE, HIDTX_CURRENTOWNER): + interrupt->handler =3D hid_handler; + break; default: + interrupt->handler =3D base_handler; break; } } @@ -498,70 +515,26 @@ int sdca_irq_populate(struct sdca_function_data *func= tion, struct sdca_interrupt_info *info) { struct device *dev =3D component->dev; - int i, j; + int i, ret; =20 guard(mutex)(&info->irq_lock); =20 - for (i =3D 0; i < function->num_entities; i++) { - struct sdca_entity *entity =3D &function->entities[i]; - - for (j =3D 0; j < entity->num_controls; j++) { - struct sdca_control *control =3D &entity->controls[j]; - int irq =3D control->interrupt_position; - struct sdca_interrupt *interrupt; - irq_handler_t handler; - int ret; - - interrupt =3D get_interrupt_data(dev, irq, info); - if (IS_ERR(interrupt)) - return PTR_ERR(interrupt); - else if (!interrupt) - continue; - - ret =3D sdca_irq_data_populate(dev, NULL, component, - function, entity, control, - interrupt); - if (ret) - return ret; - - handler =3D base_handler; - - switch (SDCA_CTL_TYPE(entity->type, control->sel)) { - case SDCA_CTL_TYPE_S(ENTITY_0, FUNCTION_STATUS): - handler =3D function_status_handler; - break; - case SDCA_CTL_TYPE_S(GE, DETECTED_MODE): - interrupt->free_priv =3D sdca_jack_free_state; - - ret =3D sdca_jack_alloc_state(interrupt); - if (ret) - return ret; - - handler =3D detected_mode_handler; - break; - case SDCA_CTL_TYPE_S(XU, FDL_CURRENTOWNER): - interrupt->free_priv =3D sdca_fdl_free_state; + for (i =3D 0; i < SDCA_MAX_INTERRUPTS; i++) { + struct sdca_interrupt *interrupt =3D &info->irqs[i]; + int irq; =20 - ret =3D sdca_fdl_alloc_state(interrupt); - if (ret) - return ret; + if (interrupt->function !=3D function || interrupt->irq) + continue; =20 - handler =3D fdl_owner_handler; - break; - case SDCA_CTL_TYPE_S(HIDE, HIDTX_CURRENTOWNER): - handler =3D hid_handler; - break; - default: - break; - } + interrupt->component =3D component; =20 - ret =3D sdca_irq_request_locked(dev, info, irq, interrupt->name, - handler, interrupt); - if (ret) { - dev_err(dev, "failed to request irq %s: %d\n", - interrupt->name, ret); - return ret; - } + irq =3D interrupt->control->interrupt_position; + ret =3D sdca_irq_request_locked(dev, info, irq, interrupt->name, + interrupt->handler, interrupt); + if (ret) { + dev_err(dev, "failed to request irq %s: %d\n", + interrupt->name, ret); + return ret; } } =20 @@ -581,13 +554,15 @@ static void sdca_irq_cleanup_flags(struct device *dev, for (i =3D 0; i < SDCA_MAX_INTERRUPTS; i++) { struct sdca_interrupt *interrupt =3D &info->irqs[i]; =20 - if (interrupt->function !=3D function || !interrupt->irq) + if (interrupt->function !=3D function || + (interrupt->early_request && !late_cleanup)) continue; =20 - if (interrupt->early_request && !late_cleanup) - continue; + if (interrupt->irq) + sdca_irq_free_locked(dev, info, i, interrupt->name, interrupt); =20 - sdca_irq_free_locked(dev, info, i, interrupt->name, interrupt); + if (!late_cleanup) + continue; =20 if (interrupt->free_priv) interrupt->free_priv(interrupt); --=20 2.47.3 From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) (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 4AA9B2D5436; Tue, 21 Jul 2026 14:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.152.168 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; cv=fail; b=sYYUuMFZA7Rmd2niZyuHtM2zBz7NozsqmRXdvKb/D2Y1fA0HGuW0DPGk7DnrYVFM99vlL+pPN2tj+EW6MbMCDASyQPux3X1H24s68/0qYkya6gj8tRd65Wk/yLLWKUEM5irsXfnL5wQ5Osvag85SjNVy/JuY9EXu9krQgG2j368= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644642; c=relaxed/simple; bh=J0Ifai3qhtghdNPkc9e2kDGGl/Xdva05arMk3nQ8GOw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=srnowBhZ58sxLpDNPn7qsf9Fb8+M1nA+EZiemsSEx9QgWs2ouDsXKE3rrqA63+Wsw/TTHVkZZma0Y2ozN1QDlF2BZKS18WsJ98RK2r7aB7Y2J1ePxObwUleaZ3zblW/G4d643baSkBc1BkCh1hykbobXaWXK4Bs313tygj7+k8M= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=XOUyigWC; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=kMudGcTo; arc=fail smtp.client-ip=67.231.152.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="XOUyigWC"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="kMudGcTo" Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66LEbBgT669055; Tue, 21 Jul 2026 09:37:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=0KJ1GKOsxTrFu3Fdm5LUx33ShFfvfawyLDlyCIoYkzM=; b= XOUyigWCCz0CJc8+mYTw4Rr/tyOUhnhcWI5nbDs9uPNLT2L9PN9FcEV9xlwPpg0C 4JTnVAevkE2An9Eu5KiMdKRkmEtCEBH5j9WVrc7HPN5iJjYMzGPw+2TAGzU2fAhA ABB97phT5707VbPgsypZmoi3+eYSF1zFDEnAKZTLqP13vWbcWU1SNpHpDZo4HCjl KrY9stzr3h9+qwegVqjjB9dHtnI4rdlKy+fZr8hss/LH6QlnFWqGE9y6bQKfrM5o hS2bWVS0DewVS/7KtbvPFoaRliMVJFJs/GFsI8lEbkbuiCQVPEyVRDhXIlEOyC+r IIYL/OliMXrvctlBnIuWPQ== Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11020110.outbound.protection.outlook.com [52.101.201.110]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4fg5wfc7ce-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:37:12 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lnfTmrx+4meafPAhm4OBx5rDXGcdBqKUM0KzaIq0lategGKS+OsRMzOKwwtG1HbuliQwBRCM0jggUnY8WtdJ+Wek1v0I/oTkiw4m5gXn7D6AM6UzfHhVxTPrcYEzOKW3g8pZ7MC7wIZedVqoTq87fggMjI6PqQirlOKFqDLgldCDr2gcv8cOcW/+QD1SGSV3uRlEirytvTO7xNbOUSUhyRZKU/2XOhJnJ/VoV6Mv9eF7DSIqOQbRfQsunQju8eOWPH6jSnuTpZDOqlicBfrKAsEKG4zSk9kE6cHsMiP/vf5rNKYoEZCDfzIBWfXpGdqW7Wrr0bBEtyKhfqrryY08gQ== 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=0KJ1GKOsxTrFu3Fdm5LUx33ShFfvfawyLDlyCIoYkzM=; b=Sp1+BEkWfd9hoxoW0MGPb+jtSdD16L/Uyc3CJhhZWHk046ISw6RndhCn0abCkeorM7Mk2vWRpw3qlh7x6ej4WsOhbHopgZmQNDJNJoUXmg4rGMYH5i1rabZI7MEyVO/1Zi2ToVxMMwbyrdvcMm7rXbVGZTOGpe1O83rEL4ucuKDHTdbvgble9FnVohpyd/WWJ64hKiILyDRkvXDZ/wrZk5hbwwP0PTrHHxckoDES9PTz1FIlq9yAFrBP3rQ4Y4II2ptVA/d9X9eJ0ZU8eF1aMKbS92fe3eGcTVcyVQ/OxXkfTwFHlwsQwUWRnaXaw25/eO8QEY7XHdp3+veaUJI9hQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0KJ1GKOsxTrFu3Fdm5LUx33ShFfvfawyLDlyCIoYkzM=; b=kMudGcTon43ZQPnU10Yu3VgwbntnUhZigz8zWTAwZ6OA/UMU1LLS0A8b/XgWhYoUU2E38ITHaIev7Lys93SuatwP/dDMKKCWXKOXNxJxyyTBKH+Gx0wy6AMk3+tbRN7yNIN3fsDk124IviswfPC8dPqSX5ORmdfw7lNlfwUICA4= Received: from SJ0PR13CA0086.namprd13.prod.outlook.com (2603:10b6:a03:2c4::31) by MW4PR19MB5591.namprd19.prod.outlook.com (2603:10b6:303:16b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Tue, 21 Jul 2026 14:36:42 +0000 Received: from CO1PEPF000075ED.namprd03.prod.outlook.com (2603:10b6:a03:2c4:cafe::c) by SJ0PR13CA0086.outlook.office365.com (2603:10b6:a03:2c4::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Tue, 21 Jul 2026 14:36:42 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by CO1PEPF000075ED.mail.protection.outlook.com (10.167.249.36) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:41 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id E0E96406547; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id BB792822552; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 5/7] ASoC: Add a component fixup_controls callback Date: Tue, 21 Jul 2026 15:36:34 +0100 Message-ID: <20260721143636.361814-6-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000075ED:EE_|MW4PR19MB5591:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a406016-729f-4135-c99f-08dee7357b6a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|30052699003|23010399003|61400799027|82310400026|36860700016|56012099006|11063799006|10067099003|16102099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: FTrs9rzX6vNZ1dyuhzHnc/uttTC50e81rrmlAQwh6T5SYlW8P80YubY+zY/nclT1zrH4xOpGHFHbQsUVrgYPlW2vu+MQWH5/4d0W0UmssqbRryHggTtMQxSTjO5K+u2rh+6va4MBzAflMQVcvQnIDpFmEBRZb+THRhewM8O5J1+XvIQ5h0mGjNr3QVB22dMRX/bNJzop5rp9QP+a+IlIAIKGJ23VFIkDtu7/nsGQDm6OAIe9yRw9MkCh7K3A9ujD5r35Y9OITcRmNHqh4GVUNUWYcQGnn8pY5cNGtzy7JRoXTGI3TJZViVwcr943V+NPZNt2tonANpTDmA/wprZZ7lKzk66fVcDzQ4leWhq+C0+3UZ+SJ/1SLknK8+VoaQI8XTph3qBI+Mbugj3XMZ/TvRc+3IQbrQG8J6oaOyyc6cjP5Tu+x+roE+gkE7y4aeXy+VMM1L+1CNLegPT8mGxyyon8sCBe+ejhvmihk9xHvmC11kQPaq3/tcXlxavSWj6EnD3dP5AAqEEd3NY+ECP/S/0sbQgEpjZ6T9NpnXJvqyGtvvcjAFYLu+5KLTaZY90im7mAUVGDmnDiJxeJUFZOipEAfnqXripdr+IFKCAJdbqY/15btq1kIHJkYJSQtDLRqPE3qETH+It8JwGIionmL8k9aFDU4eRp/2ee5V7L35KAHgpYknN0SBP5RLz6Ll8vBLBfIgKR7kfUBbkMlhB7Gw== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(30052699003)(23010399003)(61400799027)(82310400026)(36860700016)(56012099006)(11063799006)(10067099003)(16102099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: L+WkY0o3byl/8KJfrAmF7tCBTBUO4hQJzdKGRGkqih/F+5nUIMRFwXnOUrmzb4MaK21Mjxrgu4yiiCLCc+oKQhk85iUDqgWiPYcTUmHvkuYNep8wCUy59u7eQ+wlrIAwzA6WaGwD2zos+kw4WfaKWhOcK93phIm2tDZoro8AC2Wc8tmLrdI5IZQiuQtfeN+RXOp+tlISWPX72fyzg8km6NgNTOqzvoua5im/j1FeCKXE2bxp1M5b4wJARYXlsWazd8hx/bLR49zWgq2yfBC1emsSc2qA42SabmcxL/s6qDAF90NRg2mJd7haRYV30rCSfdFtFobDnoGDufX8irUGSS5eGuhxSywaGU5A7+Kbxnik6Nn/f1nQUaotAvFt1cqITA4UjAoMQA39zCiJYSf9KA2stE0Pl1I5EHzyvI+5+Hx7czeehX2sFuV3mQRB4Wdb X-Exchange-RoutingPolicyChecked: qWfoAnQzSxOyVzKApz7WwdiAlEMMsTXzurZ2P4yMVibEOkRGqXcMPpqzMKLGoabfIRNZeMf6UYPaUgRS5Os1V3A2+zdmTH8LeE5Dje06tQmd45+TuIAepvEtw4txMAChd0QQ+6kQ2hq7DgL1GooaHIn2pQqWGVEQkUZO3KJ+P1WCbCOsHrGlDcfsOxhv2TpczssVZ6MAM+PXOk0c8VeFDgxudbXE3PLcRnL6sc+Uf52VlF2ZCNprUYI5LzcoP1idCxQVaUBrZ4fGehKwhNROtPifcN8wTWrroOvaJ1UO3emyLjIY2KVIUkYnJp907d0A/xtClfRqS7T2Ps0OVhEjvw== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:41.9803 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3a406016-729f-4135-c99f-08dee7357b6a X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-CO1PEPF000075ED.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR19MB5591 X-Proofpoint-ORIG-GUID: UWK_s4qObVoWNoGBz_59BArDNbKlc7XK X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfX6Ne2upgoOVKv +ZgG+8Blaw0tH/D+85XPu/8xKm9v1dIOjLZ67Oop2o9SeBWgdr0+fPlTj5el9binV3PNSldkd/a IOUvwIVDIcY/p8o+x940LgPUR0rkX7Q= X-Proofpoint-GUID: UWK_s4qObVoWNoGBz_59BArDNbKlc7XK X-Authority-Analysis: v=2.4 cv=BdjoFLt2 c=1 sm=1 tr=0 ts=6a5f8419 cx=c_pps a=FaoZe42t3hJ4J9xi/30H+Q==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=KfkQE9S9VqCBgivYGm0O:22 a=w1d2syhTAAAA:8 a=z9ncmWt8M9pI67tEN-gA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1NCBTYWx0ZWRfX0e1nFDKOX/O9 RDtELNw8yz5ae61M0AD6n/5uQjjbTFLoIGAlU7itZ08jV9d2U2WdFi1A9TkO7j6NINyIrEkCAvc mr3BeWOYgEME5V6xS60/APnFn+KHDoMPl1KkxEy4Yc/ZOkhQQRTq7G2/EKsMSR5RhY+yrMgAXol bdkbqFX1niWGPbDunSQ5TJv2vru8fcIRYQ2DG4MJokt5j9tZGyla4JcBcsWl8r3mwfH7mCdqa4X bg6N4WVUbSxya3Se48QS61gr6l+T/uuI0iRW2I6u/Ukqr91tR8sdFtbfviQGPoYWrs3fuDl7rVA 8pPI3xsQ5Y4ilhkFpdByd5t3zzh2G/QMFNZ58AkgqbzFvSNgTrcIuf9Gk7a9mTd1EUMNhMal68C Ja9xwBs0OBajChpgNbVbinfpRX+P8XrrluOKrPl54wx0xwKdvL81aZBViPQ0am83NQZC1nONuML VkR3xVl1udXJLPfcydw== X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" A card level fixup_controls callback was added in: commit df4d27b19b89 ("ASoC: Introduce 'fixup_controls' card method") This allowed the machine driver to take actions after all the card controls have been added. However, there are times when a codec driver would also want to do things like obtain references to controls for later use, which require all the controls to be present. Add a component level fixup_controls callback, echoing the card level option. Signed-off-by: Charles Keepax --- No changes since v3. include/sound/soc-component.h | 2 ++ sound/soc/soc-component.c | 10 ++++++++++ sound/soc/soc-core.c | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/include/sound/soc-component.h b/include/sound/soc-component.h index aa423865dbe7c..4b7d7954953db 100644 --- a/include/sound/soc-component.h +++ b/include/sound/soc-component.h @@ -78,6 +78,7 @@ struct snd_soc_component_driver { unsigned int num_dapm_routes; =20 int (*probe)(struct snd_soc_component *component); + int (*fixup_controls)(struct snd_soc_component *component); void (*remove)(struct snd_soc_component *component); int (*suspend)(struct snd_soc_component *component); int (*resume)(struct snd_soc_component *component); @@ -380,6 +381,7 @@ void snd_soc_component_suspend(struct snd_soc_component= *component); void snd_soc_component_resume(struct snd_soc_component *component); int snd_soc_component_is_suspended(struct snd_soc_component *component); int snd_soc_component_probe(struct snd_soc_component *component); +int snd_soc_component_fixup_controls(struct snd_soc_component *component); void snd_soc_component_remove(struct snd_soc_component *component); int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component, struct device_node *ep); diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c index 21492d15833f7..2ce24513fac5d 100644 --- a/sound/soc/soc-component.c +++ b/sound/soc/soc-component.c @@ -310,6 +310,16 @@ int snd_soc_component_probe(struct snd_soc_component *= component) return soc_component_ret(component, ret); } =20 +int snd_soc_component_fixup_controls(struct snd_soc_component *component) +{ + int ret =3D 0; + + if (component->driver->fixup_controls) + ret =3D component->driver->fixup_controls(component); + + return soc_component_ret(component, ret); +} + void snd_soc_component_remove(struct snd_soc_component *component) { if (component->driver->remove) diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 7817beea5b3bc..44f9bb4473f55 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2162,6 +2162,11 @@ static int snd_soc_bind_card(struct snd_soc_card *ca= rd) goto probe_end; =20 snd_soc_dapm_new_widgets(card); + for_each_card_components(card, component) { + ret =3D snd_soc_component_fixup_controls(component); + if (ret < 0) + goto probe_end; + } snd_soc_card_fixup_controls(card); =20 ret =3D snd_card_register(card->snd_card); --=20 2.47.3 From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) (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 894CF3A4F23; Tue, 21 Jul 2026 14:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.149.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644629; cv=fail; b=RLQO4rCO9fJ67t7DmUojBwQ0xyRUqirRlLmzVKGCDaV5HwIP0vkCAD5NvrYDA2zqOkA5MuaMbtvyp2LtRR/AJ9gYm4orHvhm4jPb8RtIZ7+y+bg0ySh15xt+GOY7cmsUl3l4jKsoiw/wXqPGakFHHvsJCtj+mo1WGpoM49vteaw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644629; c=relaxed/simple; bh=h2g5xpWO0xU2qJmaNanx+FEDmH6vDHSR8XPnkfrVm5I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=S1PL0nfXLugkGqWkF7RfrfCWJgCB1lXQUB11Hd54PFjhEHsnSmUb5JKZq9mjsu1aaaLgIwXJN/ucBQVa/qUc7XT2kA5SK5F6N/KBa5fmeymBcYcdwT2k+dezoWZaJLuV3EQ22hDntswiBvqJczI00SVpm2dUEey8XZCOMIOUvAc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=kzrPYkaN; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=xsLeJRtU; arc=fail smtp.client-ip=67.231.149.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="kzrPYkaN"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="xsLeJRtU" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66L4kmsl1776439; Tue, 21 Jul 2026 09:36:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=A7hRsGAfWMpYU2FwyDQo5fRg99Q4jLunXHRQfXcW/b0=; b= kzrPYkaNFkzelREN7YKxVkYdNKBc1nPNaLiDkpS9yJawQoLrChHvKXy8KaAV8Bxa WaeiXILnKuCDq6MZsaXCbtISTsg3nDRty7Kr3sT2TNq5hq7MK67ZtUTdcW3TjlUo MYPyqDVxQlfX3BWwVRwROL2WM5dM6eumFGug7l6JW+z4mXkUyQaBvTLnzxGIasoW fmtsI7ihK4bNjMktpKITfem4F4chgQgyq9BnJXW5/zYofyEf/a0mJ0sCIMdn+Y7z DeYfswqPPWbcmz5CDE8oOaPHP1T0+P/2ONETROz/UwLMdNAmV6BIxAD+Qjd7ITZ0 Sq+XVl/xVIiFnkDjV1dqrw== Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazon11021111.outbound.protection.outlook.com [52.101.62.111]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4fg6vym7n7-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:36:50 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xpbD9lO7yWoKTF1aS+Wo/jEGkhw4eAasK85n/7lU1TDQqNDEF7u73o74pLfYUfXAyMvZ04cLuIQLWcOUatoQ0lvjnfHxGLfQIk0P/t3xypu2UtUmYXcrjvRYbK9SjIaI2psQA+3fqqHkHN4lXf0Pdo+ueAD+4XEj0EctmgDQIZ/TE65Ulgs+YSL28Q+aA2CapOPAGQ/IIKnV+7D5IpyMsCOfBTqfJTnGAXqjBQuxdjQvgmGk0Mz0shIBTM0iPSeo1s1+JY3d9dzd81A2/oUEdMp8LBKO7fuh4Hef8l8FVPAqvpEaizs4JyjDOdvNIVfEJ0lz87f0/XF1A3xdtq3F3g== 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=A7hRsGAfWMpYU2FwyDQo5fRg99Q4jLunXHRQfXcW/b0=; b=kwldsR/ltYav3aOcldAgM0dTDbdhoE5UQUtVAfLpT11jpfs3DG91ZAepFpcRlbqVYlA40pyyrdgu7c5Vr6nW4U6Vz4ZPTwfLmyROv7UQM3f4Ejck22OFCt3OHwS7hea7Y5dynkYaiH8CG1mCzrXn67Bv6yxp7hl63Lz4/CxqGK8Sm6yjP9aAde16n5/twc/bIW6TD/nsw6RVHR1XoMJomQ75zLYK17+CwZpKBXP+0BjNWqMBeLjpjapUejyEmn3mtZV/8T3S5PvuKUB8uQtB+xt4wrjEnJa0mOyqLJKT4B+HCO5oWs3NQkxkXcwQof43kd+Z66Sz1RVzIreqp3XCdg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=A7hRsGAfWMpYU2FwyDQo5fRg99Q4jLunXHRQfXcW/b0=; b=xsLeJRtUu3AVBkitEr+qWgXe5nCBYeIqwOPgaeZkgM4w8O6UamU6KKD3Gpa9mN02tXQoHoHhQbzPYPBT75P9XG9TeN2xD5m7NatCo8f0CHc45mSixoz9F0lEjgxUzEfkhFyTku/tbUNv7pncFwBbLYJhIOiNXpc7wwbH5gK7SMM= Received: from CH5P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:610:1ee::15) by BY3PR19MB5202.namprd19.prod.outlook.com (2603:10b6:a03:36a::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Tue, 21 Jul 2026 14:36:46 +0000 Received: from DS3PEPF000099DC.namprd04.prod.outlook.com (2603:10b6:610:1ee:cafe::a3) by CH5P222CA0001.outlook.office365.com (2603:10b6:610:1ee::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Tue, 21 Jul 2026 14:36:43 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by DS3PEPF000099DC.mail.protection.outlook.com (10.167.17.198) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:43 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id E25E0406554; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id BE5C5822554; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 6/7] ASoC: SDCA: Switch to fixup_controls callback for IRQ registration Date: Tue, 21 Jul 2026 15:36:35 +0100 Message-ID: <20260721143636.361814-7-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS3PEPF000099DC:EE_|BY3PR19MB5202:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ab55aa8-adcb-4311-090b-08dee7357c0f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|36860700016|376014|82310400026|61400799027|56012099006|11063799006|10067099003|3023799007|18002099003|22082099003|16102099003; X-Microsoft-Antispam-Message-Info: tmGksz4FhBPCwBXH705wqgs6yTVDRStAUjbUqiXGvcLeRc3QvfQUhCUgZcqKsT2hUNTeZE7duvQPPTUzZ0I8++2ft5vnblRAFfnNCHOBOnIZHmbHfFbO5tCqJdP2CzizTi7EkL3UzWUkqT8jjQ6Uc/pGypOuCHySFJXk42cYSFUUdJK9QCAAiExklCLz6KUZwnW/qC46CNhd1wLfsLxz+yjZP7pEbotbvo8KcaoC0b6GfWHc8A5lbaD00x2BGM+qvyl1rvtpnAhhtgq/uzdY9R1gohBBTE0+UgZd+24WXvAUMMGyIcLCY6aFap1ZdEpjOKhSWHgeBHMF6LcATG8L9uoTLjvWFReA3ymQqftFtYlRkLUn8vjAUy3+HuoSQtlvPh6uonSCHAJptQL+OE5mXCx++AIMEDVlE9i4k7XqDfDmHbqX3hm0Q7LuzeuwjyPVnRHS6y2OCXhRil+HanLlTj/XuvjBU0Bln0SQCB/dG1JrX0UHczuAJloFan75vmkBZU8DsIjQIgaQOaowje6pl/SKxwNgkaKtoV0IUV0s5ZIFXZcMxkPVi+j2Ee+L3HT7JEj9q2ZKIdfVr1jM3yyFZ5daYThlm8RRoTGhIHBRN5kS7VfDXoWw9dVoUv5pvVErlh/v0MrE5p+tUGKB3OgaQMrcajM2xc85OKp9oGRlv3zPMEPYgUYd8ee4XlzLhJtC9iRI6Oyx1HSIPYr9ebM2eQ== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(23010399003)(36860700016)(376014)(82310400026)(61400799027)(56012099006)(11063799006)(10067099003)(3023799007)(18002099003)(22082099003)(16102099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xrHKzNcrpLxrXYO5VzLBzxVyDLJu89tsuxaySGsAa9pBK27eD9rpoLfIAjnC0m5fDfA8at4v3lZUmE+9Z3gA1Y6PE+kABF1Kd7YD3+DhAItyQkBP6Wdc962G8zM5sAZNcXtRPciZ4GzsB1JugUrq+u/JnRPeMCNlLaGVQ8RIFohrvHZ+PkpMHRYecUEKiZfd1/o4E1DRZHJm5NRnGV2F8vC3cciljKKieU6yWgKd28vPKgZlVJhrjKBkI7pDB0JVGJbxPOLc8VV14FmMXSfwlWuw8YKtj41F3bT0stpW1yN4NaNauat+StHa5/DyLP6htDV0Ig+V5BSbfFTzHYUJ5zDwe45ia5JMiD7PVp7bO9jFAxHaQplulqSNLVZNnoLEm5NknzUppC1ZB5J0ZAp9++2mGtb10+yC861lAGpj6PhA5hGBGiw1xUHjpTao0EGD X-Exchange-RoutingPolicyChecked: e6PAtoVQz61xKwFirXjY0ZCvTQZNNTyIzchyjNMpRCSRgJaKAwTLPVHclE7/yniSslo3ToayDJrwFsA1c/aiueJmUJVR6t+ARC5ha6SYrrz6ReaZ1DPiso9/ktSta2MPKA0h92CVV3k9BUnOpbiZmgU/dwXN0curHgjwfu148O4oWPL2Oz/pvVAwL6yBVNr9QVKvjb6GUJ1WvP5w5mZFiI9E+Ms5LBoKoUcAiuzWShtYcEpNz3pI+GsX34wWjuomvbf5xpJ8HWomWiXghB/8z2wbEVYVKdhLG1GkmKrjglDYEnTIDSIE/5y3qCyKm/JkcR5SKrAyubZZsnmIlvaALw== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:43.1068 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2ab55aa8-adcb-4311-090b-08dee7357c0f X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-DS3PEPF000099DC.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY3PR19MB5202 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1MyBTYWx0ZWRfX2rJPvItYRvqa 806ieHBInihpSAeroebx5HbwCua87vwGtK65W56NmvHT7VL/9dOzCH402n0DHVtRC7PB3YfCCiy OfFmITctNuLnuYSRzsbEhupVVQ0KoHk= X-Authority-Analysis: v=2.4 cv=f5l4wuyM c=1 sm=1 tr=0 ts=6a5f8402 cx=c_pps a=pLVGl/zQNnluPJXkQhez9g==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=Dj2-6B8FqX4mGL0U3gbX:22 a=w1d2syhTAAAA:8 a=cTvsH-JCG-SXLsoZKIAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1MyBTYWx0ZWRfXydS/t5NnlF+h TYAjyX9tW14xcJ2lb3FbRnBlWJ3JM5gxnyUtz9dAw6WKe7Oy5E182gebkcVxc3+Nw0CIwvmqWpE OTfC+ONE1fmJlUeFiu9m/g+uNgosGJBkGyaTSAstZdPbnCYBBCkflxscidkXsFmCzCe1Okl9+QW nE2jewZVmloFJG+2n13c4Hpdj02uhl8/FtGRtjGWWLww2PMAsrS+AMKfjnsWA24u5a5KDyaYiqJ BDvsurx7w0pVa4l7QhtMox68e4lHR+jahFwLcfgIiX/RrN8UhhXdqkg8mCCmqZ1dXcmf55RpkXn Kxc+M7CGcqOIweWM3lVSa7uJ6++tgj6V6GaKLaYZkXwQeRUeMoC8szOtEL4yhO1YCRnis97x/Qk efCdiBJJ9o+3QHdI7aTp+HQL6o92KJHzzsxpx8A+zO5AEazkq0sIK2jqK+C6NCrta3D3uOISsZs mTlDB4R/BVP+VY+bE6Q== X-Proofpoint-ORIG-GUID: fI-yEp9HrR8dP8UOizNQ3Gf6cFJIBbZT X-Proofpoint-GUID: fI-yEp9HrR8dP8UOizNQ3Gf6cFJIBbZT X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Currently there are some race conditions around the boot of SDCA jack detection. The core creates DAPM widgets/routes quite a long time before it creates the associated ALSA control, and the jack detection IRQ is currently registered in component probe. At the time of component probe, the DAPM widgets exist, shortly after this the DAPM routes are added. At the time the DAPM routes are added the register value for the control is checked and the appropriate path is connected. The existing handling in the SDCA jack IRQ handles the case the control doesn't exist and updates the registers directly, which works until the DAPM routes are added. After the routes are added the DAPM graph has already set connected on a particular DAPM path, which will not be updated until an IRQ is received when the control is present. Thus those updates are usually not reflected in the resulting DAPM graph which can lead to the audio path being erroneously powered on/off. Switch to the new fixup_controls callback to register the IRQs, this is guaranteed to run after all the controls have been created. Which means we can avoid the aforementioned race condition and as a bonus no longer need to concern ourselves with a case where the IRQ handler runs and the ALSA control is unavailable. Signed-off-by: Charles Keepax --- Changes since v3: - Switch to sdca_irq_cleanup_late was done in the patch that added it. sound/soc/sdca/sdca_class_function.c | 4 +-- sound/soc/sdca/sdca_jack.c | 44 ++++++++++++---------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/sound/soc/sdca/sdca_class_function.c b/sound/soc/sdca/sdca_cla= ss_function.c index 5ae6c727c796d..2fb2b043c979c 100644 --- a/sound/soc/sdca/sdca_class_function.c +++ b/sound/soc/sdca/sdca_class_function.c @@ -191,7 +191,7 @@ static const struct snd_soc_dai_ops class_function_sdw_= ops =3D { .hw_free =3D class_function_sdw_remove_peripheral, }; =20 -static int class_function_component_probe(struct snd_soc_component *compon= ent) +static int class_function_component_fixup_controls(struct snd_soc_componen= t *component) { struct class_function_drv *drv =3D snd_soc_component_get_drvdata(componen= t); struct sdca_class_drv *core =3D drv->core; @@ -217,7 +217,7 @@ static int class_function_set_jack(struct snd_soc_compo= nent *component, } =20 static const struct snd_soc_component_driver class_function_component_drv = =3D { - .probe =3D class_function_component_probe, + .fixup_controls =3D class_function_component_fixup_controls, .remove =3D class_function_component_remove, .endianness =3D 1, }; diff --git a/sound/soc/sdca/sdca_jack.c b/sound/soc/sdca/sdca_jack.c index ffa8709649248..3c84d17244a28 100644 --- a/sound/soc/sdca/sdca_jack.c +++ b/sound/soc/sdca/sdca_jack.c @@ -41,6 +41,7 @@ int sdca_jack_process(struct sdca_interrupt *interrupt) struct jack_state *state =3D interrupt->priv; struct snd_kcontrol *kctl =3D state->kctl; struct snd_ctl_elem_value *ucontrol __free(kfree) =3D NULL; + struct soc_enum *soc_enum; unsigned int reg, val; int ret; =20 @@ -55,10 +56,12 @@ int sdca_jack_process(struct sdca_interrupt *interrupt) return -ENOMEM; =20 kctl =3D snd_soc_component_get_kcontrol(component, name); - if (!kctl) - dev_dbg(dev, "control not found: %s\n", name); - else - state->kctl =3D kctl; + if (!kctl) { + dev_err(dev, "control not found: %s\n", name); + return -ENODEV; + } + + state->kctl =3D kctl; } =20 reg =3D SDW_SDCA_CTL(interrupt->function->desc->adr, interrupt->entity->i= d, @@ -96,30 +99,21 @@ int sdca_jack_process(struct sdca_interrupt *interrupt) =20 dev_dbg(dev, "%s: %#x\n", interrupt->name, val); =20 - if (kctl) { - struct soc_enum *soc_enum =3D (struct soc_enum *)kctl->private_value; - - ucontrol =3D kzalloc_obj(*ucontrol); - if (!ucontrol) - return -ENOMEM; - - ucontrol->value.enumerated.item[0] =3D snd_soc_enum_val_to_item(soc_enum= , val); + ucontrol =3D kzalloc_obj(*ucontrol); + if (!ucontrol) + return -ENOMEM; =20 - ret =3D snd_soc_dapm_put_enum_double(kctl, ucontrol); - if (ret < 0) { - dev_err(dev, "failed to update selected mode: %d\n", ret); - return ret; - } + soc_enum =3D (struct soc_enum *)kctl->private_value; + ucontrol->value.enumerated.item[0] =3D snd_soc_enum_val_to_item(soc_enum,= val); =20 - snd_ctl_notify(card->snd_card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id); - } else { - ret =3D regmap_write(interrupt->function_regmap, reg, val); - if (ret) { - dev_err(dev, "failed to write selected mode: %d\n", ret); - return ret; - } + ret =3D snd_soc_dapm_put_enum_double(kctl, ucontrol); + if (ret < 0) { + dev_err(dev, "failed to update selected mode: %d\n", ret); + return ret; } =20 + snd_ctl_notify(card->snd_card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id); + return sdca_jack_report(interrupt); } EXPORT_SYMBOL_NS_GPL(sdca_jack_process, "SND_SOC_SDCA"); @@ -201,7 +195,7 @@ int sdca_jack_set_jack(struct sdca_interrupt_info *info= , struct snd_soc_jack *ja struct sdca_control_range *range; struct jack_state *jack_state; =20 - if (!interrupt->irq) + if (!interrupt->dev) continue; =20 switch (SDCA_CTL_TYPE(entity->type, control->sel)) { --=20 2.47.3 From nobody Sat Jul 25 00:41:54 2026 Received: from mx0b-001ae601.pphosted.com (mx0a-001ae601.pphosted.com [67.231.149.25]) (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 5EB953EC6B9; Tue, 21 Jul 2026 14:37:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.149.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644629; cv=fail; b=qDjn4VoRinQ5MXhgN6p2YZDeop8aSFh6Q7ihpwdYt+1RVAICecv/T9nwG3CAHNr3kgBL6kiDxzZrBbVdaFAjspMho1PuK/Bhizus0jronHMiBqE7SqbJO5KGmKG6dTv+MAzQdkHuQWfNQGc0snmDHxHasxCcsilQbWssEyFfVu8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784644629; c=relaxed/simple; bh=lYtve7JwYhjQT60sY3DhPM16mn0tlWCdyZ5qTu71b5A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aCSxJfFn904z41U2HGsiJrVYzKISaXL7NAPwUCN3XZa8hJpS0BH2C1zNfOcPUgWjE/MiS3xdHF9DMLTQIN4sHYJr4SsbZ42wRbuhWfejYpX6fUUfI/G3h/sAUvuCDfGUfapF8nTlJyAOoslA1fUcUYlvv/9VRkwDEbCJRK2Ym/U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com; spf=pass smtp.mailfrom=opensource.cirrus.com; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b=WfD85Ddk; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=coZm4ZKw; arc=fail smtp.client-ip=67.231.149.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=opensource.cirrus.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cirrus.com header.i=@cirrus.com header.b="WfD85Ddk"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="coZm4ZKw" Received: from pps.filterd (m0077473.ppops.net [127.0.0.1]) by mx0a-001ae601.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66L5J3dD1828547; Tue, 21 Jul 2026 09:36:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= PODMain02222019; bh=qp8QiXiUD4MGh4mViI2FEmFzoqRM/egn+1UXCJZgbRk=; b= WfD85DdkoVw/042pHPdfl7n+mn2uz2giK4ez2Gee2Pnm6gQLxci+twg9WxeFBQbG I3rYI8/LAR3Q3RgfZ4TnJsRinte/HU5hUa2Aq9mvivuQjrok+3x/OfNzIDNbTlvs gGfWUJVCPuR9d+Q9DQFNbg03pGkrhq0FxWR67hvhzuKEmSOphIQdQpU1Wma7Wf2D lgRM9BAASsylvWUtwuQO9MTsS1fsd+ses6MPTltDyq8DtWwZl7yZGzdMiAcSpugr b/zuws5qN3jRITIavUc22Al9ZCgNvuWcfsO63OSu2Y6FB+Ro6SMngfeQ0sfm20sV QIOlqyuAYBoXnXFX6Z1KxQ== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020118.outbound.protection.outlook.com [40.93.198.118]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4fg6vym7n6-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 21 Jul 2026 09:36:50 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tXcC/QE+/Y9gjR3y514oBDq2VupgyLEQAZrkLo2j3y3PHuRaVGgS+nWnuyhjKVEhEYt99PzI6YzJK7xH7M0eID905SWCQ/k0Gjq0lml5tDvCJYhx44sql4UaxL1EDEEORZ7G0KeFyN0BJv/Hu8js045YrOiMQe6VuOpglYhniSYNreRADlnfsLBPQUNUVDfI418lj+/veT4AkL5lbuQc9GhSEj1avyBuiCztBkIfmME8H1zdU4SterB0bW9Y2ypP6bhtiFNvmKPuECONPbpVNDbJFJUWKw8vhtW9kAqcqQHgRr/u4wdE92vqfq1ZQAPlhnFAcj5d47yyHU/5Vvvb7A== 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=qp8QiXiUD4MGh4mViI2FEmFzoqRM/egn+1UXCJZgbRk=; b=QbQBYE2LFkbqR2jPEjKF4X2OFRBmLEnM4RxJnB1U3c7AglkbjSNIOcSaKZa4RjKHFACwKbkztQVGlBOyPKyz84Uk6zfxiwUz1CYg9ULIbD1f0RVBP9w7ZvsWmCFfPoB9UiwmTU4Oi7N1mQZ3JYAOMjvhFks70VyFTHp5y998TW/1ocWw44seZfcC4oPfnUp9KeoeE/nqEoCyoDgIMvXeKhka8NLukfa2SUrLeXj7zX5MSGm3B4gejSQ7cUMg7StUgTuTg9aRiNEvjoRPCDcqb24ZBZPLYYyd70OKmmHBlWcQd5YUH8FKzE5vRc0Gb950+VHynaTskn49+SDvDIaD1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 84.19.233.75) smtp.rcpttodomain=cirrus.com smtp.mailfrom=opensource.cirrus.com; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=opensource.cirrus.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus4.onmicrosoft.com; s=selector2-cirrus4-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qp8QiXiUD4MGh4mViI2FEmFzoqRM/egn+1UXCJZgbRk=; b=coZm4ZKwgKfQbriaIqqv6KuO1jZKgQPR2whUYRvvFODdHPPjBXRLoIgqthZlVZrO+f66fN8sQYr7GFGWq3qwqXUTshDCtJATwRa6boTbpjGk+bAXX0e4G+bEzvOFDAO4pjb0JIwISpNl4kZOuQGt0A80WNOzpXBlwXfHtp2ShQA= Received: from MN0PR03CA0004.namprd03.prod.outlook.com (2603:10b6:208:52f::10) by LV8PR19MB8496.namprd19.prod.outlook.com (2603:10b6:408:200::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.18; Tue, 21 Jul 2026 14:36:43 +0000 Received: from BN1PEPF0000468D.namprd05.prod.outlook.com (2603:10b6:208:52f:cafe::69) by MN0PR03CA0004.outlook.office365.com (2603:10b6:208:52f::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Tue, 21 Jul 2026 14:36:43 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 84.19.233.75) smtp.mailfrom=opensource.cirrus.com; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=opensource.cirrus.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning opensource.cirrus.com discourages use of 84.19.233.75 as permitted sender) Received: from edirelay1.ad.cirrus.com (84.19.233.75) by BN1PEPF0000468D.mail.protection.outlook.com (10.167.243.138) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Tue, 21 Jul 2026 14:36:43 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id E47C8406558; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) Received: from ediswws07.ad.cirrus.com (ediswws07.ad.cirrus.com [198.90.208.12]) by ediswmail9.ad.cirrus.com (Postfix) with ESMTPSA id C1504822555; Tue, 21 Jul 2026 14:36:39 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, shumingf@realtek.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH v4 7/7] ASoC: SDCA: Move kcontrol search out of IRQ Date: Tue, 21 Jul 2026 15:36:36 +0100 Message-ID: <20260721143636.361814-8-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> References: <20260721143636.361814-1-ckeepax@opensource.cirrus.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN1PEPF0000468D:EE_|LV8PR19MB8496:EE_ X-MS-Office365-Filtering-Correlation-Id: ff806e71-f149-49a2-dbfc-08dee7357c15 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|36860700016|82310400026|61400799027|376014|56012099006|11063799006|10067099003|22082099003|18002099003|16102099003; X-Microsoft-Antispam-Message-Info: eoXOwmvyfF+5pkbGvOG74CN8i6059id9tP9J5KihS+d23YDSYfqRGpcXbL4zYUb4ddQA3dAxx/4kjhz11clFtwM2+wzf6ZiCaxt/xFLGUgA+NLap9aRbGe9rf20r+N7y2dll4W7Sd+kbyZbhZscg2jroW+C0t9dfkRU/61xM5pAfxw0yArTbhfWiMsbBbl+psAN6Pm/fo7RoNolycyGN9RIjjsRmYm9ZWFpBXdFfbIXAC8Ub+Isucb/rm8uNZe/FnDiy0yEKsG0pso8KM2V9k/Yes30stESrHgih/2fl65dnLy8Qz0Sykbq9w83KfGOT0KoVs03FQVx2cNek8/seFIoiU7vAUs+HFtKgWUQ3YRyXN3WN+wMoVNGGZhTkz9vk5/UbDrdKkKnbzAXjMBsMo2xuWGeTGFRCO6MfXDN3mJbdSXiYGACzRu5sFIb9SLzP/KBMEdQXCQ0UcqlPxdmVQWqhAqe8hVgwBBLui7PgzfTZtVLCh2jMplKfxwusOFBWnx85YT9CW5Cs1/xQWOYQw4W0xKX2JVAC5qVhFqmJMSz+wooL9JyES5i6UlSJpmXIHS6unKggSNmUjS2hUT2Dnjwsqpy+7ShEgylk/DZMpkZCjOZdCdrzcf/q80eYeTXjKFNC37xLau2N/ky4pP8W9XJaI5W4nkCknEacH5w4+R3I41dXACk4+cxZbCTSRqMBcig6AXaF86sEZh4IRXrRpA== X-Forefront-Antispam-Report: CIP:84.19.233.75;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:edirelay1.ad.cirrus.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(23010399003)(36860700016)(82310400026)(61400799027)(376014)(56012099006)(11063799006)(10067099003)(22082099003)(18002099003)(16102099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LN0w3cqE+i+fDZk7Er6eWg+fX/CPvWMJpYIZpbdSbuajCpHFsuAk0C7mwCcqiXXN+mZWxpmLdULjL8vtQrwnaWcz/B7W9/LJ3y+rnGK75ui9GjwZxA+0LHI/fMyawtBcV2u/FEj9ckDwz3DFjx9h3oRxl8El7WZa8CtM3BhVoSTbyGyPb6v+QBvo/VPQyEBHNezr1qk7Eip5AUMkdHXl/HFIkBh51gHl65LmRYPmiDbsWGgM6NB+O47ez8Hhse9ZCZzz2UnmgQFwfEOLubC+lVDmN0N1Px0x1c8Zy/0P0gzH/ltKQVfp0/01pjW9dX/KnA/w+ZX/kWvd4WoSRN2DvtDMQqzXzypRXXrEVKS9JYt4/EeFPqUvsFSaj2/+8qs9fnTEqtoim1mz76oGHZEN+Qd0iQ9lBhAkOJvyeJ/7wP7W0KHGECgxuZ/ho1Ra64/m X-Exchange-RoutingPolicyChecked: QxYchnCtD5n75B21zRpIANAlMOHZ/uev6Tk/NZdSFyMauKYKnAqgg5yWPwlPRQbIv2fSs94EeRPBavYOQAnfSZhf9A7Jw79M4FCZDMm1dDIrmHLLCEDD+xnua3jUn7HCOE2zpeKc75JHWMnmwQaCI8O2AqomURiQn3Kmm/uX0xT2lxCgw01a6dVBABpiEUsMX/G/CzIP/rCWNrlE7YHrjqMJSpD/+DcpTBQr9WBlmnhUnif5QkLngG2h0q/hgrY97buNX2GkicffAHjhHAN3YAv780ZxhgYpRr0uxY7davyQ7lRf64epfmcp3oHMwYgMpBvCXSmWZmYnCEPXGgb1Zw== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 14:36:43.2150 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ff806e71-f149-49a2-dbfc-08dee7357c15 X-MS-Exchange-CrossTenant-Id: bec09025-e5bc-40d1-a355-8e955c307de8 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bec09025-e5bc-40d1-a355-8e955c307de8;Ip=[84.19.233.75];Helo=[edirelay1.ad.cirrus.com] X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TreatMessagesAsInternal-BN1PEPF0000468D.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR19MB8496 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1MyBTYWx0ZWRfX/L4guJoDfwlU MOpoT7uHEtRiVGFyvbBjCwT1xCzBqOkn6gB5wIyGdZ6dWQ7x8U2CiiyY5bS9/g+0wA/aIHZB+R+ ZGY1pNbjrFmoey56b74T0y6Brhaztjc= X-Authority-Analysis: v=2.4 cv=f5l4wuyM c=1 sm=1 tr=0 ts=6a5f8402 cx=c_pps a=LryC7IEqKcSdoWktnkYnkA==:117 a=h1hSm8JtM9GN1ddwPAif2w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=RAioF0-LDSMA:10 a=s63m1ICgrNkA:10 a=RWc_ulEos4gA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iX4cTi3TZMoOKdANLEfx:22 a=Dj2-6B8FqX4mGL0U3gbX:22 a=w1d2syhTAAAA:8 a=37KK_tL0TpI7OPApReIA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1MyBTYWx0ZWRfXxMe2hM+d7FFK UKD+HV2ySpxAQX2SuKSgTSFGRdFeLUTjlbHZGL/zEmbdnACADnhwz9aIQ5FSySD+0SakWZ0AExI tmRFgmaVAbyCXCNYvn2WddB+ULKvYRsf16/iEUgMK2Ik1BntGk+Z2/2JEl02uxzUUdoM96g+Y7n THXw2DG/xwqs8Xl5OHUU3DpgSxCFaYAiZT81gp5UVOY/Odk4ZW7M36JryCQHf8mDkoGPKbfwDVY FVjQqB/HRe95T4QJybmEfbYF21fy2YAzpRwd7/p2u2M0fOTqQdEaBOqqcfriDDJXrVGp2g2V2Xi ZZASjTLGWDrcqzOH4xcZmnNtyDwcSDYpwCKhJsuWrM4Zj0f5Uw43meU/dToTWW9WAn3XCMYA+Eq 9UZOd7uISiQPLLLODSEwWl3fbHemxvoltvbbwfCl44ecsW3B54S5DjXB/cWP/i5jSkhL2T2gEUs nRJMBm624yjqmrQ3JgA== X-Proofpoint-ORIG-GUID: GAlNzAV4Rxfm8FBfz3aojyL7N48uPBGU X-Proofpoint-GUID: GAlNzAV4Rxfm8FBfz3aojyL7N48uPBGU X-Proofpoint-Spam-Reason: safe Content-Type: text/plain; charset="utf-8" Now that the IRQs are always registered after all the ALSA controls are created it is possible to search for the control at the point the IRQ is requested. Move the control search out of the IRQ handler and do it at IRQ request time. This also fixes a potential issue when the card was torn down and reprobed without destroying the codec device, the kctl pointer stored by the IRQ handler would not be updated to the new control on the second probe. Signed-off-by: Charles Keepax --- New since v3. include/sound/sdca_jack.h | 1 + sound/soc/sdca/sdca_interrupts.c | 12 +++++++++ sound/soc/sdca/sdca_jack.c | 43 +++++++++++++++++++------------- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/include/sound/sdca_jack.h b/include/sound/sdca_jack.h index 59de40b7d7d01..871ba2d8146a3 100644 --- a/include/sound/sdca_jack.h +++ b/include/sound/sdca_jack.h @@ -28,6 +28,7 @@ struct jack_state { }; =20 int sdca_jack_alloc_state(struct sdca_interrupt *interrupt); +int sdca_jack_init_state(struct sdca_interrupt *interrupt); void sdca_jack_free_state(struct sdca_interrupt *interrupt); =20 int sdca_jack_process(struct sdca_interrupt *interrupt); diff --git a/sound/soc/sdca/sdca_interrupts.c b/sound/soc/sdca/sdca_interru= pts.c index 6f0d8c0fe622d..42fbd3af8a754 100644 --- a/sound/soc/sdca/sdca_interrupts.c +++ b/sound/soc/sdca/sdca_interrupts.c @@ -521,6 +521,8 @@ int sdca_irq_populate(struct sdca_function_data *functi= on, =20 for (i =3D 0; i < SDCA_MAX_INTERRUPTS; i++) { struct sdca_interrupt *interrupt =3D &info->irqs[i]; + struct sdca_control *control =3D interrupt->control; + struct sdca_entity *entity =3D interrupt->entity; int irq; =20 if (interrupt->function !=3D function || interrupt->irq) @@ -528,6 +530,16 @@ int sdca_irq_populate(struct sdca_function_data *funct= ion, =20 interrupt->component =3D component; =20 + switch (SDCA_CTL_TYPE(entity->type, control->sel)) { + case SDCA_CTL_TYPE_S(GE, DETECTED_MODE): + ret =3D sdca_jack_init_state(interrupt); + if (ret) + return ret; + break; + default: + break; + } + irq =3D interrupt->control->interrupt_position; ret =3D sdca_irq_request_locked(dev, info, irq, interrupt->name, interrupt->handler, interrupt); diff --git a/sound/soc/sdca/sdca_jack.c b/sound/soc/sdca/sdca_jack.c index 3c84d17244a28..73f8067906a90 100644 --- a/sound/soc/sdca/sdca_jack.c +++ b/sound/soc/sdca/sdca_jack.c @@ -47,23 +47,6 @@ int sdca_jack_process(struct sdca_interrupt *interrupt) =20 guard(rwsem_write)(rwsem); =20 - if (!kctl) { - const char *name __free(kfree) =3D kasprintf(GFP_KERNEL, "%s %s", - interrupt->entity->label, - SDCA_CTL_SELECTED_MODE_NAME); - - if (!name) - return -ENOMEM; - - kctl =3D snd_soc_component_get_kcontrol(component, name); - if (!kctl) { - dev_err(dev, "control not found: %s\n", name); - return -ENODEV; - } - - state->kctl =3D kctl; - } - reg =3D SDW_SDCA_CTL(interrupt->function->desc->adr, interrupt->entity->i= d, interrupt->control->sel, 0); =20 @@ -148,6 +131,32 @@ void sdca_jack_free_state(struct sdca_interrupt *inter= rupt) } EXPORT_SYMBOL_NS_GPL(sdca_jack_free_state, "SND_SOC_SDCA"); =20 +/** + * sdca_jack_init_state - Initialise transient state for a jack interrupt + * @interrupt: SDCA interrupt structure. + * + * Return: Zero on success or a negative error code. + */ +int sdca_jack_init_state(struct sdca_interrupt *interrupt) +{ + struct jack_state *jack_state =3D interrupt->priv; + const char *name __free(kfree) =3D kasprintf(GFP_KERNEL, "%s %s", + interrupt->entity->label, + SDCA_CTL_SELECTED_MODE_NAME); + + if (!name) + return -ENOMEM; + + jack_state->kctl =3D snd_soc_component_get_kcontrol(interrupt->component,= name); + if (!jack_state->kctl) { + dev_err(interrupt->dev, "control not found: %s\n", name); + return -ENODEV; + } + + return 0; +} +EXPORT_SYMBOL_NS_GPL(sdca_jack_init_state, "SND_SOC_SDCA"); + static int type_get_mask(enum sdca_terminal_type type) { switch (type) { --=20 2.47.3