From nobody Sat Jul 25 19:28:28 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 864E747D929; Tue, 14 Jul 2026 14:18:14 +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=1784038696; cv=fail; b=Z2UBzuFUmXKELljNpGsWYj0E3mrQIlAE3ERTSoJJQ5WQsj/8NIRWrt8QAlejh7EeF3NFjlyIgL4Dceh4myEWjz3GH9/8N0Qraqg/AQwiiVpaqvR1ohwwBd2MS+b2+v5bSJdUYw4MAZyEG4PrDx76BUm5WqgXUSQvpJotS+rrLl4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784038696; c=relaxed/simple; bh=QuQg0B6B742ePX5aCeFxmucn3eRTK3JTWVtGbFffONE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OPGsjc6/fG7XjrW5dmQDUOV6yEEL3fFtGzorw3UQBpbWBAHX0ww0lhiSh2OjfA8KpZi3iQ5IMQlih8fkJlEbDrzjlhDbUseMeiz7cEUDZRBv0OmAIgPXHW3y73W3EC4EXjp79vGVIqdsuosXM8Yp/k8kSwshwOhvAZRj8ctSkqA= 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=K+tlLIFW; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=AwmAmrNz; 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="K+tlLIFW"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="AwmAmrNz" 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 66E5AsA12182543; Tue, 14 Jul 2026 09:18:02 -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=DwiSmy0GC5CiFACcFPb9L4FoVykbhTd+qWNXNy7kScE=; b= K+tlLIFW7hOcF4aCUSpZANXYefh4xz/eoOQYxk2UQwG8uVpdhu0yLPgqgkd4a/qR zdLaiRtKc5AOKc32GJCQlFZsAMlZ2an4gike6cp4UW9ZcuGKOii1EOJ1WDSuBDdn q86oFF69+hi8aOzU0OgQKEVYew+72DTF1BkQX+UyTfTkURHRn2DWhR1BzD1T2Rd+ WLIS+lHhopMZ7WHvik0qvkxzLpPPGNtHIzAKbKCbwLX3GBPSyjl0O3Xddxt14blM NsA/xbzycMdGeQnEYq975e+TxrwB0pVrVNTbVhj08ZumrBuwI29j9YvW8OpHihr6 Kkf2tkyDmx4uTMAqPCe9vQ== Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11021104.outbound.protection.outlook.com [52.101.57.104]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4fbk7vux8x-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 14 Jul 2026 09:18:02 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oCGsU4xZ45GwfpM49j3Ra5gvse1M07F9Nx/mG0QIoZ+SxHvZgHbAM70YlOiPWfE62Birf1fRwEKfht1uuCEJwjmtX0JDs7bGp9dJbRXJlDy/5YtOP7+RA5hRxBWMVYNN6V1Zc9ZWopashv7r0c9Wx7MydQx1QKSdGkhIZACUGOIHh9REqhXsdh6YWhiPd4BK6do2/0vMH1QIDsWD0YKGota5lr2+VWA48suaQJCYKS7tvtQAaSriOnbLVjLi68Fp7raiom24T4Rj5TdZ2K7ogTfFdjL7AspbgqGnyqfROy9+WJ1NyoBFBhfW95kBez01EmfoRTmZhROuAmRKALzu+g== 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=DwiSmy0GC5CiFACcFPb9L4FoVykbhTd+qWNXNy7kScE=; b=Naw3wz1bSnduv3Rdy9C/O3YH+/WBQbi/hBknB5IyFZwPgTUj30r8t4E3tRVXyRrMI0YKfSKrZTD0WqbKMKr9/PbkEp3xM60RzpKeA8EKMVWGSDDP57n8zg64IHSuUeFE+MGEXaQLTbvCPA7Nuc9n12sq9L82Nq34RwGymL27CGZAS4KosodvVaiu8+HOtWBp7ZRIcLyKUwvDtuKi2f7+CD+hMi1vujne5IdbF9l0JSRTGZ/NWVAVDU4BYqxFl036SvfyHN3fW/wb5B/BWTgQG7TKAtFyTaBqXWxtILMbn3B8oW1mvm4fAUjGcP6nVFFaZ1Wtxri8Xu+ov+wKksfsrw== 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=DwiSmy0GC5CiFACcFPb9L4FoVykbhTd+qWNXNy7kScE=; b=AwmAmrNzR1G+9OgeNGOQVA3UCIWgDHkLu3PY7uHK31RSsIkLp+FI+CCnGeOJj0+bhp/xfCW306zkEB28bT5ob1Yit4iX4t+SaEvRejEoqj6++PK9A2jjg6sl62Uw9aUcFNgQJ9Z1GMAaFcRTZv80OqiSqY4Goha7+aqig2kCx6g= Received: from CH2PR03CA0005.namprd03.prod.outlook.com (2603:10b6:610:59::15) by LV3PR19MB8558.namprd19.prod.outlook.com (2603:10b6:408:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Tue, 14 Jul 2026 14:17:58 +0000 Received: from CH3PEPF0000000E.namprd04.prod.outlook.com (2603:10b6:610:59:cafe::7a) by CH2PR03CA0005.outlook.office365.com (2603:10b6:610:59::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.10 via Frontend Transport; Tue, 14 Jul 2026 14:17:58 +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 CH3PEPF0000000E.mail.protection.outlook.com (10.167.244.42) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.9 via Frontend Transport; Tue, 14 Jul 2026 14:17:57 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id DA864406543; Tue, 14 Jul 2026 14:17:56 +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 BCD7982026C; Tue, 14 Jul 2026 14:17:56 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH 1/3] ASoC: Add a component fixup_controls callback Date: Tue, 14 Jul 2026 15:17:51 +0100 Message-ID: <20260714141753.897254-2-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260714141753.897254-1-ckeepax@opensource.cirrus.com> References: <20260714141753.897254-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: CH3PEPF0000000E:EE_|LV3PR19MB8558:EE_ X-MS-Office365-Filtering-Correlation-Id: d2a05ba0-1625-4d90-c20c-08dee1b2b470 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|36860700016|376014|61400799027|30052699003|82310400026|16102099003|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: CIW0DK64oTkY2UXxXMizx4S8XYBEB/CIAhUvpwQfLYlXvGBwyKCj9hOwXs/E6YAd90lxXUPtyYCqL8ZFnaeTF1kyaZZUw1hRMj6HX9i0WRKQbn7rs5HLr+1I16GwgIDf791RxiZUER+J4Ctf9AfNbQ0SzWZXhVz3SKORR37lxM23PqEjQGZpY4gYwi1dX0I8btmU7465sWGIZKr/7vfwYsDsOGfonAMt7CkVz0sFqqzU3pO8pNHSNcI+ddjbo6COrgSTZjpQYw6sLzJ/82E9N/Jk0AFznnw6DoJEJxrtFE7PgjZKBf3RBErtiBYHumg0MNndtfflGRjT8IBNlN5XF+ZLXrky4SVKD12LDZp2CD0FuSHnuBMs9qWqC6ega8KhFKM+KAd/1AnNtouURfD2FOJpDLqCzUC2GSOkp8R385f92x2wnQyinExABCegUtWyaO/c5lIR5+HSv8ovLjZ4xO9V2Y8gYrhaMGfFpU5j/uLw/Rny/BXvvRcRkSQv4GB/9fBMlUQ1ybdOVrnrLK+ewmnPTf/+vxodoae/HFl8qV8gG3wF8y5QR44KOvK5Co2J9TICd4QsBNI5rKrc/299gePhacryBPi/kSLdn07GO6IFUnlGWoIAMCpfmU4E40jvTp0UmWOujYVR52RK26SAGQqVR/rEFJZGibC4fizZ97pJOtqAx9dOAn4znG1i55BMVh7DyRubfuGNfKxoZw2naQ== 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)(61400799027)(30052699003)(82310400026)(16102099003)(22082099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ym7uVtvq3VhSYA7REyKYeX1tJKitxj/u6hpHmDlGHgdbB8qDK2K2ocUVySdBIOBE+MeeFQd7DvxAjO8ubliQjA7Mhh9WSMr9E3HYZpk58ERJV84Co7gNeZ6pIsMxh9SbKikP9yEmX8HhLaFfySxNn/1thwSV8hRpc+WrdxLBhtqQf5fAPI1eYLV5Hl5IajnPj/EIGEuAOAa4KHDzQFwaSVbqZa2m6qN62ThluT3HXmdLTO9zFLOBGy+Wq+2MFC9sVwzIgwztl52L53oOcaYD8Dm0SyxYtH8KeiMaNlPxb1l/kTFH4UwGlE2qf0UE89pLPBJZmGithmPB/XDB5T7f9PHXnC/H+JLR/K6u0d7y80bWTlHB0IKSlQmoS1yIGYNBTrgL2WAVBJ7Jvk+FG4hCDi/cL6E+Vln3x2ZBG82bRwAwdcqWSKYUMYHCtVMWjHTM X-Exchange-RoutingPolicyChecked: I2UdECBS7Jb+qK93/ng8FV1iMt0mka8XM1hhwYvzkNfLnu6ZwvHF7xAKhuQCDK/g5t4P+AS9XAw8PRcUo2zeIYdi0fIqKkZvrSWZvO7VGZmPrUhfF+x4FE+dKRtM/c5Ce3SGDyaNMo9LnPPzNrRTIYgx6D/z1JDNRYHAQMNzNNz+Qd0t3nvod4roL1VyhKvCGQOf3WbzXVjbCgEAaVpZ/5+f3i3PgWOgbPTwOkpav4b8iddbSrRS/Yg5YBEES6gpxjHria2ESHeY2RDafvXR2GVuXBHZhVRwLdsFk7+eeB6dxL8t3rqVt3gI4qzeH5Stplql7+jV1GsRLyJN9AYslQ== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2026 14:17:57.8544 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d2a05ba0-1625-4d90-c20c-08dee1b2b470 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-CH3PEPF0000000E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR19MB8558 X-Authority-Analysis: v=2.4 cv=V71NF+ni c=1 sm=1 tr=0 ts=6a56451a cx=c_pps a=qAO2aVrDdLyRlaU/jZBZ7Q==: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=vcUlNS-PWQMF5VYGtFgA:9 X-Proofpoint-ORIG-GUID: WImM5j4upPR_j1qo5TbHzc-4Emt-Xb-3 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDE0OSBTYWx0ZWRfX5gCKj4vvL7Cq ypVK1/6KLDRo55qY8DUyycYofBuN1+soZfMAddg1gwoIlVh7TTjnRl7XaWGitoZHpsTAAtoJ0t4 38vIjO8HiWigSimoYAJDVXZv874CZC4= X-Proofpoint-GUID: WImM5j4upPR_j1qo5TbHzc-4Emt-Xb-3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDE0OSBTYWx0ZWRfXwsZflMPocm8V m8S678fYlbZDz8Vzz2KaxbIRfdpZ9O+PGIAJ7e7d/lbDyyMPIXYSedSMmOEpz0cwmtoPgH8K5GQ I/GPUMiVdjQgpQRDXx4zZ447d2TrFhNqrtj2r0RGQiiayTQa5v1eHtcmS+hpbRYN0qoguFkkXfa v7MJWLNWHt3ddZW/tkjir6dBsrzg0aXflCRjwxydeKU2rn8r4XgGBvfalOB7fldl9r9w/utalB2 OfMMIQ46i9n5qiZku/G/fmrs7y+fmYK9S4ZNv3GkPdKjOJFv6zwU/oEBiHat6VUbrzFUxYBAHOa j9hccjMW99q3jMeEApQ9fIGGpsYX54lKLvdteRRCis/Ve/BYaPX2RK8DjKCiskV5TANy0/InZE/ r+h2nsp2+3c7bOjkCJ01HVMhkr0JUMfxe7ka0pvl4O9+0xUmrXmWbRIGeh4Z1UOFYkW/7x/Ob22 espXlf7aggAe0xo2EUA== 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 requires all the controls to be present. Add a component level fixup_controls callback, echoing the card level option. Signed-off-by: Charles Keepax --- 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 19:28:28 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 865F447D92B; Tue, 14 Jul 2026 14:18:14 +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=1784038696; cv=fail; b=bGI68vI2pobnjOcXD14bnLPjsdfN6GSxnR1UEnhwaoEBNnkq307v0fnOb3yNcYNFQ0y/NyWIbQG9pz5d7MQYNbrAp+cdW1eRguILY6gFDE4YtlVdJ2CWUmlO1B+m6q6D8/wBcz9IAtm32dM0bUS5qnCCYyotvRmOaLmv2dQWwMM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784038696; c=relaxed/simple; bh=RoUgCqP08wCn6t3WenE6aHYtBphPxqiubECWb+hUQGk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PxAKdQDJCyDISlaDnlTub156nA8djhRbddaY7OpT0VOsDaWIpsfCPwjFXL2cehGT3TkMc5p4yYr4IZeNjwB7b0iyh2NxivmHqnulVD9eY7A8rdYuVXjP9a6ym0YiPT+5dwvctV/h0ZblE0Q/09J1XgjJgI6mXbN7qjJx5F0vSFs= 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=fuHNhi6u; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=Ma4xXmrg; 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="fuHNhi6u"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="Ma4xXmrg" 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 66E4voeO2160427; Tue, 14 Jul 2026 09:18:04 -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=5slkEU6d5UXBvS/ViaGtFMIjK6bYQsiavHPvp5tzWoU=; b= fuHNhi6uvXpuPWHAWnYxp92c2jfYsbCRsPC07tgWk2w3BvbuFRd+xKsWhx8Im35a hVVffI7PHpXzkHCHYikcMG4kYxGtJyJvT1zGR3NOkHRve+90+F9hV5OEooDZy/rj F6vYGiWtl+eTv32W/0MNn5t7MuBrgf87GyGuZnI2xw1kZhDWoDVcNvi6RkNBHJAB LI4Q/rY4TXSyCaHVg5x0GEW4FuTwr6IvgqPszDNhIkoX2S6ugMypbSkcnpOnVeZ0 hO1dLh/IQMkJD7As7UPKySSdAm1pvx5sq+lIh8Q20yeygMEXXFCgqe94XwH6HrE/ wDfROCTGfnebuvq8/WFhlQ== Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazon11022086.outbound.protection.outlook.com [40.107.200.86]) by mx0a-001ae601.pphosted.com (PPS) with ESMTPS id 4fbk7vux90-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 14 Jul 2026 09:18:03 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UX5WAVC8aJYOiM+Ar0GZpmCr15JsqTnL7f8ah5Gq9YaLPdfmzK8UhuDUIlZK/q34+GTXzi7MUiCEJPvca1VwlhW50b7zS78Mjx3+TdKStmyAile7MJVjFv/OjZS+/m9HeFAf+Lr4Erd5zZN7tgUpdAC9ytiJ9PpRenhcYYnk8YV3DuFS2m84pTZLp4Y9vgVmYAoFQX3ENHwnDgG4YY4W+EqKitWWB5rUZPqhdubIkh1D9NvfFSmgNb3Xag6/dCp8lkDSzXw0epOcE3eMXFWCoD5zzKUxKfgaY4u/3QTMvqVY858Hk9LNLN/vPNOtijdgKTohZRI1QjNzPRUDfuCI2g== 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=5slkEU6d5UXBvS/ViaGtFMIjK6bYQsiavHPvp5tzWoU=; b=uzK1axLet9DSeOnGypyN9T0wBgfTPbySWJhqHTspDSmNBiG7TIIP5X09SMeiCaTtEgPU98RttGEK9f4ZSEfS3UCtlYCB3FMpF86D+iQnQ18sSiScNHlvCtf9HbBc3jjKcY5rA/pPp+31cht7FKxChAAFaaeu9XXQwRKBF87Xl2586rYaik3db0TtXR1Q73P9amTNR7O154yhJS2S9HMdGwSN7R39kEvIjho00NBjSlu+KsTpmhK+T5l1OPnytkHUS8t53Ij3t9tCLUpn1Co2UYKR7iAi1j3cIcxpFJFcrUV1VidD1fvnYIHATGmkrGMvT00bFe11gKVFNC2LbV5oIg== 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=5slkEU6d5UXBvS/ViaGtFMIjK6bYQsiavHPvp5tzWoU=; b=Ma4xXmrgaTsav2E4UvMWAMqeN6PeJIN9HaX+V+f0BtgEF8XzP6SWPezTquBo9qGxXf59Z1YUPOfyr5FARkhNbIqS8iCIvUqOOagrwXbcB0L/Qo3bkpIMZBX8cZ8KAJFhBoaypsqE0n9HI4YqK/R2ztg0ulE7u30aE6yg69g8ah4= Received: from DS1P221CA0013.NAMP221.PROD.OUTLOOK.COM (2603:10b6:8:451::10) by DM6PR19MB3801.namprd19.prod.outlook.com (2603:10b6:5:22b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.19; Tue, 14 Jul 2026 14:17:58 +0000 Received: from DS3PEPF0000C381.namprd04.prod.outlook.com (2603:10b6:8:451:cafe::87) by DS1P221CA0013.outlook.office365.com (2603:10b6:8:451::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.10 via Frontend Transport; Tue, 14 Jul 2026 14:17:58 +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 DS3PEPF0000C381.mail.protection.outlook.com (10.167.23.11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.9 via Frontend Transport; Tue, 14 Jul 2026 14:17:57 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id D9055406542; Tue, 14 Jul 2026 14:17:56 +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 BF54C822542; Tue, 14 Jul 2026 14:17:56 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH 2/3] ASoC: SDCA: Populate IRQ data earlier Date: Tue, 14 Jul 2026 15:17:52 +0100 Message-ID: <20260714141753.897254-3-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260714141753.897254-1-ckeepax@opensource.cirrus.com> References: <20260714141753.897254-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: DS3PEPF0000C381:EE_|DM6PR19MB3801:EE_ X-MS-Office365-Filtering-Correlation-Id: 09fbdb56-5d99-4f90-0a0a-08dee1b2b481 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|61400799027|23010399003|82310400026|36860700016|22082099003|16102099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: aDUBd/6esNrqBh3wqIZzZjAtPAiYb8epWAMxkpJ2kI8lPvxxf+ZMI5LwKm6FNDStOAIjlnwR1XeNbZKbGuuQzumagez43ltzJkArQ+mQj1xpAuf5Y0A1lb/C/SsuEXOR7JfRQf9Veqb4+GGACg0pqDHO/8uxFjBRUFnwzpHeR0DfHOS8O2GlUS7dEErBSDog7bidtfg2fwCFzocREH3rRqULSttGYas+IFiXTIdAZGmNl6vY8RAkQEQhujnsXof3yZPcFaodmZpuIgDHJDS/cHKXvCeV9QmQiszVsOvT1rORd4gpJZDE9DE+TntCfk7ZtLyxENEFhuEHrGvxCua1m7BwDA9veDa4lGHzx4IJyOv2NFdasZBqabRf8HPOr1Xx2NN/TC7vUAN/otq4AVxxNxzs1PIJI2hchDZ8HqRN6Bn+6gYDdTW8XfNZqcgOPqfWgC59QgylIeQFjZBwXlkm0jOqSxjHxox3t/3nv4voKQ12AYPy3G5m9sVCBeUK+q0hkcNFKiGFJPYhNO0aevg8+YDlOOfCfmpo8jUYUfXCQDECnwX+PcSiVmYCnjcmeTC8+3Fzg/NU2JGHr+WShyvRFpC+Gcvo8SmOQdSxI/g7s5jH2zI1/zpgyX7ZjICEA6cESWEOLtl9I3NnnNbrBaJZWZ/+o9aW86YwsUoXfeG8HZQ7K4whtszVuQyUiTGwrk+UMnnM/MIL+ma+aTGPPiyFyA== 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)(61400799027)(23010399003)(82310400026)(36860700016)(22082099003)(16102099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qf8Ts6igZ65QPSUKuxsauEEhHsoLu+IXaUDy6JK7Q+8y4pI99XNPUkUZ1bJPUFtD0DCIpTdF8I/94WsCyuwde2I15WJjb67ceAIt4TuRqvttolcZzG6khWxxYM1Lzw7DAalE+XtMM+P2SITukzWK/3L8OPYSqFu8n2DLVUb/TgzwiB6DbT96rN9Qgn4TIT0EnxLB04w2VlMBvrzoWZG4BpLN3coKoo4GPP4qQ8kA9MFWO7cVSJ8qwch2+w5zZCjZk6A5x3zH3cXdgXVeept/5paJ4uFFcFDzKPcKzuGOOu2k5GXTgm+zp/KMtL2jUFqqISRuzcTlQbMvMk1lz+exECgx3dgehiQtBfyjL5qHCHP91+x6L7wRW+s8m8jrSB4Q+tJRpfzAW3nf2oQlKCTDpS95dIUG6DKd1qOzM84A7K13/ZCtmk4B7PpIb3EUjlpE X-Exchange-RoutingPolicyChecked: Rz75hoDaIqzRzXAftQHieUh5V3u1gBJJzbL6XUUdsS0N7HDjHrRdVjA8Zb0k+PlFnsNOS/5fN1jFUOeU/yYd9+GVA+2nCLlavAmrZbH0xqf+zKeJcRwHLoNjPFniCx26x5kUenSPfVYx6upVQK7x7GvyzFuWjG6UxLbaRgpBj5BJKHvwlWbexJK7r9LL9EFCdGa0enZVBBWbT3bNrUNYhdNCFmVQo0RCO/GoeW+aZvZNHaBPYqIGgBp3CWbUNIGgnSx5/imEjuELue8QuKGTMCW1qFvXU415d7A57mO0YnYhrTzXzYZO83Xj0SxWDrJbdEATsPlzQ4B8KaGV/556qw== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2026 14:17:57.9321 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 09fbdb56-5d99-4f90-0a0a-08dee1b2b481 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-DS3PEPF0000C381.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR19MB3801 X-Authority-Analysis: v=2.4 cv=V71NF+ni c=1 sm=1 tr=0 ts=6a56451c cx=c_pps a=9PhP5jdPzEAvW1dfnTQ6sQ==: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=WLWlQwCXayNZ2A3uxKcA:9 X-Proofpoint-ORIG-GUID: 0dYrLVCeUppqJCrGsPapo1luwEiShmeP X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDE0OSBTYWx0ZWRfX3aCdoasy27p9 T+RTX5d4O6zSm37wUXo0VoZshnjm7SUwJh6mYISg45q8xEY7awgBzMVeRnynnsEn4/DYl9XLi0Y PFNWBKlXqMNSHs842SpjnaPYamSME2o= X-Proofpoint-GUID: 0dYrLVCeUppqJCrGsPapo1luwEiShmeP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDE0OSBTYWx0ZWRfX3s0MFv/cLn7F vYz5wf0XfW1vhO7IBSf0RPAcZqZ+OLz1YULDU1kMtnaOuL4VHwcPxwfuTEWCO61vkjZixwBgGGy UkZbc/PLUKH7PTJGMfpNxLvGLxjLZe4xfO5W/B2zrA5HiIc33xZzCuJJeCrFEVJ7Zp1OHWcNpSS bGyFstKh0VMJXA/hF/gSFkwl19iI1WfB08b8Pr6ef7j5a7RyWfIFQ55XJvxUOz8SQfcLEYDGpTN imrjoyi/FWSo5Kqof5aTXL0a95e7HAr7iNKx0k5dr8WPX0SF8WF0RaDCqsHdr0mN+x7cyrbdNUh qSucFvvhug12HsyIok7e1nDxdTtgMXujvbPYFdOh51kCpKd8m8y6pM80z0Tjs+LTcnj0bhPQuBv OKPZmJoUw6RwmqSboC3+ie02ClRL9kqddBKoigFY0CkGPk3ByX1UvD7f22wPGLBJjJ2+2mdz/GU de605VFVcWvMIyUlRvA== 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 --- include/sound/sdca_interrupts.h | 2 + sound/soc/sdca/sdca_interrupts.c | 94 ++++++++++++-------------------- 2 files changed, 37 insertions(+), 59 deletions(-) diff --git a/include/sound/sdca_interrupts.h b/include/sound/sdca_interrupt= s.h index a515cc3df0971..20ff5eac34eaa 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. * @irq: IRQ number allocated to this interrupt, also used internally to t= rack * the IRQ being assigned. @@ -44,6 +45,7 @@ struct sdca_interrupt { struct sdca_function_data *function; struct sdca_entity *entity; struct sdca_control *control; + irq_handler_t handler; =20 void *priv; =20 diff --git a/sound/soc/sdca/sdca_interrupts.c b/sound/soc/sdca/sdca_interru= pts.c index 4539a52a8e32b..9a44e0abb1cb8 100644 --- a/sound/soc/sdca/sdca_interrupts.c +++ b/sound/soc/sdca/sdca_interrupts.c @@ -448,21 +448,34 @@ 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; + + interrupt->handler =3D base_handler; + 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): + ret =3D sdca_jack_alloc_state(interrupt); if (ret) return ret; =20 + interrupt->handler =3D detected_mode_handler; + break; + case SDCA_CTL_TYPE_S(XU, FDL_CURRENTOWNER): ret =3D sdca_fdl_alloc_state(interrupt); if (ret) return ret; =20 + interrupt->handler =3D fdl_owner_handler; + 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", @@ -470,6 +483,9 @@ 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: break; } @@ -495,66 +511,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): - ret =3D sdca_jack_alloc_state(interrupt); - if (ret) - return ret; + for (i =3D 0; i < SDCA_MAX_INTERRUPTS; i++) { + struct sdca_interrupt *interrupt =3D &info->irqs[i]; + int irq; =20 - handler =3D detected_mode_handler; - break; - case SDCA_CTL_TYPE_S(XU, FDL_CURRENTOWNER): - 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 --=20 2.47.3 From nobody Sat Jul 25 19:28:28 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 12FB82F7F1E; Tue, 14 Jul 2026 14:18:12 +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=1784038694; cv=fail; b=WnGtdvNMhi8dY0XQkztNGOgBQVSDKVL43F87PV8bddGPk9RjOWZxeEN+LdnfQ0h1XYA8wVT1lS6JajFTJfyqaxTd2F8sw9ssGw+qA3j1Zk/Bfse1w0r/jWzMghmzEBKPL+iAlcHoqiPK3grCS27rfX3rxEqSMrVSjATtCs6cWE0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784038694; c=relaxed/simple; bh=ukTyJAqgOTNYVb4utvnBylo3v+3UoF/sNt106qL3dzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=okzezxcCMXM+3fg8fEr8SLYrJ22oR4SULMUxthpGX0bhFJdOFFloMTWbdqkmhER7hD+Oh0nSEGCor0177s5+yepriGsz+65FOa7j/zvKU3kZ69DQvTmcjXPDyj/ktpBEKmyI5FAne7bB/jEWVWSSxW9N6QVRDNm4bo+M/59o688= 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=jhyXSJcS; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b=dPiI8owV; 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="jhyXSJcS"; dkim=pass (1024-bit key) header.d=cirrus4.onmicrosoft.com header.i=@cirrus4.onmicrosoft.com header.b="dPiI8owV" 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 66DMmp0n3032519; Tue, 14 Jul 2026 09:18:08 -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=YTFOYIPNkyhFIRS0XhMDw65ZFSUSymNPHAi1yjsjZRw=; b= jhyXSJcSqesSpN4S6BWqYxRRdv078WelMR5kdJU4u6GDLrV9divojCF+isWRDJ4N AA3rUNL/ir9z9xLhA8I95kKX9IJ0Plw4a0b4jZ2n83hB6J1HBF9NaNcOecUU3P0b rYAbEYZjBU3pSmRrKR+cdOxXofodcaO52WIDnz2U1NXA4HMki0OgVnu5MkNSP0Ga kF8kcwMH2ZZlDAjvFsYhRD0WiKLSzrPmlbg3JnU345kwPLhUn0nVn3iZmCWC5J0t qWErb9XrScud2ajsIiqllormB+YQDv37/+QrkUkCl32FzY2eGtbdyKLFCQ85aNYQ 1NUC5mBize0X7C0EIQ5P6A== Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11023074.outbound.protection.outlook.com [40.93.201.74]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 4fbj8fm0dm-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 14 Jul 2026 09:18:07 -0500 (CDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ORViCbnnKOX+9Pe3Ahr86KtOJ51wikOvIbLdVbinAjFC/PYdNQMsD287IXo54+StjaK93uZwJcxK5xC3nVB0TGfIRYCuXT57+NEEc4g/xIgG50wkBps5tAzxUPuYlra64lEEvYSbfqbrij3WUGNKGpLptnLl2S5V5poeC4RfAl6vnTc1Yjj60TGbIXdp/Ef9farMLEcXykrUugFsVH3yRPZGyMYiB5wSet+2gVWRRQBzIm8vxQyS/sxJQ1+ikaA7adpo1t4LDb6gSYCsXctSmmWDjed1adH2RoeFLNVJda8dT2nOkRGUf0U19n3GKBCuEhyXvJXFfxzlFKenH3Wrzw== 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=YTFOYIPNkyhFIRS0XhMDw65ZFSUSymNPHAi1yjsjZRw=; b=c0IscoISOVegarvq5BKzqDnXIA8qtkkECanqqLpobgeBu7gQlX2sJyyDvYHV+a93EMGqTwol75MYYk04SjhLu/WLG/gRjUWKUp21BE5zswuUy/3GlR3YhTBCOigJIuvpSgX4w3dOzbp3wLhKehT10DZwSPKep9IkxmHnHGfD07Ld3cuQXdQmPMcBAe48/tqk8VqboJP71LySUfNWbavUtXddeHI5VAmhEddQEwwIt+wOQi2O8Shwy7KLALoM+/4uhkFM3TQ4f+L+b4CUTPrDRCKsaLkhvfMqc9Juk4JAcT8wX1ITlAZ0foM5Z4HZrjddd49VZIUIkeAZAKeEuPgqHg== 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=YTFOYIPNkyhFIRS0XhMDw65ZFSUSymNPHAi1yjsjZRw=; b=dPiI8owVXY8x2LxsrD68UBfd/6aVq+TezUAmT35ylzQj/YDHkrQKpINu1Faa3umBWLy5929iBX/fWMa3+6e0NEf9zgw7DDETpb3xsZNswrzW0lX6TH/ZxP83EYBMOih++iTDtTDH2Yqx5/CxEOWZ47w1ro1wWuz8LyM47DKKzS4= Received: from CH5PR04CA0016.namprd04.prod.outlook.com (2603:10b6:610:1f4::24) by MN0PR19MB6334.namprd19.prod.outlook.com (2603:10b6:208:3c2::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.19; Tue, 14 Jul 2026 14:17:58 +0000 Received: from CH3PEPF0000000B.namprd04.prod.outlook.com (2603:10b6:610:1f4:cafe::6e) by CH5PR04CA0016.outlook.office365.com (2603:10b6:610:1f4::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.9 via Frontend Transport; Tue, 14 Jul 2026 14:17:58 +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 CH3PEPF0000000B.mail.protection.outlook.com (10.167.244.38) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.9 via Frontend Transport; Tue, 14 Jul 2026 14:17:57 +0000 Received: from ediswmail9.ad.cirrus.com (ediswmail9.ad.cirrus.com [198.61.86.93]) by edirelay1.ad.cirrus.com (Postfix) with ESMTPS id DC543406545; Tue, 14 Jul 2026 14:17:56 +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 C1CBC822544; Tue, 14 Jul 2026 14:17:56 +0000 (UTC) From: Charles Keepax To: broonie@kernel.org Cc: lgirdwood@gmail.com, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com Subject: [PATCH 3/3] ASoC: SDCA: Switch to fixup_controls callback for IRQ registration Date: Tue, 14 Jul 2026 15:17:53 +0100 Message-ID: <20260714141753.897254-4-ckeepax@opensource.cirrus.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260714141753.897254-1-ckeepax@opensource.cirrus.com> References: <20260714141753.897254-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: CH3PEPF0000000B:EE_|MN0PR19MB6334:EE_ X-MS-Office365-Filtering-Correlation-Id: 811f2ba1-eb33-44ac-62ab-08dee1b2b46f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|82310400026|61400799027|36860700016|3023799007|16102099003|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: QhLAoBvCfildIL75qZr1FepH6iC2s1CyFJX28slai9i/sEFjOj95yVtqBGYJAmVOyWJ+/Vtkx7ueUE3AMUxCoEs+0p4XMt2ZaF3hhcn1clxoh/ughO/1ZVyYjerVXFVJ4lecjYGk2UNPqAkWpPB5f3TGvFVxvSYHp+yqBWuhyutZYaZoFxyEnWTDJkF3PrrsmxNjKlRIYKt13ZkjMjk0tAaoi7Q8YokrIHDPsJeWSamgfYeDCf4ThxSXL0r3YrDBF5JtIp7nnHFUc0sShtLS+yIPzijsZMyLF7qnRhjFSsMPSRrK3bZThxEzGT8vGzmQjB0i1ZBzeHCItTroHKD7ZgkuzW4xGNifJL+oX88JzmH4mAmcMMMz+IO2KU42GwCiDXVTNVHJTXz4QU4wpTJF0SBh/vvCHC1VW15SgjceITsCXMUehBpKvgKxaxSyJ8YmlJMIvn6yRlhVU/L09RoG3pYbi+TUyObi7a7rxnBqx0O0syHbJqtYL8cVfYQVU8VLi5TbbU/Kuiiu7POMiu8fLrkybdHcZ3qEBslBpkb1SQlcs6E+BCVskM4euRGwsBJ8kLKXmdRfuM0d3JQSEaf0hiamvOsAUoAQDN1AnG0rCy4bk2dDIp6MRLVtwusug1WA7cxG15Ix8smhH7jOuOfrSDuAywh2WBnWPzHcqgr+cpmTx0ftAI86NPDHBykXjM2+1PCPSTOBTmOMSvfJ06f/nw== 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)(376014)(82310400026)(61400799027)(36860700016)(3023799007)(16102099003)(18002099003)(22082099003)(56012099006)(11063799006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ckeIS+M8+LJPozBwCJPxlEzKHLjB3BWRJiKtfR26g5rg+1D9hxXMeQa2/HB9GDdi915LO7qtLI2TgjDL5G3vB2NXGny+fHeUTE7EEs2A/JLftmTjP/VvZ3SiA3oYDO0/mJ39caa6WniiB+cdpvX9us8F6eLM+N3MLE8AYBV58U5TZ6qs8dIZtKke4IcTFgDd1A11/lxWz5uXAKRHUfjt9wTNWRu8XV+UrA890EtIjWxb9+kmDzggyXCSEfiGtBX5F3yK60rj/tuxL9ioW3jMP6ESesASj8m0TfZ7sBF5y2LTjdQ2lQBWwSThf0oKLgrki6P5D5zkYPs4lExcNEzxkWf20njukHVcwD08TJHhQ6dAUcBOAKY3DzXb2/5N9Wjm8mszVAHDZp9WJi6VcAU+qO4lwva5nPxMpZ+y+1uKpJPL+QPI8OyprzBp91osQkoH X-Exchange-RoutingPolicyChecked: hfZZMZugyrU6/2tJRrKK1ZWF41ojoAU0AwDlxdg4xM+QOCvwHko9kHFVAAod0n9PiXb+27zvS/ZyPeDPnlRAoPf0c80r8V0AP3b2Gl+9zGpETKOMMqwRSL/7wCY9dQqCCsfTg9qgpBMJKzVbFrGnW4Dmpo+FGsRsNG5Nv0k1OCBi5p5OpaIrqugnepPDRPyq/mkeO+jAwC4CrKm5F2ABi2JMKq78evu3kLDJzps8rRlX3iVCSPpS8//EuzRGeGDqj3ERoe07We4GC4BcGVNmY54QVEIV+6MJmbEpzNpB+lmQIhvce6HSU4dPJjkNvhpNtmm5Ky377+VjmydH2r8EbA== X-OriginatorOrg: opensource.cirrus.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2026 14:17:57.8456 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 811f2ba1-eb33-44ac-62ab-08dee1b2b46f 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-CH3PEPF0000000B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR19MB6334 X-Proofpoint-GUID: lbpyga4cSd7tn9SgxXfLL3eN5StaH4WM X-Proofpoint-ORIG-GUID: lbpyga4cSd7tn9SgxXfLL3eN5StaH4WM X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDE0OSBTYWx0ZWRfX4UPW2WoTWUBs XLb3qiA+aKRjN+ymBbihavVg6XD63d7WJBwgFPF0fuhh6oSQfwuBUk1NHwnx8RGMrQYDG6GrNn1 AmH8QjY5u57zyPSC6uoyCBdspeexj+A= X-Authority-Analysis: v=2.4 cv=M7597Sws c=1 sm=1 tr=0 ts=6a56451f cx=c_pps a=HjV/FuyemSwh3JS6b2cR2Q==: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=cTvsH-JCG-SXLsoZKIAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDE0OSBTYWx0ZWRfXwptnVBQfRt/Q /7r8QpdkoV07e3cW5dUO+UeN4CC4IkH3u9g+cfz0ntn4jfgilR/Ym90WrO8BpVKbf5ThGHInVCr F+gmJNNQh3W2u2rEc44EQHVgifstdMYuZfSldswCYOpCu/XFumanJLw0LjRMuXW9Gx1XkMUDeQs Y0UlzZC20jkfWZM9nEIajBdxbMrTSq6Dr+NLXXksuBzoIPiYKYeKhH5rF+Q5Rl561ZqvXxB1vAN 7O3N/YfvZnE961UtXGFUnvml0uCrIBXY+vVPmbG13IFzJemA9F51UWxwT4yRQGqaQZhswlBHCvT lLP0gLHjV3Ilfo3TNQku+RjXnW3jMfnbScIEP0Qsstn6BEh53P3w6p8eb5QIcED8y/o38/AyWQ7 B2vHl9aiAgL4ZxpYVnUzK35p+oXfSL0oA7Z3rHVzO+axD7g/BeKdCAuovqa51ow2UNmznhmgd90 dFFJumB9D3gNt/E4o9Q== 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 --- 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 1496a15f7d2ac..3826f16aae608 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 ae9636622a840..2ac74b9826736 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"); @@ -192,7 +186,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