From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CCA52185A0; Sun, 18 May 2025 10:51:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565475; cv=none; b=BlYdHAU93PwCAIxrbH8j5TBbEPGaORD6xB2YcGSb/lcB7OALi9+dRaAkxxjftVm5zQfP4yOK/GZSakEG+yxIwwdbVpAbl79kVL6OKjqg+diLgyP+/vPqkHJxI9GEvHJBtIvlcZ5LX08x4A3iurkYmkbTzVck1bFzKsB1XY0RUto= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565475; c=relaxed/simple; bh=bloo4GYc4JNZLyBh0ddLz0+AExIZk3IijzAUg1B6IzM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t/TpKbv6LO9ha/AjNmV3HmPFWJiC5TmlGm9VJZIwox0gcxqaiwsxLKEeinzMP78l6uhNIV1K9oQSbneoiIdrleYHerLgh4kzdDEvyYR+3hUvUKjfDL46J54EXefZDa221gABnC9Aus+tcZF4oldDIrOWNuNoyeX7jNVAzEcYM8M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=M3Y/9etV; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M3Y/9etV" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-231e331baceso18928155ad.0; Sun, 18 May 2025 03:51:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565472; x=1748170272; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=xHrWXETLPmMWvh88Pu4z3EEmfTBTODVAwS8fcOeK584=; b=M3Y/9etVrMEjgvUxJ5RsTnP3S8+E+W9uUZRdW3VmT8xTYVXHRqTitzsqAaKWM+WWKj Q6z2KsV/HIE2NssE+mv3iACgJzrBuQNJeCnZphEwcyXJUpZ1ZdE6DohCBfj6Ns6sorDL v0LibK+3sVnOB7XDjxdmvz1y4f9xh7JOQ4mgqevpZWQg1hWtILzPwC7M8zg+b0pS1rvX YWAdeq3rwUJwMODU4+pm4MxLqgxRQGK8lO6z+QHi8kPmEvyC1rJ9rUGLxWJ6LGyy5LYy bYaNBjpjaR4kD7d5T84WCtdjaWhkunlQkiSq3Hw7OLGO8hJxvYOzeV3SqN1ln+47SkzY u2ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565472; x=1748170272; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xHrWXETLPmMWvh88Pu4z3EEmfTBTODVAwS8fcOeK584=; b=qHi7lIpLs6kuA0fv8c8VnWE059HRYmcfuzU0scWPE5Lz4DyytMXtRHjFy6mOVafdbC aEuBVF0MZ2mUmof5AWTHXJ+X26hzoySXl5Cpv2VuqDzqglztV/pMTWCv8NqUqJ/I7H05 eqp8SkQR1r/vSmT+sF5m6DGPtxiozV5aXUgmKPR17mdH3lBiyNpSnquCb1e0CYqRTz2q 8gV0gqt258kPOxea8kRYnst4GCQ+qjY004jSCE3qxy4Yv0SauDfiOV590zdSHHOOADmv MI+u5ZOKdqS6c+FH/EM3op5RWykSrpDe8cZg+zOgQSA++fKpSp1+XB9kjYXJ4e6o+Vus WYpA== X-Forwarded-Encrypted: i=1; AJvYcCVNsNp5tfIlu0K3asU6iIi1UuY09j2e7Yk360R26IKCq6qoywKxvMALI73G0O5shbkOcvNQAWkm3k46nnU=@vger.kernel.org, AJvYcCXPTP9fyuJ+Mp6b7rTgweCfnvH7NbT9TUveAd8+nBlqElJQHAGzMNayFx4go6VT97vzE7ECkNlsVNOmea8=@vger.kernel.org X-Gm-Message-State: AOJu0Yxpaali0yI5ZQk0NN0NwN5hJRF5lyOPf23Lpc91aDEKcNpK24Ah f9Zc9YvBChV6EHZJ1qS+GImGrfqpTR1P9zgwEEbq3lh8itqovNCLV/ZWgW7iVw== X-Gm-Gg: ASbGncsJ6HdoLOtdFW89uK1uEfdI2RJf3/fb9VHnxV6ejqQbbUeFYWzqmXCHIKT74cj VTadOfcLo35F/K/PnGQIlCk9jSVFhWHcPc+hHZqmnkz4okIQj15/mnhU5vhG+d6soZ+E/n1O7yn /5rq2wUhz+X2qUxqyqj6FhS1BH7HX9rpNKXEX5D6QaUNVd0qna5Dajbs/+2ahLGMrzDRK9WZcTQ LQYlfbje39+fc1tiM9ptGiKNRX7dcY1Y0mOqlLl97KMWcDleGaYPnCu+quyvA4SQder7roLikcb jsecu5et34+U6TaEeomupkiYfv8bP5ciEieKZ4jJcS4NH6iItJU6hqaHpKkU/ViNYwTXfkm7MSn qpLA8lxeQ6aRUwY2A4mAcVucFH5EIDLvdyEz6cWOMvIB9sg== X-Google-Smtp-Source: AGHT+IHQKeN5K6oLu/Pr7bN73HTuOuOG1l8fm1K7G9wHj5VgQXjEmL3454BUhL6fVUoAR/0qXNb7SQ== X-Received: by 2002:a17:903:24e:b0:22e:4a6c:fef2 with SMTP id d9443c01a7336-231d45ae355mr145745125ad.53.1747565472550; Sun, 18 May 2025 03:51:12 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:12 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:46 +1000 Subject: [PATCH 1/9] ASoC: apple: mca: Constrain channels according to TDM mask Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-1-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1768; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=ReyxWz52DKUtyFgDtnGw7HLoQFBnONuJgIIlcj1/Fzc=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau6eL+D4tPLR0DrPSmfM3g5R/VZkpl0v0t/5forBWa HUjp554RykLgxgXg6yYIsuGJiGP2UZsN/tFKvfCzGFlAhnCwMUpABORS2T4n/HnUUKcdvWb5F1X tk3Mci5/zzxt3/Q+qY8LHzw93P5AayUjw3b9LGOfiX9dJe84/dAUa/8nkLSw4dmXvaHdUiZCl1K e8QAA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er We don't (and can't) configure the hardware correctly if the number of channels exceeds the weight of the TDM mask. Report that constraint in startup of FE. Fixes: 3df5d0d97289 ("ASoC: apple: mca: Start new platform driver") Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index b4f4696809dd231a64229114c5550bb5f237607f..5dd24ab90d0f052bb48f451cf00= 9dc2e9128014d 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -464,6 +464,28 @@ static int mca_configure_serdes(struct mca_cluster *cl= , int serdes_unit, return -EINVAL; } =20 +static int mca_fe_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct mca_cluster *cl =3D mca_dai_to_cluster(dai); + unsigned int mask, nchannels; + + if (cl->tdm_slots) { + if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) + mask =3D cl->tdm_tx_mask; + else + mask =3D cl->tdm_rx_mask; + + nchannels =3D hweight32(mask); + } else { + nchannels =3D 2; + } + + return snd_pcm_hw_constraint_minmax(substream->runtime, + SNDRV_PCM_HW_PARAM_CHANNELS, + 1, nchannels); +} + static int mca_fe_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_ma= sk, unsigned int rx_mask, int slots, int slot_width) { @@ -680,6 +702,7 @@ static int mca_fe_hw_params(struct snd_pcm_substream *s= ubstream, } =20 static const struct snd_soc_dai_ops mca_fe_ops =3D { + .startup =3D mca_fe_startup, .set_fmt =3D mca_fe_set_fmt, .set_bclk_ratio =3D mca_set_bclk_ratio, .set_tdm_slot =3D mca_fe_set_tdm_slot, --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3422F218ABD; Sun, 18 May 2025 10:51:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565478; cv=none; b=D0EnWRaXTFUqlIvtGeDF6ctUklc/K3QLa7a6l5rQJYvHBEQC0kKcRoas1IIlVoxzjd7iOqEf6yRQH2TWcNi5PBuKZrZGS7Ma2XNwmDTJonH4ryUTW4oyDqUdoCAlBjxQ/Cua1xJBRvpS9WSbYVaJVFBSYjIiJPLVyLxGF3CdJAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565478; c=relaxed/simple; bh=SwU7Igjk1OKbEDVoSx0S67xb5ZjoJ9Fk34L5QbHSCFM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XdAKYcveISYQm7YjoPzJhPimnueSy5+njkiJNXwVBpl6nn1WH0sLMw+KgmWNelcFGNAEx3DrfQeqLdMqvb05aaaVIEXn1We7jADzW26X920r6VCNRgYkyVH19RQw3Yrga8HmRrZotUpabz9f7eZ3noreP17DCIAhHn70eBDcKNQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RJsU2Uzp; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RJsU2Uzp" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-231e21d3b63so25757265ad.3; Sun, 18 May 2025 03:51:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565476; x=1748170276; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=g13jfsVMMfWu8pewYbMs0wefEJmwd0O3Dz3BH7Y5ODY=; b=RJsU2UzpvJsiCl4go9owJVFfzUYrBcGercUFQZWO7gT632zgiknzKTMv5r3KlwCsBm tUo6fEFp9siKw2diL65+IvQRgAl5qxf7k1toEAnj2A0jgYiA+WKu7Qr0to8fmz/Iqc64 ILQkrBMAmKJSXx2zuP2a8+RnH3XDtH14LJNk1zNOCt1MadKLKfrHx9PMGJCSFidW1LCI DJb1CGYMUOYUVKikf0sQ9rEqstRduFACkllzo/Y9LeogIAWJeR7YuiAr0oZcLjP5x76W 70zAcxlAzgvpo10ockuH9dpn1YLYqDl59HOCFHC70P/03tpKy9pryQAdemmw7KkgmVZb 0mPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565476; x=1748170276; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g13jfsVMMfWu8pewYbMs0wefEJmwd0O3Dz3BH7Y5ODY=; b=WY0A0U+A9F4pM+DysNJml8XJ1/yVDzu9sAMlzafxJCcfYcLhzhahTNyuoc5VaAtPXV VQA+SjppL7dffokSyEN40P+wtW9JLXM8R9Qw6/1uhOReMhyXu3KDfuZcKsxV1oKlmDcV taMNZUaEFDODFlp7zIZOHD+5PNMi42QMSaou11MIDPfR4K5IE5ktHe7twu6llUHedqt5 vTMUtFYFN1MKDWLPZIckdpeFi9sbgin/lu7d9AoJawQDcs0VqQjhkVt8h1JVWoygJFpH UL90mUER+UEvnI0wZHmBl0+EhF+BbaaIIOF9Q9vpTuyI2l4XS5tn6lBkRLfPl7mAiS8a /8QQ== X-Forwarded-Encrypted: i=1; AJvYcCUHWrAHE8X3RIezg+XHYvz1HJCKfAP0b4vSTFWBgY2VpIEVGadzAc583Mg5xb62VtJov5DwpkPhaBil4YQ=@vger.kernel.org, AJvYcCVpKLXIwftQp9hR8AorYpkAGktT1jVRrYh/lTIF4sAXiZiMDIx4ocEO7X/aPVBY7L6+ZBfDoiBarEsHcWQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxjvW0M6yhOKDpLejCZ4dEGBQ48Yvl3y6AuLUreB5VlxWKgYVRW d55GhzWcyFgeM3FO/VRlV6LVIY0IumRVZ9+P8SI3Q0stDU9CPlFTDlegRyS9jw== X-Gm-Gg: ASbGnctfrG//Y4f8eM2xpFCpxLcdMi0FfuI9O0EfCnh/E9pAFrXgFTuIHhdaHY5FZi+ XyavjeLSxj1zSnCOsRSM8iqUle7DekyJZRFqf5u5SCJ5MFsegwimthEhNClDQVRJ6+/nNk5I4yX s7C4q0SZLEl76XbYdol2moSeNaQYreEr6FdoGJ4GeyxDx/+YYNqpuDqZ9YXo4nTSlONlLGIEm7p nj1mCpOqXyPzO0tktXOeA71WMDNtib4t3OAygQZLjNszS06wUAC7C2wWbTmz8Y6tX7od3P5pi+U bfxF0NKfnFPckoBUX6Powx3pTLgvdJ/NsMDoJg9yCxG17pfoLXgOJ3EkChMDRr9SQULnpX7uC90 +K79kJSop3O2JcPh1npzXhKnqsWusd0pq2J93XMC9JgtT5g== X-Google-Smtp-Source: AGHT+IH0++ZEekfseuEpGWz7SUdCTKKDqWzyZxz5uA1rOlUbjvPfNHqeN14zJ3GRIw57pcl2hG74Og== X-Received: by 2002:a17:903:1b6d:b0:223:f639:69df with SMTP id d9443c01a7336-231de3ba65amr146473675ad.41.1747565476301; Sun, 18 May 2025 03:51:16 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:16 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:47 +1000 Subject: [PATCH 2/9] ASoC: apple: mca: use readx_poll_timeout to check for cluster reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-2-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2194; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=SwU7Igjk1OKbEDVoSx0S67xb5ZjoJ9Fk34L5QbHSCFM=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau6dfETisfvmXRu8ftgalvxu5ls8+nWX8ppvz4M+pv JNyYo60d5SyMIhxMciKKbJsaBLymG3EdrNfpHIvzBxWJpAhDFycAjARtkCGP5zvRdMsbmsaLlsm JCWguLUqM2PJPbY1NQ+Wzf3El1qykoORoX3jArYPKebGUReTteTKPr7y0yi/5LyUUWXN9QCxmnY nLgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 MCA clusters should take no longer than 1 microsecond to reset, however it has been observed to take longer on very rare occasions. Rather than just add an unreasonably long usleep(), use readx_poll_timeout to poll the status register for a clear reset bit. This lets us have a very safe maximum wait time, but continue early if we are ready to do so. Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 5dd24ab90d0f052bb48f451cf009dc2e9128014d..7113da4bdea7b687c0d44d2bbf3= a511b8299056f 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -197,6 +198,7 @@ static void mca_fe_early_trigger(struct snd_pcm_substre= am *substream, int cmd, int serdes_unit =3D is_tx ? CLUSTER_TX_OFF : CLUSTER_RX_OFF; int serdes_conf =3D serdes_unit + (is_tx ? REG_TX_SERDES_CONF : REG_RX_SERDES_CONF); + int ret, status; =20 switch (cmd) { case SNDRV_PCM_TRIGGER_START: @@ -211,11 +213,15 @@ static void mca_fe_early_trigger(struct snd_pcm_subst= ream *substream, int cmd, SERDES_STATUS_RST); /* * Experiments suggest that it takes at most ~1 us - * for the bit to clear, so wait 2 us for good measure. + * for the bit to clear, however this has been seen to fail. + * Wait up to 50 us for the reset bit to clear. */ - udelay(2); - WARN_ON(readl_relaxed(cl->base + serdes_unit + REG_SERDES_STATUS) & - SERDES_STATUS_RST); + ret =3D readx_poll_timeout(readl_relaxed, + cl->base + serdes_unit + REG_SERDES_STATUS, + status, !(status & SERDES_STATUS_RST), 2, 50); + if (ret || (status & SERDES_STATUS_RST)) + dev_warn(cl->host->dev, "MCA cluster failed to reset\n"); + mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, FIELD_PREP(SERDES_CONF_SYNC_SEL, 0)); mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42600217F26; Sun, 18 May 2025 10:51:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565484; cv=none; b=H3EDd7ZViknnKiFCZIN53mcgVBqn2aX4aS+1ZPX/ukDF6nrLRfcy28bPSpa2hrHPMDD6ZPEA7v5Jij90Zg7/9W0mT53KSmuZ0r1jluSPvhMh4Ece/RNCTi4jlJuGdoiUA+JcYVt2vjZeGwqvoCPlnRPxgloPknqQ4vm2SyKpSoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565484; c=relaxed/simple; bh=gbENVBK1BFW0CzyBus2+j7Ha8BltCeIsW0M2RXAVOMk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eXjuOCF/7Bc5wztZ4+U/nKTAAHwD3Mq1lL2fUrwjUUsH70pCeyrPsQMmTls5r2/VcLI2fMIvyWAoGmRoQaZnkCqPlR+TlcfGzMcnRgPl1rPyhWC1v6xy2yWDyBqyzmivTSiDNhK2lRJa+r7oYw4hI8OqLaQeJzWfgqB9mQ4zrXY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Z35JfvYo; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z35JfvYo" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-b200047a6a5so4049233a12.0; Sun, 18 May 2025 03:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565480; x=1748170280; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=my6qC1AyKNURS4m2hwq9ZP5siboUqjBS4bBWhJCQoJA=; b=Z35JfvYor9GypHPfb4zoJCos+s+G8GnaB9ZkQXqLRDUvL7pyAiFooYTIabYashexHp ZXzBm/P8HL9xJAJtPqeazpnF6xzZZ0WH8oBs+QobuJNufbrSBcd4HkH+1yLq6xx2eDpj RxLk1ik/O7+Jn7El3ipHrbU7pMENjlvXJFaaWyYyeZeclEonTE9TpUCD4TSzKo0draRZ naf6fceOp0nihuxL4El/Wqc9RLchGeUPjxChQRsx7pMwz9Q59TUU13e0eRXyx0LHfser MJEzGoLuUPTKt23c28lRofnunxlfNuIMJm9qNOZp/hr0N2Y0LEJXr6V8ffMshgEOTp31 73gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565480; x=1748170280; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=my6qC1AyKNURS4m2hwq9ZP5siboUqjBS4bBWhJCQoJA=; b=o/83JLHbckXq5fSfurE24kGMcfCbVsfyM+gcF7DkfB+7LTtlV/yWNoP+OTXMpNN3qf PVG5lF20zoeAVz4bGQwMN8JhLKNPPtMtcvggYa2UXoPxkB58lEJPo56jVHwv98C6nVZH Uoh7QPPgPYlyd6LPkpWqyn6dY2kjC/ULRn9hm32MRfNDMK00u3ZbeMX8gKtNiwon08ca 9kex3UvnWMHM5KN8JsOuQ8iigMLgaact4KJ/On4ZJRLC19OstTMtm87ujvXOf1W3iEJy pc2yGIMGETxA3jntmeSUUVTS/4Q+Fb+4GiQOp7HBqEQqtXCeN6C3fgvn4QMYt+9XeOAV kt4A== X-Forwarded-Encrypted: i=1; AJvYcCVbtiyG7k2qCpKtEfvm0kVwh4GK40EldC6bfOAS3Oqzlc1jspdyNtrlLNB5/c7nXlaTihCgaW1LmX0HNTM=@vger.kernel.org, AJvYcCXxOz31F6CEZTMjo7rhHdnDqJCq0RBfx9a0zccBA92b0O59ggVHjfC4+cezXdQTtEhdvzE/tOkB/MdWt3U=@vger.kernel.org X-Gm-Message-State: AOJu0Ywcn2jImnOjdjBoBpnrXp2i5inEDqGuUzEHwP4p/pHBhgL4SPSN JAIwJx0XOl61c6MEHFbAulNlhIkRvR8pybYJA1m+WeSojj+GfapgRR0nmt5IPA== X-Gm-Gg: ASbGncsRawb6MLMvPtD0/fw1+z+x1lUZopWWUNGGdv2n6xhNOr+bVQdaKsndQ6Pnfyh 0xKDl1YueOONdRpDxra2bT1wlJakSOz62WWTTvFzxSA2J9eej2fYFyBLh0YlXiAeQKB4x+AfRiA VAFlMhgXM6RB4iwf3ibgJmr2lonea02IeB4sEW52nS5fh3unWY7U4Tva3ejY0SzLC7pgrdr2UoY tzfbIktXzd0rINR1kBZ+u+smfIgR/LeW/mlAJBv2ReqQ1rRufn/kuVwi1UQFWXtvln4utuHBqjI RaaHw1i7+wKh2spxLtDA4pXHTW4o7TIXvWdmL8q0gdQwrl9E5V1unmU3i78iWNPTvFGY67r9Gf0 O44f06CArvcfb//GEJrbqLnr23ItpHaZYjXxqMYLOAhnYFg== X-Google-Smtp-Source: AGHT+IHH7Q0q1k2r8EQN7M/10MYOXWvJ9RooDtnb4q22ZpNK1DQFpTMs3CFKGH/+4OBP/2z+0MphJg== X-Received: by 2002:a17:903:2acc:b0:21f:6ce8:29df with SMTP id d9443c01a7336-231b3938027mr180930095ad.3.1747565480287; Sun, 18 May 2025 03:51:20 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:20 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:48 +1000 Subject: [PATCH 3/9] ASoC: apple: mca: Move clock shutdown to backend shutdown Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-3-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Hector Martin , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2767; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=9Jn21G78Usgsal/23fmc4fU3vpff2g8Y2ySE4kB/1w8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau6e/Dt8avaGyyE724eafTifz+duklaaXGmslpdlt6 bvGOHFjRykLgxgXg6yYIsuGJiGP2UZsN/tFKvfCzGFlAhnCwMUpABPhm8DwT2vbrOkKl5/LNEk+ ++WQyit/6YinpcBbT84+h6un2m4s/srIcCMlR1Cdi89vlvSPW+o8vUrRe9NT9rz8vbhvNUeFdWM CFwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin Codecs are set to mute after hw_free, so yanking the clock out from under them in hw_free leads to breakage. Move the clock shutdown to the shutdown op, which is late enough. Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 48 +++++++++++-------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 7113da4bdea7b687c0d44d2bbf3a511b8299056f..69f2e852d4aeb2d53eea5d7fee4= 00b2337a09065 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -361,33 +361,6 @@ static int mca_be_prepare(struct snd_pcm_substream *su= bstream, return 0; } =20 -static int mca_be_hw_free(struct snd_pcm_substream *substream, - struct snd_soc_dai *dai) -{ - struct mca_cluster *cl =3D mca_dai_to_cluster(dai); - struct mca_data *mca =3D cl->host; - struct mca_cluster *fe_cl; - - if (cl->port_driver < 0) - return -EINVAL; - - /* - * We are operating on a foreign cluster here, but since we - * belong to the same PCM, accesses should have been - * synchronized at ASoC level. - */ - fe_cl =3D &mca->clusters[cl->port_driver]; - if (!mca_fe_clocks_in_use(fe_cl)) - return 0; /* Nothing to do */ - - cl->clocks_in_use[substream->stream] =3D false; - - if (!mca_fe_clocks_in_use(fe_cl)) - mca_fe_disable_clocks(fe_cl); - - return 0; -} - static unsigned int mca_crop_mask(unsigned int mask, int nchans) { while (hweight32(mask) > nchans) @@ -785,6 +758,26 @@ static void mca_be_shutdown(struct snd_pcm_substream *= substream, struct mca_cluster *cl =3D mca_dai_to_cluster(dai); struct mca_data *mca =3D cl->host; =20 + if (cl->clocks_in_use[substream->stream] && + !WARN_ON(cl->port_driver < 0)) { + struct mca_cluster *fe_cl =3D &mca->clusters[cl->port_driver]; + + /* + * Typically the CODECs we are paired with will require clocks + * to be present at time of mute with the 'mute_stream' op. + * We need to disable the clocks here at the earliest (hw_free + * would be too early). + * + * We are operating on a foreign cluster here, but since we + * belong to the same PCM, accesses should have been + * synchronized at ASoC level. + */ + cl->clocks_in_use[substream->stream] =3D false; + + if (!mca_fe_clocks_in_use(fe_cl)) + mca_fe_disable_clocks(fe_cl); + } + cl->port_started[substream->stream] =3D false; =20 if (!mca_be_started(cl)) { @@ -802,7 +795,6 @@ static void mca_be_shutdown(struct snd_pcm_substream *s= ubstream, =20 static const struct snd_soc_dai_ops mca_be_ops =3D { .prepare =3D mca_be_prepare, - .hw_free =3D mca_be_hw_free, .startup =3D mca_be_startup, .shutdown =3D mca_be_shutdown, }; --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAE1B218ABD; Sun, 18 May 2025 10:51:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565486; cv=none; b=tYQNprLucy3eNDli/rmKYSs6by3Hfmg6TGCY25ZBXENWitG0AGBo7xbg9CzerK/4B3NzJz9NFqKYSEHzsR1o1KUVzvfdBWx+bbm8/T3EdjAiYa4ZtYnD084PHVSdwA26SvzPgducf3y0SqTUxvudosP9UqG9dAvp2+mArA7hleo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565486; c=relaxed/simple; bh=WHKqTa4OI7H0tsaMNmaewILqLC6gPu0/Bub9Q9xEKy8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nTE0JVg6wt8DtM/Id93nuzEgUeUg71RJLSa+n+9pIt4kvlQGf9YnL46hNRoOIUv8PURn7H9RDFUr8cxuwi3ay+C6tD2Wav60cJmgzlGV9g8E0RSXCSuW/rgKGXWvjxr4KsDGaVvQ+LYS6NN5S5c7NvW0tZ6mkoNXmSAK2Y9r6CQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JskH0yoj; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JskH0yoj" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-22e09f57ed4so47544895ad.0; Sun, 18 May 2025 03:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565484; x=1748170284; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=oFDiS0lWhEbyZuQaVA80Oh8M+rJLhBawrvjn5pFhSDI=; b=JskH0yojgy7TMA0lU1OwrVLAmWsfMaz9WW2lL83SEJ9vf+uezybFRcNlrnrkOGWg/z QkxzdXBMAgYbjP86F0kIzbtLlwqMFiVWKSqcrzBnfPinjpGUGmZsRalYD2kTY+cokYxE wPYzt3bs1EfqeQqklc9EjmoJhPsDvW0uyRTGwzgB2KjsYjR0eRsq/+Au5BRVJ1zCpZsM TAyZq1SWgE9ccuAkH92EMHkSy9EVI3Ey7Fmw0NYQ2sTDbd3LGKXo08EVpsTa1KTnSd/H PwICcPnRzq3F18/MqDRrmSeOUfFLgPkGSoc2Itc0U0M6vnUlmSWUz3J1TlOZO9JDXiJJ Q9jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565484; x=1748170284; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oFDiS0lWhEbyZuQaVA80Oh8M+rJLhBawrvjn5pFhSDI=; b=jNzg8qEGpNKfy76nnv6RJCeGIJ7uF3AASL8+zXxlzpvKCsj+onJq+rHsDeNE7H7x0W 2w82Mm6ZgWqM4nLn5hkf6QAS3evT+yAowJrsKYIPGhGnVRMbnXm9p4HBBPQhsWQ6aRI3 /7HEoDhddgimx4DnH4qEybfySBkvqqkrwe7hSwBPXRcWqqtVrXyvXE3edsII2eqCZ9z7 CBLwiTMoy53PmzdvheAYvFT3+/kt/CTd7qo9iXGTP7kvhySLYtbrj8c/ZL45ktqKqfJW o0VsW5WN82Umq6dTWg40+C8U+w3nZ2xNvG+yMNzMXHyOa8PmuNsz3mG5GsC4QEyqXtM6 Frjw== X-Forwarded-Encrypted: i=1; AJvYcCVypNlApk5NA7qX5NMTkWC5GT6XbP5fnCEdw0ZwwviAbesW1fP3tCHfbGT4+B6p3H6u00qKmmqTY+mnvec=@vger.kernel.org, AJvYcCW3dHZadZ2WkgFXIZexZZluinf5DWUwKCJWeN2KLjhGY0gS+zsHsxw6U1Sh4qLksezi8valbI5rKfyObLg=@vger.kernel.org X-Gm-Message-State: AOJu0YwjdLgyRJ0JfIkJhatI0G9v3E8uxXZcUoN9i+qM8Lzg9j6JNMah yQ2XY2d7+/zZEDr9HbKjfIEbs9lCCC2r8CVtXfblAl0DCnhgrhd1IX07hP0gfQ== X-Gm-Gg: ASbGnctNy1p21ihrC5F2jKsOL7NTg55J1WgItFATEj/+cKljvzX2USc350cCVVFE1gW ytTROncIaObv7GHdB8OsjbaBUmy5oFyUNAOEmNCyDRvrO5lmyX9anO9uHQHAXN5tdvVaj5Ck1bY j+3AtS7Tl7lCchq/xlIUWFC+Z3Iqp1VopoRdmVoKeNbn41eDf6tTYn+vr1L1uQjNxo1g8eGrf5t 46W7aUXfKC0g3kTm+pV60A9aAF8TcOCK3XwzCQbCvr7FjPCUGwoVKuqTzONko2NSEe3TguDU9EU G6BwrMdTICn3c97jPoR3E2FkMViJrUQTiSTrtrEmG2/D4a09g+ORV3uYZgDNmKWn0TqZp1Bj9oP c+AREuXKeU7qIRwXHj9WXNuc/We3J+tE5EZtroq90yrPjbw== X-Google-Smtp-Source: AGHT+IEg2ObOzCEclBARUO3SK7EvQFwnxfiABcx+/MtSC/IQoVV/c/YSB8ejej1qcF2CxQQVxRrB7w== X-Received: by 2002:a17:902:f543:b0:21f:1348:10e6 with SMTP id d9443c01a7336-231d4d2041dmr139071415ad.13.1747565484007; Sun, 18 May 2025 03:51:24 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:23 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:49 +1000 Subject: [PATCH 4/9] ASoC: apple: mca: Separate data & clock port setup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-4-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6128; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=maKc9rdznQhyMiZTaCGBUlWtsoeHi/4QFpgyaypjIB4=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau2f8SrBf9Nv/xvxfyX/Yt6wrV5t7ob/0t3vPROXLb olPG68f6ihlYRDjYpAVU2TZ0CTkMduI7Wa/SOVemDmsTCBDGLg4BWAiDTsY/sfUBRzV5t52dsPC xxf83sb+fX3f/4D5M6dbEn4fZl1st7RlZJjf/zg40Na/cnrXQXfhdxK3o7bdzdtTvvRx6JdMJ9v S0ywA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Up until now FEs were always the clock providers -- feeding the clocks on any ports (BEs) they are attached to. This will soon change and FEs will be allowed to be clock consumers. Once that happens, the routing of clocks and data will to some degree decouple. In advance of the change, make preparations: * Narrow down semantics of what was formerly the 'port_driver' field to refer to clocks only. * On 'startup' of BEs, separate the clock and data aspects of the port setup. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 67 +++++++++++++++---------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 69f2e852d4aeb2d53eea5d7fee400b2337a09065..39713c378ba10910b0a3ac3d804= 844b25dfa2c94 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -134,8 +134,8 @@ struct mca_cluster { struct clk *clk_parent; struct dma_chan *dma_chans[SNDRV_PCM_STREAM_LAST + 1]; =20 - bool port_started[SNDRV_PCM_STREAM_LAST + 1]; - int port_driver; /* The cluster driving this cluster's port */ + bool port_clk_started[SNDRV_PCM_STREAM_LAST + 1]; + int port_clk_driver; /* The cluster driving this cluster's port */ =20 bool clocks_in_use[SNDRV_PCM_STREAM_LAST + 1]; struct device_link *pd_link; @@ -158,7 +158,7 @@ struct mca_data { struct reset_control *rstc; struct device_link *pd_link; =20 - /* Mutex for accessing port_driver of foreign clusters */ + /* Mutex for accessing port_clk_driver of foreign clusters */ struct mutex port_mutex; =20 int nclusters; @@ -317,7 +317,7 @@ static bool mca_fe_clocks_in_use(struct mca_cluster *cl) for (i =3D 0; i < mca->nclusters; i++) { be_cl =3D &mca->clusters[i]; =20 - if (be_cl->port_driver !=3D cl->no) + if (be_cl->port_clk_driver !=3D cl->no) continue; =20 for_each_pcm_streams(stream) { @@ -339,10 +339,10 @@ static int mca_be_prepare(struct snd_pcm_substream *s= ubstream, struct mca_cluster *fe_cl; int ret; =20 - if (cl->port_driver < 0) + if (cl->port_clk_driver < 0) return -EINVAL; =20 - fe_cl =3D &mca->clusters[cl->port_driver]; + fe_cl =3D &mca->clusters[cl->port_clk_driver]; =20 /* * Typically the CODECs we are paired with will require clocks @@ -689,12 +689,15 @@ static const struct snd_soc_dai_ops mca_fe_ops =3D { .trigger =3D mca_fe_trigger, }; =20 -static bool mca_be_started(struct mca_cluster *cl) +/* + * Is there a FE attached which will be feeding this port's clocks? + */ +static bool mca_be_clk_started(struct mca_cluster *cl) { int stream; =20 for_each_pcm_streams(stream) - if (cl->port_started[stream]) + if (cl->port_clk_started[stream]) return true; return false; } @@ -725,29 +728,35 @@ static int mca_be_startup(struct snd_pcm_substream *s= ubstream, =20 fe_cl =3D mca_dai_to_cluster(snd_soc_rtd_to_cpu(fe, 0)); =20 - if (mca_be_started(cl)) { + if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) { + writel_relaxed(PORT_DATA_SEL_TXA(fe_cl->no), + cl->base + REG_PORT_DATA_SEL); + mca_modify(cl, REG_PORT_ENABLES, PORT_ENABLES_TX_DATA, + PORT_ENABLES_TX_DATA); + } + + if (mca_be_clk_started(cl)) { /* * Port is already started in the other direction. * Make sure there isn't a conflict with another cluster - * driving the port. + * driving the port clocks. */ - if (cl->port_driver !=3D fe_cl->no) + if (cl->port_clk_driver !=3D fe_cl->no) return -EINVAL; =20 - cl->port_started[substream->stream] =3D true; + cl->port_clk_started[substream->stream] =3D true; return 0; } =20 - writel_relaxed(PORT_ENABLES_CLOCKS | PORT_ENABLES_TX_DATA, - cl->base + REG_PORT_ENABLES); writel_relaxed(FIELD_PREP(PORT_CLOCK_SEL, fe_cl->no + 1), cl->base + REG_PORT_CLOCK_SEL); - writel_relaxed(PORT_DATA_SEL_TXA(fe_cl->no), - cl->base + REG_PORT_DATA_SEL); + mca_modify(cl, REG_PORT_ENABLES, PORT_ENABLES_CLOCKS, + PORT_ENABLES_CLOCKS); + mutex_lock(&mca->port_mutex); - cl->port_driver =3D fe_cl->no; + cl->port_clk_driver =3D fe_cl->no; mutex_unlock(&mca->port_mutex); - cl->port_started[substream->stream] =3D true; + cl->port_clk_started[substream->stream] =3D true; =20 return 0; } @@ -759,8 +768,8 @@ static void mca_be_shutdown(struct snd_pcm_substream *s= ubstream, struct mca_data *mca =3D cl->host; =20 if (cl->clocks_in_use[substream->stream] && - !WARN_ON(cl->port_driver < 0)) { - struct mca_cluster *fe_cl =3D &mca->clusters[cl->port_driver]; + !WARN_ON(cl->port_clk_driver < 0)) { + struct mca_cluster *fe_cl =3D &mca->clusters[cl->port_clk_driver]; =20 /* * Typically the CODECs we are paired with will require clocks @@ -778,17 +787,21 @@ static void mca_be_shutdown(struct snd_pcm_substream = *substream, mca_fe_disable_clocks(fe_cl); } =20 - cl->port_started[substream->stream] =3D false; + if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) { + mca_modify(cl, REG_PORT_ENABLES, PORT_ENABLES_TX_DATA, 0); + writel_relaxed(0, cl->base + REG_PORT_DATA_SEL); + } =20 - if (!mca_be_started(cl)) { + cl->port_clk_started[substream->stream] =3D false; + if (!mca_be_clk_started(cl)) { /* * Were we the last direction to shutdown? - * Turn off the lights. + * Turn off the lights (clocks). */ - writel_relaxed(0, cl->base + REG_PORT_ENABLES); - writel_relaxed(0, cl->base + REG_PORT_DATA_SEL); + mca_modify(cl, REG_PORT_ENABLES, PORT_ENABLES_CLOCKS, 0); + writel_relaxed(0, cl->base + REG_PORT_CLOCK_SEL); mutex_lock(&mca->port_mutex); - cl->port_driver =3D -1; + cl->port_clk_driver =3D -1; mutex_unlock(&mca->port_mutex); } } @@ -1094,7 +1107,7 @@ static int apple_mca_probe(struct platform_device *pd= ev) cl->host =3D mca; cl->no =3D i; cl->base =3D base + CLUSTER_STRIDE * i; - cl->port_driver =3D -1; + cl->port_clk_driver =3D -1; cl->clk_parent =3D of_clk_get(pdev->dev.of_node, i); if (IS_ERR(cl->clk_parent)) { dev_err(&pdev->dev, "unable to obtain clock %d: %ld\n", --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF92521A421; Sun, 18 May 2025 10:51:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565490; cv=none; b=pICD3lI/Rl3hJdMmeZSckgjq9KOtGbXmRR9WNy15I25P+6lBgdJYJzUAe45RHsqwXm/QlN7TSmM+1+642U78ihoP1lukzEgVjpFs5fjbFK6JeapabRP9jXAtYEX0fAJPWI7Tcfl1g1IU4S3ChqlmmTBvVvtjf8cPm3wGMGVL7ts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565490; c=relaxed/simple; bh=F82kQo5jF8NNEa6QNxcYjn5L6vQFnbATljVK6E6zfSs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YD6Ww6sJl85GEUQku2vunhNKeX/yDkwmWyZ/0eQyuOm1tZ6rALD0CoUPbR5yIkMnR6mYw5q5Kao5iWcMs7ECsa3C98dJy7YJhYV6QmSe03AIqTLIRUx8JmZHGTVdl1cAyxQX9eKVu6bhESyfd/VZ9SHeyBchPJPeagvfKYTxvaU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=frxJcX7R; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="frxJcX7R" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22e033a3a07so34592465ad.0; Sun, 18 May 2025 03:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565488; x=1748170288; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=g+n3AQ8sePKLocQfLg1pUdFDlZnS0WtD0qj/lH0MVs4=; b=frxJcX7RcvO2b9f9FreyowPOf+ctsxbfgep2EM+gsSisArgkhqPNLOIKYwHioQHuBj Gr76ep+Q3FnP00/rkNQ/RGD+SPBWFDueOzurMH+VUS8QyE9kABb2f3egQVCompse5TKO bJ85KvG6sZT7turxgRAYmNaaCt/gBJJr0BQcvgj9CLrkDVPu46aV8W2e/5vEr5ldEd6p snu3C9Kb9M1GvHK3bUhBIOFj1J/+8uV808n4sm8+xhYhWS2h9qFYDyYXmhS42KSd2HDg k2oBr0X4qKyA42+C9IAcrMt8u9bM+Tq+3TZt+BAKLrtV9lFvZKi2GwIWNMBrRct/FlVR LPVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565488; x=1748170288; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g+n3AQ8sePKLocQfLg1pUdFDlZnS0WtD0qj/lH0MVs4=; b=htpYVjZTdjoscRMCIh5XB2LG6zmoKg1WzIykVsqxTlvaAwYrjN/gNpJ9CzGZrAn7aY lvqXx4Q7fD51Os5mMmrHZvQfy5o5bEdQMVfO2W1FMKP43NsUbKxjbz8Z8hO2r5DbT19g U97PX1OmTyZ71CrtYbj/QDAhLKNG9IKTHzmXf4sd7AXSN1AJ2JF4c+HbU2lVCZ+JtEXE xp1Zo+U9/WvePfwuskxW/Jl4/APXnMkHcCYMRlY+llcKySXHcCFqOuJIOJ+Ods5NWrSz tuwZm9FKsg8UxIIFRIjETRDMaZj5XoeMVIjkDVL8zHC0KxqwSHbL0l48WnmYT6V47MD0 B0oQ== X-Forwarded-Encrypted: i=1; AJvYcCV21KrMpnKBR/rT80h7YB1ZlrldDfOtLMYFxwqJuKMPYiMj8U09ow5c0lhbdgm3UOy6pzxYAlBAMS9dmfM=@vger.kernel.org, AJvYcCWhW5SHzG+yIBHeA4fYWN7jsG/90nzPA8JJ8yXIZTZKp36r2xkMCSug8g1gS5TdHCKdP78QxXRwabwLveA=@vger.kernel.org X-Gm-Message-State: AOJu0Ywg8lWMCBSdyHT3UJEEJvH53vBnWVoSk7G8fKRl/5Wzl5bHvWRD Jg5MmQpwahCtdjBPiuCLMg+qq3ufxSBfR9jSC//JBA8smS9wVJC9UUF8PvvQCQ== X-Gm-Gg: ASbGncvnbxuSn8LIqQdZu1n+BcMkXwpPA1a5vor4ALbEQNHRn2N4xbs0nKciCmv222a Q9tBLvrG6HId9enCmmGdmkZHGjSsycxVhBVU5F2dG3jZNG3B41z1DhKhW+COY68ztw99ywqRWJA 0lRD5G1aVsogC24L9KRWU1q63YxqEaWEZaY5tBvtKgtkn03R73aepy6nmOEvB7MXu+D6k7b098R n79iGyLYvL6n2wfUqAKSidXFvMI0p6iWLDDUC/FPmoMIl7h7HVEOex4VJkMuHykCJr9zCTBsKFN WOF/pXNROeUbFaZ8IfM67A96hYnIph6qSKdRTPOqgjSmVPjoKlhdD+QkaWHDEGnckxsqkmIZpkT KRg9gPTuAg77TcmHvUxKgvZSWxo64ZskgtGXH2teLCrJKdA== X-Google-Smtp-Source: AGHT+IHz1CUXiqVS3egmECCEkJqx3r31A55/yZ+UXHJFRte0jXT7/LwmZSh1hlx8ZcidOHq3veEF7A== X-Received: by 2002:a17:903:94f:b0:220:ea90:191e with SMTP id d9443c01a7336-231d43d9ca1mr139134145ad.4.1747565487726; Sun, 18 May 2025 03:51:27 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:27 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:50 +1000 Subject: [PATCH 5/9] ASoC: apple: mca: Factor out mca_be_get_fe Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-5-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2041; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=H3hg2zGOBIXuTqTCzYB8ehtSLQVdcKQ7HsDaPyG6XSw=; b=kA0DAAoW1DYy0VH3eWAByyZiAGgpu5ihWW9iOjqZV8eX/aFNeavdo2h8sCgH0vLg0aycMfjZM 4h1BAAWCgAdFiEEsIISSJsyBtmPFHm91DYy0VH3eWAFAmgpu5gACgkQ1DYy0VH3eWDZfQEAnb5c k0M8EQp9jlrrt+p4DEiwvYbFn8rvjKC7uxU4UPQBALLzPInhnXhWlgdLBFrcSDZYTO4276mjxYB ElNVvBzwC X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er This is a function that we also want to use from within mca_be_shutdown, so factor it out. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 31 ++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 39713c378ba10910b0a3ac3d804844b25dfa2c94..7c3e1eae8b963ff593fdcf54e4a= 1f2e5f64a63c1 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -702,30 +702,35 @@ static bool mca_be_clk_started(struct mca_cluster *cl) return false; } =20 -static int mca_be_startup(struct snd_pcm_substream *substream, - struct snd_soc_dai *dai) +static struct snd_soc_pcm_runtime *mca_be_get_fe(struct snd_soc_pcm_runtim= e *be, + int stream) { - struct snd_soc_pcm_runtime *be =3D snd_soc_substream_to_rtd(substream); - struct snd_soc_pcm_runtime *fe; - struct mca_cluster *cl =3D mca_dai_to_cluster(dai); - struct mca_cluster *fe_cl; - struct mca_data *mca =3D cl->host; + struct snd_soc_pcm_runtime *fe =3D NULL; struct snd_soc_dpcm *dpcm; =20 - fe =3D NULL; - - for_each_dpcm_fe(be, substream->stream, dpcm) { + for_each_dpcm_fe(be, stream, dpcm) { if (fe && dpcm->fe !=3D fe) { - dev_err(mca->dev, "many FE per one BE unsupported\n"); - return -EINVAL; + dev_err(be->dev, "many FE per one BE unsupported\n"); + return NULL; } =20 fe =3D dpcm->fe; } =20 + return fe; +} + +static int mca_be_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_pcm_runtime *be =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_pcm_runtime *fe =3D mca_be_get_fe(be, substream->stream); + struct mca_cluster *cl =3D mca_dai_to_cluster(dai); + struct mca_cluster *fe_cl; + struct mca_data *mca =3D cl->host; + if (!fe) return -EINVAL; - fe_cl =3D mca_dai_to_cluster(snd_soc_rtd_to_cpu(fe, 0)); =20 if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) { --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6CDBB21A44A; Sun, 18 May 2025 10:51:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565494; cv=none; b=pbmlTjj+2VaX7f0hbypuT18e0QxFIDVz4HkOKdGS2PwCxKHWlVW9LNO7ivP7VYrx9x/X/a1GCQsc7cczHDDQuoPtrM53AUJwEt2Brr2xb8WybMp5WRun5RhYRBllseHPNqrNY189rDz//2ZESrBAViVVOOgWS4bTZaMBI+6Fo7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565494; c=relaxed/simple; bh=u9dzxD0Sr+I+nYLHqPgn3dGTmdfcK9R2zDI6wYeixNM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rk4ydA7HY1s5O/nwmanYaPR/MRt9jzYoTW7uLxSHUhqfikIKaCltvbk+YxusBulkde7U0tr5JCyfkY0kaq311ZwPr6cNftNDtuB8nSWmguBXkbkTgPWoky+fCVwtE1+gX0LZ7Dh32q90IzwlaZ3riGWfl50O6K+2s9JwQHSRF50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VjrmsPWk; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VjrmsPWk" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-b26c5fd40a9so3654614a12.1; Sun, 18 May 2025 03:51:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565491; x=1748170291; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=g0zNbrAF22yEU0zbb+HKw5CmLrhpARa5+ZZ6Pk25Cv8=; b=VjrmsPWkPz16Xm+RObdlXJ7CEjAapEqiywPj8iFCPZ/V+he8n8o9vHhGAErY9GzGJu kbP3eAs8rDMQwgcaOO0P713+PdNzKnuQHdoy/nhZrV45Pl48DIMtCqozdZbs/7Qntqix gzmIpLDYNcuUTY4SSns8klN6QJjYhSE5IvihRYnF7dLkEK/Q/BQlQFHiq5rXZolytuTN 5Xs5y3HetT7oJmw5DRHMOubc8+s3gnMzvrmxWE2Fv1SM37gIJv7MZPUNguCL3AKjNQBt o0Kc+7rOM/FumAvGvA/URbV5hcVTutquWOpvoJ3m1fjt742PX6nRY7ruvYgTglHXancY vuSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565491; x=1748170291; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g0zNbrAF22yEU0zbb+HKw5CmLrhpARa5+ZZ6Pk25Cv8=; b=fYnyjqrPtyM6zak6zooP8NFWun3lNOP2LIV7KppnJACJiJDGLWf+MwFsiAQKiDJixp 4pVoq+h/Mi80JC2/jmI4O69HKHTNTaigKWtYG+0fFEt6v3lWnYmagXfIZCbWnaTKSOXI fHzSbbD0jMeQe3aKuxV6v46dQbqyJyPpsK6cPyvpBvRadER5ZITMEQY6fGYdlI3WYeyq FniYAjRHHQ6FrmlOLdQr+eoZnyJpfeDnJDHH3GRwgOFrPkJW79Fe4/odjjApYUAj1CPc WUZ2alDmhkOpAe3iDgrIUkai6/3szud81vWClSCwviZGIDq/T5HbU+gGrVrTo9TRNEWW YWcg== X-Forwarded-Encrypted: i=1; AJvYcCWLfzAVWyGBPOohFDY6uB/wRrnmdOz36NuhxwS2fKh0EoxQkns4TyP14oaRBSHU02d39WAurDzX7iM+xwY=@vger.kernel.org, AJvYcCX8scfSf0J7IrnwEUPOneyCjeZBzApP/OVJ3XaWoBexed79Y30Vcg0fM09qbMfh/kM0+LsxkunhOViB8Yo=@vger.kernel.org X-Gm-Message-State: AOJu0YxuXHcUVSGYAQGh07Xlgl/l19bdUmXcDhHUni2quAc4fouK7x0Y yJQyw8FUPCYSN0nEsVBaM5HqOjGq6mUu+wUp+Wow/ulfyHOTzMoInb4lxSP2rA== X-Gm-Gg: ASbGncsnWoHE9JMkjiUuxCD7GeKjviKzA6WedkvPIhlYCNloZ2cWpqo6bqdTNgSCreF ESgZ7ainYBvA46VHLepVL+Yg/Dyzr7+qGhvGcChpLORk9fvwRT2SgBsvLEyi8QPUZO09/oxBIV9 t2vIvgDyWvJiYxfYN0PVVos8tm3CeGyOESiHeT2Y4uUGbGBGhpdOyRByI4WPqecvUMQxfvYQulh tEigthG46Zxcmnav+hbuc2IcE6b3Kr1XYJKHQ7iqFKp1iNyRIrpRBtQbF4wy2NYZwSUWOop9KPR Qay/p9HpKBpdcrzA8MW2KcujBHf3Ji1/dSqH2LUcHPQvE+CKwHjIFajFYZs8a1y6KOcIBnXh/n3 2a9rI5SRckk9PKZBqkgU9aHwLkluQdVMKC5WLMljxBFgLAw== X-Google-Smtp-Source: AGHT+IEPpGn5Ti3sVQIvYHDOxmHfa9LJcnppVCLw/tNRCU6lwQ+mbbiAKZ3icAU5v4D87BrN7dh1yw== X-Received: by 2002:a17:902:ce91:b0:232:219c:2a4f with SMTP id d9443c01a7336-232219c2f99mr30793775ad.1.1747565491454; Sun, 18 May 2025 03:51:31 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:31 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:51 +1000 Subject: [PATCH 6/9] ASoC: apple: mca: Support FEs being clock consumers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-6-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6882; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=ekJFShdsNEaG7NlFWenUFGCCo9i2eZnSb0pcLx/Hnbs=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau2csrSs9fEnsn7Gi64y6WR4LPjSlc5dHXW8I3rVm+ cp1jV+8O0pZGMS4GGTFFFk2NAl5zDZiu9kvUrkXZg4rE8gQBi5OAZiIbwsjw8noq49TZoS1GN62 XVR3+LOYeR/b7WtHziZvCQwOnfnXr4bhn91f+dN8/cbB1Qm5heL2kb31C0L+7Vy1Y370suDDzyM 7WQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Support FEs being I2S clock consumers. This does not mean we support accepting clocks from outside the SoC (although it paves the way for that support in the future), but it means multiple FEs can attach to one BE, one being clock producer and the rest clock consumers. This is useful for grabbing I/V sense data on some machines, since in such a scenario the format of the sense data on the I2S bus differs from that of the audio data (the two formats differing in slot width). With two FEs attached to the bus, we can split the responsibilities and command different slot widths to the two. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 125 ++++++++++++++++++++----- 1 file changed, 104 insertions(+), 21 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 7c3e1eae8b963ff593fdcf54e4a1f2e5f64a63c1..be6ff55203121808463846bebda= 682cdd97fc42d 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -134,12 +134,17 @@ struct mca_cluster { struct clk *clk_parent; struct dma_chan *dma_chans[SNDRV_PCM_STREAM_LAST + 1]; =20 + bool clk_provider; + bool port_clk_started[SNDRV_PCM_STREAM_LAST + 1]; int port_clk_driver; /* The cluster driving this cluster's port */ =20 bool clocks_in_use[SNDRV_PCM_STREAM_LAST + 1]; struct device_link *pd_link; =20 + /* In case of clock consumer FE */ + int syncgen_in_use; + unsigned int bclk_ratio; =20 /* Masks etc. picked up via the set_tdm_slot method */ @@ -262,11 +267,32 @@ static int mca_fe_trigger(struct snd_pcm_substream *s= ubstream, int cmd, return 0; } =20 +static int mca_fe_get_port(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *fe =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_pcm_runtime *be; + struct snd_soc_dpcm *dpcm; + + be =3D NULL; + for_each_dpcm_be(fe, substream->stream, dpcm) { + be =3D dpcm->be; + break; + } + + if (!be) + return -EINVAL; + + return mca_dai_to_cluster(snd_soc_rtd_to_cpu(be, 0))->no; +} + static int mca_fe_enable_clocks(struct mca_cluster *cl) { struct mca_data *mca =3D cl->host; int ret; =20 + if (!cl->clk_provider) + return -EINVAL; + ret =3D clk_prepare_enable(cl->clk_parent); if (ret) { dev_err(mca->dev, @@ -340,7 +366,7 @@ static int mca_be_prepare(struct snd_pcm_substream *sub= stream, int ret; =20 if (cl->port_clk_driver < 0) - return -EINVAL; + return 0; =20 fe_cl =3D &mca->clusters[cl->port_clk_driver]; =20 @@ -361,6 +387,57 @@ static int mca_be_prepare(struct snd_pcm_substream *su= bstream, return 0; } =20 +static int mca_fe_prepare(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct mca_cluster *cl =3D mca_dai_to_cluster(dai); + struct mca_data *mca =3D cl->host; + + if (cl->clk_provider) + return 0; + + /* Turn on the cluster power domain if not already in use */ + if (!cl->syncgen_in_use) { + int port =3D mca_fe_get_port(substream); + + cl->pd_link =3D device_link_add(mca->dev, cl->pd_dev, + DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME | + DL_FLAG_RPM_ACTIVE); + if (!cl->pd_link) { + dev_err(mca->dev, + "cluster %d: unable to prop-up power domain\n", cl->no); + return -EINVAL; + } + + writel_relaxed(port + 6 + 1, + cl->base + REG_SYNCGEN_MCLK_SEL); + mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, + SYNCGEN_STATUS_EN); + } + cl->syncgen_in_use |=3D 1 << substream->stream; + + return 0; +} + +static int mca_fe_hw_free(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct mca_cluster *cl =3D mca_dai_to_cluster(dai); + + if (cl->clk_provider) + return 0; + + cl->syncgen_in_use &=3D ~(1 << substream->stream); + if (cl->syncgen_in_use) + return 0; + + mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, 0); + if (cl->pd_link) + device_link_del(cl->pd_link); + + return 0; +} + static unsigned int mca_crop_mask(unsigned int mask, int nchans) { while (hweight32(mask) > nchans) @@ -486,9 +563,18 @@ static int mca_fe_set_fmt(struct snd_soc_dai *dai, uns= igned int fmt) u32 serdes_conf =3D 0; u32 bitstart; =20 - if ((fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) !=3D - SND_SOC_DAIFMT_BP_FP) + switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { + case SND_SOC_DAIFMT_BP_FP: + cl->clk_provider =3D true; + break; + + case SND_SOC_DAIFMT_BC_FC: + cl->clk_provider =3D false; + break; + + default: goto err; + } =20 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { case SND_SOC_DAIFMT_I2S: @@ -545,24 +631,6 @@ static int mca_set_bclk_ratio(struct snd_soc_dai *dai,= unsigned int ratio) return 0; } =20 -static int mca_fe_get_port(struct snd_pcm_substream *substream) -{ - struct snd_soc_pcm_runtime *fe =3D snd_soc_substream_to_rtd(substream); - struct snd_soc_pcm_runtime *be; - struct snd_soc_dpcm *dpcm; - - be =3D NULL; - for_each_dpcm_be(fe, substream->stream, dpcm) { - be =3D dpcm->be; - break; - } - - if (!be) - return -EINVAL; - - return mca_dai_to_cluster(snd_soc_rtd_to_cpu(be, 0))->no; -} - static int mca_fe_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -687,6 +755,8 @@ static const struct snd_soc_dai_ops mca_fe_ops =3D { .set_tdm_slot =3D mca_fe_set_tdm_slot, .hw_params =3D mca_fe_hw_params, .trigger =3D mca_fe_trigger, + .prepare =3D mca_fe_prepare, + .hw_free =3D mca_fe_hw_free, }; =20 /* @@ -740,6 +810,9 @@ static int mca_be_startup(struct snd_pcm_substream *sub= stream, PORT_ENABLES_TX_DATA); } =20 + if (!fe_cl->clk_provider) + return 0; + if (mca_be_clk_started(cl)) { /* * Port is already started in the other direction. @@ -769,7 +842,10 @@ static int mca_be_startup(struct snd_pcm_substream *su= bstream, static void mca_be_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { + struct snd_soc_pcm_runtime *be =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_pcm_runtime *fe =3D mca_be_get_fe(be, substream->stream); struct mca_cluster *cl =3D mca_dai_to_cluster(dai); + struct mca_cluster *fe_cl; struct mca_data *mca =3D cl->host; =20 if (cl->clocks_in_use[substream->stream] && @@ -792,11 +868,18 @@ static void mca_be_shutdown(struct snd_pcm_substream = *substream, mca_fe_disable_clocks(fe_cl); } =20 + if (!fe) + return; + fe_cl =3D mca_dai_to_cluster(snd_soc_rtd_to_cpu(fe, 0)); + if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) { mca_modify(cl, REG_PORT_ENABLES, PORT_ENABLES_TX_DATA, 0); writel_relaxed(0, cl->base + REG_PORT_DATA_SEL); } =20 + if (!fe_cl->clk_provider) + return; + cl->port_clk_started[substream->stream] =3D false; if (!mca_be_clk_started(cl)) { /* --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3207D218EA1; Sun, 18 May 2025 10:51:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565497; cv=none; b=mJ9PN9TYLJpSMfDXzssUkW6jjo/tHNZLOSuJnTQlSyfmYgStKcMNOhdnnnAS73mSgxiugPCqX800ahwZHoj2ipVVugn7FF8yKKN1//f6i4ap7yXudH/AYY7fbP91vKANtbuWATzhqljmWELc3TzzWtzRlD53ORZXnQXc4qNT3zc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565497; c=relaxed/simple; bh=PIZEaBz87MJdSw7eO9zCitJI2ND1grAk1GZ/kO5+Be8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iXRXa1jkp/+q47Yn1Y1LBy+a3boXf98dfn9FI04X/iQ8jEwDdB+JPo5hJbZyxo0bLabSeMRuO5drFIuER+xOpQuP475Ua7iH1Q5JzjNfSgAbdfoB76LBCT5mz7Cf1iFRQSl1IZPp3S7NI970eSeLAXQIlyOY+FEpHZGk/oR+kLc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PaFZwTEE; arc=none smtp.client-ip=209.85.215.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PaFZwTEE" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-af59c920d32so2229679a12.0; Sun, 18 May 2025 03:51:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565495; x=1748170295; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ldh01POWj6tZC0Ymrmq06kriivz8DVjOcTeZNDTdnk8=; b=PaFZwTEElC1Au00idDw2SYBimDkDn0tBBrjjlxaTCb4B9iVlhHxDi8fam3a9dQjD8P pXSEmbbj3NVrMJ2yV4vSsMzhWhP3O9UEvE0VpbeC6EtU0lweUM+rOKGoVP8QxN7qCPMb n7mbrRpPj2uB1p+zAGfV06WihXr0SCZ04BDndPhagYwejdXdWs4loBW5RrecXgCwPZbY cjqjw/DR6eP7X7SkGxqSKFGMWD3LRNbRZ9QSxYl4C12r8UG2CeVlAEEx85OAm0cRJFx0 MEP6Lnc3p9rRUq7XpyTbPz5wghSkvk4iSbqIj9gCo6b5hSwYIQeUKVU0a/mr6HBcX0h0 bWlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565495; x=1748170295; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ldh01POWj6tZC0Ymrmq06kriivz8DVjOcTeZNDTdnk8=; b=DEDQg+yTDYHjV6n6I9fchhV0MS4OcaKQJ39+MZQYD7untVWiEUQF/7AcbNPBv8WZUw kqXyfEjM02Qp/Y4s3BTNpE7akbfKrkNqn6etCUiDk/8+yNaka832Zee+WMCqBqj4v1iD Q4diXSl/kp1DkCKZ1J8H3oeT4HQ532Pqkeu+Oss7sVM00nqL0CdgdIPQbaqoLYSWl+uq g5u45rUGH9Q9nKsikISSZj76Ww3BAOv5DRFnmVy1gyT7e5S8jAslJi9DYUW3KvCs7tyZ 7h/blXnE1MqThVJh5ZZHCV2vJm53slyrA8cHnQXcitsnEwhcojZBpQmYZ6bj7uBPOlTB iQoQ== X-Forwarded-Encrypted: i=1; AJvYcCUhKACF+i9Vc54QuHzMwAT9/xqk8CqpqPmhd3AdShWIwzVqCKv2gVLU/QePphdBcbS4W2/q/wAz6gp6nJo=@vger.kernel.org, AJvYcCW4tAVpwTkOHF/1krdShibuPehnckuHcQgrMJ+6rovErJSANpDVMVeADmx1DYPs51MCTlUVggI78XuIg7c=@vger.kernel.org X-Gm-Message-State: AOJu0Yywyb5DvynN+qkgH+acvY1KB/LEBdrN1picknozyTVHSEcYopHn uHULO7XrsqqOhc/LXRlrk6UDjHAUWyVTc//2Lvlc6g8YY56tvu28MxZeSwNpEQ== X-Gm-Gg: ASbGncvFYKCiBaCwuyyl1PVC5Fs8A/rHaAf73spYRwtcQgEfrdY02ZJgY4s2Qu4GzKF jgjZ8vFVMFi6Ug0j8YRKryMOdOV6hTVKzZQ1UqmBuz6AFsw3nlqom3N/Lnn1b3qtgPJnPJHqg8q lwEM5SNA0QsJFfVAcas7I3d7zN1TrZsE9uYmuDm2EmKQx4yZ/KiNMTw1iaXtjrMBVCywiI5BoBL wqM38tdmzMeYTl5kyMqX4EkmRBSRKLvatzhltg14r+gE+E+aWD+k+bMkbU6nctMSOT5RSZHubKS H0C6xHRjVbu1sjCG3nFy98a4srzOhY6AHTshwGVrBQKsrEK/s1jB0QIL+jWC2y4TEF0VygVGTF1 BCZO/yWnDWE/4INC3/qQpMVHhabNEmK/znqS4iOENn3A8K0o97rzZGm0k X-Google-Smtp-Source: AGHT+IFpn58gHw15Sq4sK88eTlsGZvNrZWJkEc3EHSOcZtUAiuMgcXKlRSwxIx/J9egajfGRIdbHmg== X-Received: by 2002:a17:902:dad0:b0:22e:4b74:5f66 with SMTP id d9443c01a7336-231d45a9ae9mr103931835ad.42.1747565495172; Sun, 18 May 2025 03:51:35 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:34 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:52 +1000 Subject: [PATCH 7/9] ASoC: apple: mca: Support capture on multiples BEs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-7-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3562; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=jssRvxpVtihkyIdNcxkCIk90/+e5Xkywb1sJNStLl1I=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau2fMPn3uofa6CKvfO73q5TkF9NVLShd/elgmN2H1z Yv7nJUaOkpZGMS4GGTFFFk2NAl5zDZiu9kvUrkXZg4rE8gQBi5OAZhIjhcjw+s52/fc0Ht+7LgV Z9Rvr5fNyU8ezdU5qv55S6pY7JNUwRKGf/qmSlP+vWJjSb7JuWzR5GOZIVO+P0l2WO3ZXFTNvcD ShxUA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er When multiple BEs are linked to a FE, the former behavior was to source the data line from the DIN pin of the first BE only. Change this to ORing the DIN inputs of all linked BEs. As long as the unused slots on each BE's line are zeroed out and the slots on the BEs don't overlap, this will work out well. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 31 +++++++++++-------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index be6ff55203121808463846bebda682cdd97fc42d..441da5ef3de1c0be1dc607ff249= 0046206660e59 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -267,22 +267,19 @@ static int mca_fe_trigger(struct snd_pcm_substream *s= ubstream, int cmd, return 0; } =20 -static int mca_fe_get_port(struct snd_pcm_substream *substream) +static int mca_fe_get_portmask(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *fe =3D snd_soc_substream_to_rtd(substream); - struct snd_soc_pcm_runtime *be; struct snd_soc_dpcm *dpcm; + int mask =3D 0; =20 - be =3D NULL; for_each_dpcm_be(fe, substream->stream, dpcm) { - be =3D dpcm->be; - break; - } + int no =3D mca_dai_to_cluster(snd_soc_rtd_to_cpu(dpcm->be, 0))->no; =20 - if (!be) - return -EINVAL; + mask |=3D 1 << no; + } =20 - return mca_dai_to_cluster(snd_soc_rtd_to_cpu(be, 0))->no; + return mask; } =20 static int mca_fe_enable_clocks(struct mca_cluster *cl) @@ -398,7 +395,7 @@ static int mca_fe_prepare(struct snd_pcm_substream *sub= stream, =20 /* Turn on the cluster power domain if not already in use */ if (!cl->syncgen_in_use) { - int port =3D mca_fe_get_port(substream); + int port =3D ffs(mca_fe_get_portmask(substream)) - 1; =20 cl->pd_link =3D device_link_add(mca->dev, cl->pd_dev, DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME | @@ -448,7 +445,7 @@ static unsigned int mca_crop_mask(unsigned int mask, in= t nchans) =20 static int mca_configure_serdes(struct mca_cluster *cl, int serdes_unit, unsigned int mask, int slots, int nchans, - int slot_width, bool is_tx, int port) + int slot_width, bool is_tx, int portmask) { __iomem void *serdes_base =3D cl->base + serdes_unit; u32 serdes_conf, serdes_conf_mask; @@ -507,7 +504,7 @@ static int mca_configure_serdes(struct mca_cluster *cl,= int serdes_unit, serdes_base + REG_RX_SERDES_SLOTMASK); writel_relaxed(~((u32)mca_crop_mask(mask, nchans)), serdes_base + REG_RX_SERDES_SLOTMASK + 0x4); - writel_relaxed(1 << port, + writel_relaxed(portmask, serdes_base + REG_RX_SERDES_PORT); } =20 @@ -644,7 +641,7 @@ static int mca_fe_hw_params(struct snd_pcm_substream *s= ubstream, unsigned long bclk_ratio; unsigned int tdm_slots, tdm_slot_width, tdm_mask; u32 regval, pad; - int ret, port, nchans_ceiled; + int ret, portmask, nchans_ceiled; =20 if (!cl->tdm_slot_width) { /* @@ -693,13 +690,13 @@ static int mca_fe_hw_params(struct snd_pcm_substream = *substream, tdm_mask =3D (1 << tdm_slots) - 1; } =20 - port =3D mca_fe_get_port(substream); - if (port < 0) - return port; + portmask =3D mca_fe_get_portmask(substream); + if (!portmask) + return -EINVAL; =20 ret =3D mca_configure_serdes(cl, is_tx ? CLUSTER_TX_OFF : CLUSTER_RX_OFF, tdm_mask, tdm_slots, params_channels(params), - tdm_slot_width, is_tx, port); + tdm_slot_width, is_tx, portmask); if (ret) return ret; =20 --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 25D1D21B191; Sun, 18 May 2025 10:51:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565501; cv=none; b=Ov5yc3Log8nKPjFFvchMverQ7CLkNOJX18DD4qElU2tVLJHhEF0RgJO2cEVxgu+VdhlUzrRy4hVM4I5FnsVmGql30ONwwSdNRzzJXmK6NYXCYTdp86N5qMMEX068/z3V92ppyHNRIZvGT3uXpuyGQtlqvFoJC3BWCO+aiSZqe7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565501; c=relaxed/simple; bh=kPw1Cx4vefSdvSAckl24nWDm+BechYSEdXFEpf/NZCA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YBvzJLc8/Bz1e8oGE2E7c/eZ6uZaoOZHvE7CRaKrf4kRLeBmPD4ZcaWBvxI2khyd0bh42WFNO5cOdVV6NPSt6vmbqZZOM3gJpKKIqcIr2WASupfv0Q8WBwC9H1BXx16Dc1gWnYMx6nXfSNNjqdbIP82I3d0d7+9Mi2VNZPATCi8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UXjosipZ; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UXjosipZ" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2320d06b728so5421045ad.1; Sun, 18 May 2025 03:51:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565499; x=1748170299; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Y+TQOteH29Xvjl/lra8+ehLYQjcHKmaHUtvhiWXI55o=; b=UXjosipZReBEQbX7lkv3VVX8pryLwghiOrig2PkxjqhBcev9hrk6nzvvvaFgTcF3b1 /ppQdlQsQrdyGrQJwWG8dY4bcqZuC1ZYfXn06BdUPQ04d510oQVuNjPTzFW6BuCb/bZM xKNypGZJh4IOnmr557V4OVVYQ/D2tJunOBx8Z65+TlJLhBN5WNN6vYIAsju6HKqvPoiU BNeSWT6VYi/nRPElvlzeibwvkMLSIBHuzR/mlF926qF7E58xM5BhNbEw/jVM9S8Rqm34 bf3JKvltqHcpNvvAZ86FWmMJW8d5FzGYUuZ+QvPkvFnrlfif9mP1WuZ+ywgKNeE5ID2e vkcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565499; x=1748170299; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y+TQOteH29Xvjl/lra8+ehLYQjcHKmaHUtvhiWXI55o=; b=JrwSoBLYaYapTuwNxCgoZtxaKCnxD9s+TThHf5pdIYP5o3cLRSJAk30hQcrqyD8nnk PEpOCkvjXV7VfBb/HLNP5rxht3eraVDrGO1zUl5GS/VxGsOWZS105XfLxaSylERi9c3J NB0iZzlZmWUmkmybe8hAFas6O15AnIB+6/+sm2DzZ9nVAebAv1b10FLSqR6q/IkC1AUJ OedEiW1hyCoMGIywR9kkX0KChGQe2ju0qo2FZjrr+YYT6kNZYEk0sUs7tgoqt5N2NV4F 5029EE2Ix0xn7idjDEaLQudleUF1nNIpT+kFU0PAwZCEUhQYQM7XCPJlHh3KivxLBoVs Qivw== X-Forwarded-Encrypted: i=1; AJvYcCV6peu3hvTGTv0ghsJzbsTiULjahEFq/kQtK6oJMyXZTFEGj+kjJxX3aqFLeATZ56PQTGr2BwkOPOiOS3A=@vger.kernel.org, AJvYcCVCWS4FTQwc7+dRHUPD09jJmW8NEYNIH6WjF8XPA7rXxjlg/RXvZZ3xGeQQ87oIPj2tkSFzYX6i/WtWWqU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6jjzkpdsLCELczodjTp74LCM/9brub5mK+HayWP6ILHsQyzdA BAimR1D81oX44ODFGAkDOAuW8QbB1zS45nwDWsQZEFCmb0SWF58HFknrVDXmTg== X-Gm-Gg: ASbGncsiu5v3o7gwCmTG2DAn3lgPV+y7EtAKPRc1QZuTw1IaaqXb3Eh6y4utNcQKo9Y 23JY5fObblD8cQ/gBIVa6cW16VhP1zd+Lk1TlLg9IYsHqc6FK2i9Q2A1EwHrzyg3O6Lbm2geKoY a8wuBOUoGLndgrCXA2XqHgc+TxN5y97XB5dN8GQ8oXzSASf5GOCcl4Nv37+Jnn0I2CvwN4wpmRe UjGxP9UOgrfWJQ1GVWaMs6Nju9X0hxq9RTRuR8qyW0YNZkKqVoW6xw+iZO6jCEuP4J7RO+JEQ6d Dk4uGpJGq9AD57mlQtBUtoQuXn40Q6XgrQbhFdEaeELYEc7qm7aFsCnYMSLecjEjm0bZPEHJd+F k0dRjphoMx2ddF/iw3ikZVzC9S3TWLdOXBM14fB6AAAQyBQ== X-Google-Smtp-Source: AGHT+IHv47cIK5TFVX7LQsUp0mVKo/9GdI8UP4lmtixQTPlHmzUKc9osp6FDpEvOMkXvZ1T56jVRwg== X-Received: by 2002:a17:902:d4c8:b0:220:eade:d77e with SMTP id d9443c01a7336-231d452da59mr140825685ad.40.1747565499176; Sun, 18 May 2025 03:51:39 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:38 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:53 +1000 Subject: [PATCH 8/9] ASoC: apple: mca: Do not mark clocks in use for non-providers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-8-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Hector Martin , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3334; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=JYVlVcyCFMtvwLmM3c16btYPlRB/A9G/oXVUQQNsX3w=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau2fo+J29vszrmZpWdmz/zDV7FRQ22DjPqOCYNWWbg v3zk13mHaUsDGJcDLJiiiwbmoQ8Zhux3ewXqdwLM4eVCWQIAxenAEzk7ktGhiMVpw+1lUjYnZ38 J/t2WDHTDXnBAxPf90lLGq8oWLmlM4+RYf+uN+u6BG/8PPPZb4vfJY8/swQrORIP3KsyrLld2z/ 9Ih8A X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin On the speakers PCM, this sequence: 1. Open playback 2. Open sense 3. Close playback 4. Close sense would result in the sense FE being marked as clocks in use at (2), since there is a clock provider (playback FE). Then at (4) this would WARN since there is no driver any more when closing the in use clocks. If (1) and (2) are reversed this does not happen, since the sense PCM is not marked as using the clocks when there is no provider yet. So, check explicitly whether the substream FE is a clock provider in be_prepare, and skip everything if it isn't. Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 67 ++++++++++++++----------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 441da5ef3de1c0be1dc607ff2490046206660e59..25d04b3d8a57a8551f2ac1c0cd2= dbf2997d907e8 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -354,36 +354,6 @@ static bool mca_fe_clocks_in_use(struct mca_cluster *c= l) return false; } =20 -static int mca_be_prepare(struct snd_pcm_substream *substream, - struct snd_soc_dai *dai) -{ - struct mca_cluster *cl =3D mca_dai_to_cluster(dai); - struct mca_data *mca =3D cl->host; - struct mca_cluster *fe_cl; - int ret; - - if (cl->port_clk_driver < 0) - return 0; - - fe_cl =3D &mca->clusters[cl->port_clk_driver]; - - /* - * Typically the CODECs we are paired with will require clocks - * to be present at time of unmute with the 'mute_stream' op - * or at time of DAPM widget power-up. We need to enable clocks - * here at the latest (frontend prepare would be too late). - */ - if (!mca_fe_clocks_in_use(fe_cl)) { - ret =3D mca_fe_enable_clocks(fe_cl); - if (ret < 0) - return ret; - } - - cl->clocks_in_use[substream->stream] =3D true; - - return 0; -} - static int mca_fe_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { @@ -787,6 +757,43 @@ static struct snd_soc_pcm_runtime *mca_be_get_fe(struc= t snd_soc_pcm_runtime *be, return fe; } =20 +static int mca_be_prepare(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_pcm_runtime *be =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_pcm_runtime *fe =3D mca_be_get_fe(be, substream->stream); + struct mca_cluster *cl =3D mca_dai_to_cluster(dai); + struct mca_data *mca =3D cl->host; + struct mca_cluster *fe_cl, *fe_clk_cl; + int ret; + + fe_cl =3D mca_dai_to_cluster(snd_soc_rtd_to_cpu(fe, 0)); + + if (!fe_cl->clk_provider) + return 0; + + if (cl->port_clk_driver < 0) + return 0; + + fe_clk_cl =3D &mca->clusters[cl->port_clk_driver]; + + /* + * Typically the CODECs we are paired with will require clocks + * to be present at time of unmute with the 'mute_stream' op + * or at time of DAPM widget power-up. We need to enable clocks + * here at the latest (frontend prepare would be too late). + */ + if (!mca_fe_clocks_in_use(fe_clk_cl)) { + ret =3D mca_fe_enable_clocks(fe_clk_cl); + if (ret < 0) + return ret; + } + + cl->clocks_in_use[substream->stream] =3D true; + + return 0; +} + static int mca_be_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { --=20 2.49.0 From nobody Fri Dec 19 17:14:37 2025 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9880A21B9C7; Sun, 18 May 2025 10:51:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565506; cv=none; b=EAK6YSI5gAyakWdAJ9W4FJs0PbgMd4b0oBDbydpL4CLp06thtGmfTZ58VGG74H4AxjCVmC9q2PVLN8+SqPl0ZIah0i5fdCvAfUwGyg0732q75GEOaSMf5gMQlKKa1EXfHFDOtXCVrzRgrp4cDlDIgqvqHvBNexVKwFnmwR0CHHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747565506; c=relaxed/simple; bh=4tneEjrLLbDxLH5yuVt5982xVp3BOh9Iew7CW9SasfA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rzk9fYKrPHxY9tL9gzdy4KzrqFwz3f+e5UWX/I0p2JEAoc1RDvm9yqIg1u42ZuPmRoNOyEvOUWGMs86pSWx2TP4nM5bYTXAPrxPHJHH0zBPbdYbofVpNnp4560YpQgoaZNeBCNhJgS9sI0dGj6csddWImT4EPmWzV+2V0JaG+44= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UKsEXD4v; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UKsEXD4v" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-231fd67a9aeso9277695ad.1; Sun, 18 May 2025 03:51:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747565503; x=1748170303; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=51qal+nEZuN8T7t3NgZ/LK0U2xqY70iM2If30xD70Os=; b=UKsEXD4v4PMB9mrAewCA+3g0lUFYMKdgUHYeevOGZg1VyD14pbst59VqJAVuuC9Cy3 1Bh7zyHcb6MzYC69t/QAF75Siq/1uEx3LFDUDSLEgmiY/t/61+q/tS5Ce4MkYuEDxhRA lNjsVvQbks6BEa4UfsI31lNrBqoYoTsT/E34LDEUkx4XUgxco3qxyHLG7DitQSTZmS9k dt7OUCBCB/767ke7P4b8hjh4l01h4VsTtLwenWCRh8dEskXxqC4EhpKnu7UywEbFYjiy bHg8to0RQ7MSLtdzbRliGCqM8MzhQUvgi52obebzfBqm2bYyFh/O1Cq/8u0n4PDZicO5 DqWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747565503; x=1748170303; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=51qal+nEZuN8T7t3NgZ/LK0U2xqY70iM2If30xD70Os=; b=KfuMCfDOp7OrC0ER9xQ2PCHhQo1wea+WDt6ZcTs7kC4M8u6paoUB8DK/MQaTBRdIcd SZ1sBorhQOCChx4ygpo+95jBWE4KByFma926N7U/hxGg/CfHLlXuBP9zeOc/jY4qzdyI 8AX4X1Kv0dZOGBD/Ofwlktk0g/Aa0TXzwhNBUbDk4aDBUMLB2iPlCgrcR7LHlvFJbOjo hzSRDiyk4MOHs6x3WgMmB2S8qk/jZb4SBizK4kAHxRmXExvzfyu3qaFgHBlyhlvY2cMb cFziapUya5a3JXOl+7v4YdtyquAq4uyHunMDS+P2w6ZK88VeXd/UczYHlwY6bTG9qtf6 CoZA== X-Forwarded-Encrypted: i=1; AJvYcCUfZmC7H0W6gD60WZtTP3MZgs/5wL+7CbMfZTeEGFO49zW/B//l0TyP42XPTgu4tk/3sFvq7dV7xMalEtw=@vger.kernel.org, AJvYcCWrXZ3jcNESlevrDhrCs34LfBfnkU9sje8+TtvYCPNS6LY1KBawRbwXQYIeAAr2Q0+htZE1J57sZ9PwfjE=@vger.kernel.org X-Gm-Message-State: AOJu0YwP/h0LpSTrqR9ZmC8ibcY6TAmOSH1aJ9TnIPaw2OzIzP+O3Xue mZZAmOREgIimv8spaIMuDMj1cqSRW6Sv65BoXLq71E/kJPr2ihuYJoO4ygRCJQ== X-Gm-Gg: ASbGncsjsCrdOKa7OHedXriv5Nh4OebMq0UFZU500baME8J4WAfcnQmayMQ4XmK8NPL aMBQgMczEsY3J6fUboEli+BimGeF0g7R/lsTZAOI7yRZ4RPhP3FFEYj++XEvN6YjAyDwbixSJWH oRW6p/u1QRWe6Axi3GtOhlMLb9pcWKWFpvmAzkHojfXHU3kogY5kBd3WXRf5CcxKZapdSXHuP0S T7rpqtkI3KoSVlrUW8h9DkAgm+6eB4+7LEsiEP87v6k/yHfPEBpWKwjKdJWRyNkt1BrQxxpcYca NvM7tBtnsMfhmfYYRvaKYMA6Qf99QTld7eM3Jvzv5MBGFghXbsRT8Fw11HGuwDue5lO7E60gTz/ K66pxKG/qACq7AF7DkXj6SWLg32DqU3QUqA4x4JSkpAGVuQ== X-Google-Smtp-Source: AGHT+IF+Y+vQADQsRgWRpYhwHELIYu7P2b0zFe6oPKNRetGepWzTVG+EAL/37OwVnj5EeXLmSUM1SA== X-Received: by 2002:a17:903:1b48:b0:22e:4b74:5f68 with SMTP id d9443c01a7336-231b39acfbcmr214052775ad.19.1747565503634; Sun, 18 May 2025 03:51:43 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-231d4edd259sm41956115ad.256.2025.05.18.03.51.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 03:51:42 -0700 (PDT) From: James Calligeros Date: Sun, 18 May 2025 20:50:54 +1000 Subject: [PATCH 9/9] ASoC: apple: mca: Add delay after configuring clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250518-mca-fixes-v1-9-ee1015a695f6@gmail.com> References: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> In-Reply-To: <20250518-mca-fixes-v1-0-ee1015a695f6@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Hector Martin , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1096; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=ekpJUrgwslgSSm//rnVrNbH1x1uOEDjoGU49rCtKwNc=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBmau2dcNBfZyniLo7vUzoPHy1xpdcuznHhb69lLBLpuv vxX8jKmo5SFQYyLQVZMkWVDk5DHbCO2m/0ilXth5rAygQxh4OIUgImU7WL4n6NfVFyh1Zrcv8H9 2XSJGw4H/jy749UbaLyfJXrzBPGQFYwMHZr7Um2uGF5P9DrYfIOZxdJvxmwBg68eoqs+bd5s3Hi WBQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin Right after the early FE setup, ADMAC gets told to start the DMA. This can end up in a weird "slip" state with the channels transposed. Waiting a bit fixes this; presumably this allows the clock to stabilize. Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 25d04b3d8a57a8551f2ac1c0cd2dbf2997d907e8..1c664c204504174df1d0af3cafb= e25235c678687 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -231,6 +231,12 @@ static void mca_fe_early_trigger(struct snd_pcm_substr= eam *substream, int cmd, FIELD_PREP(SERDES_CONF_SYNC_SEL, 0)); mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, FIELD_PREP(SERDES_CONF_SYNC_SEL, cl->no + 1)); + /* + * ADMAC gets started right after this. This delay seems + * to be needed for that to be reliable, e.g. ensure the + * clock is stable? + */ + udelay(100); break; default: break; --=20 2.49.0