From nobody Sat Sep 26 07:16:12 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B69CB4A842C; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; cv=none; b=HZx7W9eCz91I4wflqCTR/m2XPenxIzAAagP0s+Z57YLsFLd+Pwk7EsCO6pD+wmrVUL+YVlHzGB7vrDcImBytL8uKWRRsOFEet78nBm6wgVg+fq2UqI0TaymCfkWHajS6V70/5ZHZGuxNE+bpIdAelMG7o5s+QimGIyx9mawrCMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; c=relaxed/simple; bh=D46BWG2qTVt1t0AiaUNt4R05+bK4fA19/1UAlFczTXU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KTigpxG6r6SAgGlnlcCsHcjDK6A8KekzXTOwzXnTnIFrkTUXjEOsVLjtGUD6kj3T5SrHUXs7VLtrMZCi0V03sVs77Xvp3EzuQLss9s+7yE0q596905KDFaDKWc8Tm+fucFp8DG97dPkkN/hl0oQDDRORCV4tNzSnXjlF7wYw4JI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iNyY/fJI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iNyY/fJI" Received: by smtp.kernel.org (Postfix) with ESMTPS id 421D3C2BCF7; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1788460003; bh=D46BWG2qTVt1t0AiaUNt4R05+bK4fA19/1UAlFczTXU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=iNyY/fJI4cmb4/14HRAwZ2TpVvl5ldxia4RNHA30PZd6td5Ssmx9Up2x7Mh44lEul pkM16cEak9VfRayGTyNpoLhidcra2JhH68cP1oX+i1jLk/DWSdPK6RYhOpcb2ewhq4 odl+aTHt9OFryeMmafkpavLUJmpf74LZK5H3d9ylf9S/hPjfM4Pgqa/QB9Lg4dfSM5 M2uVIpEcfpMsjIWesbA6RRlqwZxUa4Kz5XAOKVp8+Fm6d2D0+hPWPwawGDRnQAErIF +jiuWMzsxvRH0fYBn1syzh6qM+O56LuzRqb0LZBUWjRffkzOC7jEjG0bX0DmYPxwk4 67+87Vh4e6GHw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2166BC61DD3; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 03 Sep 2026 20:26:37 +0200 Subject: [PATCH RFC v2 1/6] ASoC: qcom: sdm845: Demystify TDM masks a bit 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: <20260903-pixel3-audio-v2-1-7c22ed915291@ixit.cz> References: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> In-Reply-To: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , David Rhodes , Richard Fitzgerald , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , David Rhodes , Conor Dooley Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2687; i=david@ixit.cz; h=from:subject:message-id; bh=cPwrEY4ZNqiKfvbC0ASAoVk96Jl21/NzxFU+I7j9SBQ=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqmbvhxwq/202EQUg7sPGfMmY8UagSnnoYZN3nW tFBAMgI0qmJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapm74QAKCRBgAj/E00kg chwgEACEFfcVpyGEbKOWWdYcMAyngylTuHsY9hAchAakiWMg8mNUjb+G4VdoSIagaaGKzRhrZ/d EHSBe5JLdxart/C98n0J49NYtRt2z85WmaIpRXkhBRCV8x0IS5M/ROCppr7gFkO6CtizuavP1rP rB+WnwEHyAM07oeZPVeNvz+KOhyK7n/eY76kQuIds+3K+62UVRvrcivSE/fPqhmk8xuzmm15NmD 7yfIZWCB8Mq1DWqgtOHYhmIWqoTN5cbuAXom5Ul/ij1EtjIgUJZH+cj9CZAmQBM2237g61iyUQG Mw86EXqHXBDi38NR8RsO7W0vgrrcn73Y+VV6bFxYbqT08EsbzPPgm1xJrEc822lYhYS4pFCc2Qx hrcvnrM+dASSiI4858sDotZCs4U8++MFWJFuMHTwryd3ucEuqHx2mO8UZpzbHU9O7Kobl0y5/No yIJ/5EMYJoF3y1DQ0JJ0gx9zVEEFHuC3bcyAcjXdb+0YF+SfVTOIxW07QIWvMJrT7wjkjYUQkEm oF2AmKkrpKff/MKX0ZQdIfwfkstiu2azEpycpoCVKSySGhCQmxZ7AKXwggg3/4zSZt/zfJFyYHa dnr8veLLOqxMUe8lQf7tst0igh3F4HiDhL7WiQmO6Cfu1+14EmK+oTo9kTiO4ExsoZYNjXtDXG8 eRWpU1OnOCCwhCQ== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Describe the mask with the bits used for each RX/TX. Signed-off-by: David Heidelberg --- sound/soc/qcom/sdm845.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c index 6843ab8ba017e..0ce8265ab1c1f 100644 --- a/sound/soc/qcom/sdm845.c +++ b/sound/soc/qcom/sdm845.c @@ -18,19 +18,24 @@ #include "sdw.h" #include "../codecs/rt5663.h" =20 #define DRIVER_NAME "sdm845" #define DEFAULT_SAMPLE_RATE_48K 48000 #define DEFAULT_MCLK_RATE 24576000 #define TDM_BCLK_RATE 6144000 #define MI2S_BCLK_RATE 1536000 -#define LEFT_SPK_TDM_TX_MASK 0x30 -#define RIGHT_SPK_TDM_TX_MASK 0xC0 -#define SPK_TDM_RX_MASK 0x03 +#define LEFT_SPK_TDM_RX_MASK BIT(0) +#define RIGHT_SPK_TDM_RX_MASK BIT(1) +#define SPK_TDM_RX_MASK (LEFT_SPK_TDM_RX_MASK | RIGHT_SPK_TDM_RX_MASK) +#define MIC1_TDM_RX_MASK BIT(2) +#define MIC2_TDM_RX_MASK BIT(3) +#define MIC_TDM_RX_MASK (MIC1_TDM_RX_MASK | MIC2_TDM_RX_MASK) +#define LEFT_SPK_TDM_TX_MASK (BIT(4) | BIT(5)) +#define RIGHT_SPK_TDM_TX_MASK (BIT(6) | BIT(7)) #define NUM_TDM_SLOTS 8 #define SLIM_MAX_TX_PORTS 16 #define SLIM_MAX_RX_PORTS 13 #define WCD934X_DEFAULT_MCLK_RATE 9600000 =20 struct sdm845_snd_data { struct snd_soc_jack jack; bool jack_setup; @@ -107,34 +112,36 @@ static int sdm845_tdm_snd_hw_params(struct snd_pcm_su= bstream *substream, default: dev_err(rtd->dev, "%s: invalid param format 0x%x\n", __func__, params_format(params)); return -EINVAL; } =20 channels =3D params_channels(params); if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) { - ret =3D snd_soc_dai_set_tdm_slot(cpu_dai, 0, 0x3, - 8, slot_width); + ret =3D snd_soc_dai_set_tdm_slot(cpu_dai, 0, SPK_TDM_RX_MASK, + NUM_TDM_SLOTS, slot_width); if (ret < 0) { dev_err(rtd->dev, "%s: failed to set tdm slot, err:%d\n", __func__, ret); goto end; } =20 ret =3D snd_soc_dai_set_channel_map(cpu_dai, 0, NULL, channels, tdm_slot_offset); if (ret < 0) { dev_err(rtd->dev, "%s: failed to set channel map, err:%d\n", __func__, ret); goto end; } } else { - ret =3D snd_soc_dai_set_tdm_slot(cpu_dai, 0xf, 0, - 8, slot_width); + ret =3D snd_soc_dai_set_tdm_slot(cpu_dai, + SPK_TDM_RX_MASK | + MIC_TDM_RX_MASK, 0, + NUM_TDM_SLOTS, slot_width); if (ret < 0) { dev_err(rtd->dev, "%s: failed to set tdm slot, err:%d\n", __func__, ret); goto end; } =20 ret =3D snd_soc_dai_set_channel_map(cpu_dai, channels, tdm_slot_offset, 0, NULL); --=20 2.55.0 From nobody Sat Sep 26 07:16:12 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B6B6D4F30D4; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; cv=none; b=JkD1Nu0T+9AYyzXnEEMKNQCBcuMvb+RyAnRanYPsx2uhNiFa2yMxOw72vTf+7fmOIMhxbqHL1YOrd1BDJbjfZleSx3DgesjdbDAoOFQ3I26/46VAUEuRuLsfX2YzvEUrxSx/wK5/tTYPXEyDs4D0GGdBEKdo4dVoWSmUOeKq7eA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; c=relaxed/simple; bh=8HKNT4Quc+l1QMgCNYqlOsACz8lrus7AgcUoZu++PiU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bjG/zhROJbXwAPDLUeMIkH2s6BWG10vLgL6hf9elmwuNnqWfv5NwpDEigRFHERL7ayk15/nrH7j+jnONFHygQWmOVMOCw5+T5NzUpHfuPoMRKmbhxT2kl7ZeNa3auUsXeT+zuKPmFvN0vQ2cGcbGoNrGsLoMhLNwsxPiJ475ZU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BNoLW0d+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BNoLW0d+" Received: by smtp.kernel.org (Postfix) with ESMTPS id 53947C2BCFB; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1788460003; bh=8HKNT4Quc+l1QMgCNYqlOsACz8lrus7AgcUoZu++PiU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=BNoLW0d+cwRtxsdFwpdfJ5bWX6FmvCkf/RyrIYAR9I3HgoJsRQ4lJvMRejICexQ8V Gfww0ZeZR8WXy3ZXe1uO8kI9uzNj/luTFowrB1L9OTYM0sEIhT8CnL6igBEyzjIh5D GlTtGZbjrUNhmsQnMH3fK6gu+COXlz8k5eegXukDVvTiG81Dy3NCCS0zkxjNRGEbCU Af7tSKSaa7Rq3GAPqoqlynL6pBflIeGWfDnm7F/1GJ/xpk5y/PuDjB0msxVG4asfLk z+TkcAf9nPbShzIsCiOlQmeqr50e7AbysgCBSh+DhphX4iTC+FjTGNKc18i79gjsmD fpXm85L7CnlnA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3285DC624DB; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 03 Sep 2026 20:26:38 +0200 Subject: [PATCH RFC v2 2/6] ASoC: qcom: sdm845: use DSP_A format for TDM codec DAIs 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: <20260903-pixel3-audio-v2-2-7c22ed915291@ixit.cz> References: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> In-Reply-To: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , David Rhodes , Richard Fitzgerald , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , David Rhodes , Conor Dooley Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1269; i=david@ixit.cz; h=from:subject:message-id; bh=1wKqiBzByWUp0kGcvJt9kwURHXbEVlcog8LeXEB9/TU=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqmbvhddqIGVtEXOs2uUDDcFfq0XRCR8ZgEfEHf NbQDtltCjCJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapm74QAKCRBgAj/E00kg cq4ID/44AlVuaenS6d5+Hs9fVvSs6O+ByXmGPBqTTR2mVxCh1/eh4v8uXSU2Db65McM9SeMBloB JjnYK6pP2kWNwBl76u9Pd8/7G0J5KNbtMEJQ9hXADGypqL6d7IvR+l2j/aRR3V6/fP3SiqAB1rd PDBApYvFZiQ2GWSy+xhqyTfyUBr6PE9sY+wb6jC3aKT4/sirHAj7wJ4FefEW2TbicphWXbv8OvT IeJXiWOBwQiFBuve/7UZhVNq4dsoGgfUMo+FRMJgThjwA12uXk1SOWhycCt4aWjx8vWTzKwQpPq irZbwqUgm35a+0MfJZBipHE/QTG8PdOMpXw1nFV+Z1GdxH0mTPBT+hq+NZBiXBpaR4XeSfOurW2 vb8MDQQe8rvHggvX9BdfaPtYRng7hyQOYMhwnYt3mnff5Cn/69yMvCm9JbgJmzrsJqeVVhRBqwn wp0na5sM1z3hs7ptwD/2gwlIN091re9svLEVoiOAEVbf545MOyu6wFjpzHMniP0MtsvIO2qSY3c 1TSdEM5czTKmj/W+WJExLAhtiuHgYC+R3mCOdNk6wDSdp0P9FtmslNqYK0E35oWUgTWhhAg0LiZ Ne0mwldKyD2Vwthaa2Ghe/eFL/n8C5/eQDfeUeyP+M8LGdsP/JRnTmV/FIdUvxOsXdKO5ZwHFvK jDnPlI03bLMqisA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Before the DSP_B only worked because the only close-to-mainline consumer cs35l36 codec was patched to map both DSP_A and DSP_B to the same hardware register value (asp_fmt =3D 0), which is inherently DSP_A timing. Use the right codec (DSP_A) which works as expected. Signed-off-by: David Heidelberg --- sound/soc/qcom/sdm845.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c index 0ce8265ab1c1f..d1cc825fc5cdc 100644 --- a/sound/soc/qcom/sdm845.c +++ b/sound/soc/qcom/sdm845.c @@ -382,17 +382,17 @@ static int sdm845_snd_startup(struct snd_pcm_substrea= m *substream) case QUATERNARY_TDM_RX_0: case QUATERNARY_TDM_TX_0: if (++(data->quat_tdm_clk_count) =3D=3D 1) { snd_soc_dai_set_sysclk(cpu_dai, Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT, TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK); } =20 - codec_dai_fmt |=3D SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_B; + codec_dai_fmt |=3D SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_A; =20 for_each_rtd_codec_dais(rtd, j, codec_dai) { =20 if (!strcmp(codec_dai->component->name_prefix, "Left")) { ret =3D snd_soc_dai_set_fmt( codec_dai, codec_dai_fmt); if (ret < 0) { --=20 2.55.0 From nobody Sat Sep 26 07:16:12 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B68B5397E8E; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; cv=none; b=o99IeaNvQRchf1CwaEPos1FQe3Lz415bCfilCe/4TphxpGf192i00NCIyBJS9Vg4FJYxsTxUfsnRn8Ye+xizmJSdjQ2ZGrSdcib1wnSpVw5tpnNznRHf1/xkm4ZaVcrpY3ydA1elBxyMr7BTHxvKlaIsefgdP4KM9kaoOp2FBQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; c=relaxed/simple; bh=n4Yhu5lpsZfx7zcrkNYR9Q3EKATQp/GiJimM9lApN6g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RucHmsFYNvnzJ73lPsG8tgrkmAz7pFpAITjpuDastovbpGyAiDP3PwLl0vXFMAmZnNymd1QCxQxqJGbSIETzUn/ga7hWPf3+3hUHqiqO0EV5ymPzzskiTTYM8Ssf1cLe+vK4c7gvOXcTbzAcDyosZ8UcOo0IcChWo2KS4UywoE8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f3InK9Li; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f3InK9Li" Received: by smtp.kernel.org (Postfix) with ESMTPS id 60B8EC4AF0B; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1788460003; bh=n4Yhu5lpsZfx7zcrkNYR9Q3EKATQp/GiJimM9lApN6g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=f3InK9Li25GappYGi9RhY60UForWNkbeqw+1tj9JasXh7Y+mexifg4Bas4ug3ulCy NNWz7isjNnRH6lSdORzJUucegP88XLmYDSwVzxGYrnL23162xuBorXkas4YwsjvO7y o5zl9CBZ9HRFHPcB5P2g/lYcZTYtkLwlt8K/mkjZG8oeOL4rrNfNBrZbrypysqC4OX lzo7k7SKf5olBItRIB2r2qlbWlTavDO2/z+lnEtghYyVZXiAK1oc1VDKT2UGZEoTfo 01QpRVZgEWkWUJzXwCK4TOwvdUZ1br9L66LCyUxNeCHFD5uRZhepCd+MLahv0AnbB2 GAqV0phqjik0Q== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4249FC624DE; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 03 Sep 2026 20:26:39 +0200 Subject: [PATCH RFC v2 3/6] ASoC: qcom: sdm845: Use per-speaker RX masks for TDM slot assignment 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: <20260903-pixel3-audio-v2-3-7c22ed915291@ixit.cz> References: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> In-Reply-To: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , David Rhodes , Richard Fitzgerald , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , David Rhodes , Conor Dooley Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1658; i=david@ixit.cz; h=from:subject:message-id; bh=VW92RXiOO5nv27+E+RkT/N6Yp/7ZgcRQKzeb8agg9FI=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqmbvh3NTfrj1m1h88rAOq1LhKiZViyj1q4CoZa Pm0BfvwljyJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapm74QAKCRBgAj/E00kg chH4D/4wKr1ik+rYF/zXmIp1rnXHYXSp7bBAPwx8AdoB6o1dIc9UZwJI873aiGSi6zMofnnTHET SuSO912wwU9+Io0tzf3/TeUO+Qt0Mn6/yZqvI1x+kWnawE090OdIGrihSTo24xR20i4y5DFKZb3 GQzJjYY+4L8sX/t3aN4xn1wNKXBw+K3qv5dhi4j/D2vG7s7WczwAyyERzyGLBz5NxyIC2raBoLZ pwykee2wKTrNYL5hmVUl+t4pz0SpMe0XN3WWYjwMj1DyrrHjTlL63hiii+3ytvoA26Os1p0IJRG Z1oOEJxR7Z7B+apUSTdRelrBOQbJdkN9dnkpRFlxa7TVInvpdoXeFX/UtHN7EeKJf6mEazfpZwI VNzO8HXzwrXEAxrdIgLYsVdR4YVnX7qMfvrXU+gVpSVgT/EVA/JTXLtGV7jt1J4/LvwUjy3A3of 1oteF+UJJtOpclyKXA7eSggs1vIVk8095W+qjZevih1TXlHWRR2SREjJpXTKFzW4vcCHOFdM4GF Gbars/WBKkwFJM77lsGCerKtN2ejYVb1STEr4sUD8L8KzpoIfRMPP8gOcolre0ywafLSZi1wo1u +qGDCCMPyXo7einqVNbaNHwtAy8yiQQ7jWonb+Jq/f2rBBdvfGcL7OGk+Gq9ZZ+NdCVSLi0iTaF 7LJLr95AKYSv/Ig== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Both Left and Right codec DAIs were passing the same SPK_TDM_RX_MASK, both speakers ended up on slot 0, breaking the one speaker in configuration such as on Pixel 3. Split SPK_TDM_RX_MASK into per-speaker masks so that the Left codec gets slot 0 (rx_mask=3D0x01) and the Right codec gets slot 1 (rx_mask=3D0x02). This commit is here, so later CS35L36 receives correct slot for right and left speakers. Assisted-by: Claude:claude-4.6-opus Signed-off-by: David Heidelberg --- sound/soc/qcom/sdm845.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c index d1cc825fc5cdc..59cfa3b26cd4d 100644 --- a/sound/soc/qcom/sdm845.c +++ b/sound/soc/qcom/sdm845.c @@ -152,29 +152,29 @@ static int sdm845_tdm_snd_hw_params(struct snd_pcm_su= bstream *substream, } } =20 for_each_rtd_codec_dais(rtd, j, codec_dai) { =20 if (!strcmp(codec_dai->component->name_prefix, "Left")) { ret =3D snd_soc_dai_set_tdm_slot( codec_dai, LEFT_SPK_TDM_TX_MASK, - SPK_TDM_RX_MASK, NUM_TDM_SLOTS, + LEFT_SPK_TDM_RX_MASK, NUM_TDM_SLOTS, slot_width); if (ret < 0) { dev_err(rtd->dev, "DEV0 TDM slot err:%d\n", ret); return ret; } } =20 if (!strcmp(codec_dai->component->name_prefix, "Right")) { ret =3D snd_soc_dai_set_tdm_slot( codec_dai, RIGHT_SPK_TDM_TX_MASK, - SPK_TDM_RX_MASK, NUM_TDM_SLOTS, + RIGHT_SPK_TDM_RX_MASK, NUM_TDM_SLOTS, slot_width); if (ret < 0) { dev_err(rtd->dev, "DEV1 TDM slot err:%d\n", ret); return ret; } } } --=20 2.55.0 From nobody Sat Sep 26 07:16:12 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B92BB4F55C6; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; cv=none; b=PmuWz4ZFuYgEIH+tdqDEssmV4HotDgbQR9n7sFUjGtw/9vUi8LYzCx4aoruP7maRGs87Kl8Ouz5zH2UsUfS8JXHBoVwUvOhqCCYEyz8nG6+46Wu+HmNNahgdrrWGGJWUzuD2mCQUXt/AU9KdE7CahuyDnp5oA7xOF6Q9dQ/TrYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460003; c=relaxed/simple; bh=chfMDCvu0jGCv2MFl8WIbjOdk3NN3CN5sXF+rwFeDmI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FY1TkhPU1Ny5i80FZ7jb7k+j2WzodbhRQMncTxLm7Jd61/OnIj283zEltEzksQfkgxLdqerDBsHUpIjyGero7xQIY9kaVujJd4MXhLc+7d7i64M4AlrNVn9LswEnFJyuJuXGAmMwEpWkSlOTuK/FLBdSDqEw+vnJ4eSu6QgILOk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G2SDJmlo; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="G2SDJmlo" Received: by smtp.kernel.org (Postfix) with ESMTPS id 833A0C4AF14; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1788460003; bh=chfMDCvu0jGCv2MFl8WIbjOdk3NN3CN5sXF+rwFeDmI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=G2SDJmlo+dut9fAkAwcVgR5EfKeD8zUCnUdvdmYUgrCg6cS/EDBP34nHZF0SVibYf 8fyZNGWhxtN+aJ2n0vfGpwaTyUJmwB0b7LXLECmKblc7UHOEi1kTSFLSexEUVbqVVe VraflB/vG1nqkyKD7kcPDrudLhgdiRJNZGiF+zatBLXVXGLJ4ZKpVNQslHLmKHCYQH raoDpl+mHSKDAJrP4wm2jGcgOjSEBd7Yx4tpvrcQaWetxwKkB2hjvg3L5l3FHp5rz/ Wv2rbyaFCm9ONGWSf+oqC8zdoiaAozHVHHW3b89UuQIZ/PniA6dfPIIhxyGhj/EGfK 7CITlqkdMhryQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70988C61DD3; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 03 Sep 2026 20:26:40 +0200 Subject: [PATCH RFC v2 4/6] ASoC: qcom: sdm845: Set codec dai and component sysclk during startup 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: <20260903-pixel3-audio-v2-4-7c22ed915291@ixit.cz> References: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> In-Reply-To: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , David Rhodes , Richard Fitzgerald , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , David Rhodes , Conor Dooley Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1661; i=david@ixit.cz; h=from:subject:message-id; bh=sf3oRG8KF1GI0iFA9IGZLcdnFZs9OCe5HnE3apZFGXM=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqmbvhVf+BHR6OoT2qWp0MF2oRKI49tPqVizxc6 hnNYneoM22JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapm74QAKCRBgAj/E00kg chGQD/wKIzd9gp3hnX31hFcPrcgQ99vrDL0Fr9tuuMjOOX/NtGrh0zS9M1Rj6lkyhgehLbuucmQ o9XhapjIBx/UWWULyXlfTclOEBC/UPt42lnotVCEmnC/StoofpI7MMJTNfTV/Gw9Y1YVOZOATcP 9SGeUmzp5j7bfGw30iB5kPIJPPM8uuPgl8p8g9R0ZeWwP7mgGoALahPqYoz23a4F4WSuixneucm IWDE4c1FpsuWwGjxgx6XI6eav+PItqkgJNhOePNcoYInCEqU/Uvw674Crc9t6SK+50p1QqMhEQu M0/GcSNWAQx+htVv87QlvK/HoZHed1yQze8HL5tJ3O6fgumqkPrL+/bs0j0K0JJZfrKuyCHBO92 06hX+01HMqG691NFJyfYD+or4h1g2woy8aE9twgz08mNfmuZKM+FbWycVFw+kUhTL6lzc9UtsI/ l8XUFA9voii4QbBYmSHzBlLg2W9I9RdVie1k0vzQxkjdDF29nduqDwNO10s6sPlqjRF45cibRWW hYJH6zT0DG5/hUV/RpwhD7d2LFYDVvJT4Icc7chXM3tHliIskm/OgdV0MoGg9bvNmNSJdGxYfmO tecAgJO/4qYP1gfru9ZmpsZKYHvsLz0wv2Wy+rcJkXNqckUyd1a/uz81Vaiitp1RrxlQ/uI+hoW CuKsNgYTdW+kf/A== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg The cs35l36 codec needs the codec dai and component sysclk to be set during TDM startup. Set these for all codec DAIs on the QUATERNARY_TDM path, gracefully handling codecs that don't support sysclk by ignoring -ENOTSUPP returns. Based on work of Joel Selvaraj. Signed-off-by: David Heidelberg --- sound/soc/qcom/sdm845.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c index 59cfa3b26cd4d..f0fbec9c8df25 100644 --- a/sound/soc/qcom/sdm845.c +++ b/sound/soc/qcom/sdm845.c @@ -407,16 +407,38 @@ static int sdm845_snd_startup(struct snd_pcm_substrea= m *substream) ret =3D snd_soc_dai_set_fmt( codec_dai, codec_dai_fmt); if (ret < 0) { dev_err(rtd->dev, "Right TDM slot err:%d\n", ret); return ret; } } + + /* Set codec sysclk needed by codecs like cs35l36. */ + ret =3D snd_soc_dai_set_sysclk(codec_dai, 0, + TDM_BCLK_RATE, + SND_SOC_CLOCK_IN); + if (ret < 0 && ret !=3D -ENOTSUPP) { + dev_err(codec_dai->dev, + "Failed to set codec dai sysclk: %d\n", + ret); + return ret; + } + + ret =3D snd_soc_component_set_sysclk(codec_dai->component, + 0, 0, + TDM_BCLK_RATE, + SND_SOC_CLOCK_IN); + if (ret < 0 && ret !=3D -ENOTSUPP) { + dev_err(codec_dai->dev, + "Failed to set codec component sysclk: %d\n", + ret); + return ret; + } } break; case SLIMBUS_0_RX...SLIMBUS_6_TX: break; =20 default: pr_err("%s: invalid dai id 0x%x\n", __func__, cpu_dai->id); break; --=20 2.55.0 From nobody Sat Sep 26 07:16:12 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 21B8A4FECD8; Thu, 3 Sep 2026 18:26:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460004; cv=none; b=Ru7b93hXby1wHuVQ+N7F4wg2vpAR0TgmSCrTEJ2HEEhj+jBrOcGaZ4fyLu9QMNItTrHjYt+g2q8nBKE9n3FZxlN1pZiuze7YvxA6/0mdEJAFiymLSpzwdr2i1p+GKtUzBx8ETXQuHvYGT4IeyfhMw35g4p4940mL0ZRXnWagt8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460004; c=relaxed/simple; bh=k/neC56RleN9fmV8C1kKi07iQq6i9gc6kvB3c7MVENY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IbAhckyXXzj36ldKKV0POZ9d4RZgD67g6/zwBlqh6eBRLthoctYVGThFR5oDQ2rLwn9kLd7iBIn15xZ6nA1bsThOXHClmu21T7l8iONdFjThMVm6d4azjmBVcVWKWMo60x+1FkpYGIf8kFR/uxuioH4S17h4DmKVeKuJ7L0ZfKc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sR7JSRN4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sR7JSRN4" Received: by smtp.kernel.org (Postfix) with ESMTPS id 9958DC4AF48; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1788460003; bh=k/neC56RleN9fmV8C1kKi07iQq6i9gc6kvB3c7MVENY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=sR7JSRN4+vBOyeislHAsfsKHqVvQxxhJ5JEfAdqMVITaxsvUpyMnw63o6Z0dJYDH8 R3+V1rNazSh7rmn/iZ2JncoSkroc//ZKiAVjy3mjL1m3T9zEpk0Vp2P++H5amFnN8D yBjEEnJHDktoudAk6MDOP/s5LK0ymy56H2C527ho94mlA5W8XQCZ8O5jrA9rD3nXPI 6K7Ghmw9/AzR/Aubj3WnCeAEmMrUrcC2IuA5LOqe2tEsQP7hjov9+d64WNRlw126c7 SepV7yVOwHWtTfaczLVqT46ng2ayyYPSvpg4tyQTAFN9wiTG/TTz1Kf2jy/2AYhfjp R0DjNy/7sUCxQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82B3FC624DB; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 03 Sep 2026 20:26:41 +0200 Subject: [PATCH RFC v2 5/6] ASoC: cs35l36: Implement set_tdm_slot to program RX and TX slots 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: <20260903-pixel3-audio-v2-5-7c22ed915291@ixit.cz> References: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> In-Reply-To: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , David Rhodes , Richard Fitzgerald , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , David Rhodes , Conor Dooley Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2990; i=david@ixit.cz; h=from:subject:message-id; bh=ym0/FZGn+mYbakmqUH1BRKBz1D0NS99SfJsNBeHBZQs=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqmbvhWz/gfsv85ZCKgoKangayDG05Zi49SJDpn sE/h/EP9kmJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapm74QAKCRBgAj/E00kg cunzD/4tamaMGNQ9rjorRT9oA7X0iaUYI7EcCyocbR0HWK24zuIOYIMOWiTMOsnPtt5bsSwC3NK ooXk5VSSJiAEDl8DHtzcDynx2kYfY7pu2XQlb6WqoqvIAXcjPc7mVMsFrbZK09/H/Q1V8oOL7Cf ugluLr0nwXNQeKc3Ipg/P9H1VrhRrubvBCAAYzvPLeQNzJTZX+G183ETaJTc08KaJI8/xSnoWtm sxUyZyQqQz/SpKQWni9OZu98gwi/YainoTeYYiRK0BTYA22Fp2UGjlc+EzQ2Ki8Pa7Gwv0N/a6U w1LEWbVyBfUdmHEqZRcy8if17gwwiVST1JQ6srL9E6UNYtiuCAWhjtwAfyve1iw77PaqlzxYfdx vokQuC2N8Ho//3F4sc5VIgz02Yd0NpCPtxNMb86RplSKv89pn4QTAAKjoObEBx5qAyQsfOKU00u j/Vhx65v4kkccdLdglqmBVpKxVpVt/SQLRJHQmIL9E0/1IZmRqzNkPcem7vJtNgdPts3dpkVw4u 9DOkQBJXaBpezF7Vb2Mb+JzhvzoJHUX5u2kamXh64TfOi7psMM8oxvn5gQbBPvl6VCL6CewlQzQ cWFoYsKlyFYxgQ+c7e3yuRGw4S4od3ITr8JoQfx9rTOW3nh+m+Drd803eqPcfEoEkIEyRsbytuQ TOFDnIohNw5P7mA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Program the ASP RX and TX slot registers from the TDM masks passed by the machine driver. Each set bit in a mask names a slot; codec channels are assigned to those slots in order, ASPRX1 taking the first RX slot and ASPTX1..TX8 the first eight TX slots, with a warning if the mask names more slots than the device has channels. Passing slots =3D=3D 0 or an empty mask restores the hardware defaults, ASPRX1 in slot 0 and ASPTX1..TX8 in slots 0..7. This lets a machine driver with several amplifiers on one bus, such as sdm845 with two CS35L36, put each amplifier on its own RX slot and keep their TX slots from colliding. Assisted-by: Claude:claude-4.6-opus Signed-off-by: David Heidelberg Reviewed-by: Charles Keepax --- sound/soc/codecs/cs35l36.c | 44 ++++++++++++++++++++++++++++++++++++++++++= ++ 1 file changed, 44 insertions(+) diff --git a/sound/soc/codecs/cs35l36.c b/sound/soc/codecs/cs35l36.c index 89645327945f1..4d35ca6291548 100644 --- a/sound/soc/codecs/cs35l36.c +++ b/sound/soc/codecs/cs35l36.c @@ -942,20 +942,64 @@ static const struct cs35l36_pll_config *cs35l36_get_c= lk_config( for (i =3D 0; i < ARRAY_SIZE(cs35l36_pll_sysclk); i++) { if (cs35l36_pll_sysclk[i].freq =3D=3D freq) return &cs35l36_pll_sysclk[i]; } =20 return NULL; } =20 +static void cs35l36_mask_to_slots(struct cs35l36_private *cs35l36, + unsigned long mask, unsigned int base_reg, + unsigned int nchan) +{ + unsigned int chan =3D 0, shift; + int slot; + + /* Two 6-bit slot fields per register, at bits 0 and 16 */ + for_each_set_bit(slot, &mask, BITS_PER_TYPE(mask)) { + if (chan =3D=3D nchan) { + dev_warn(cs35l36->dev, + "Too many slots in TDM mask: %lx\n", mask); + return; + } + + shift =3D (chan % 2) * CS35L36_ASP_TX2_SLOT_SHIFT; + regmap_update_bits(cs35l36->regmap, base_reg + (chan / 2) * 4, + CS35L36_ASP_RX1_SLOT_MASK << shift, + slot << shift); + chan++; + } +} + +static int cs35l36_set_tdm_slot(struct snd_soc_dai *dai, + unsigned int tx_mask, unsigned int rx_mask, + int slots, int slot_width) +{ + struct cs35l36_private *cs35l36 =3D + snd_soc_component_get_drvdata(dai->component); + + /* Note: rx/tx is from point of view of the CPU end */ + if (!slots || !rx_mask) + rx_mask =3D BIT(0); /* ASPRX1 in slot 0 */ + + if (!slots || !tx_mask) + tx_mask =3D GENMASK(7, 0); /* ASPTX1..8 in slots 0..7 */ + + cs35l36_mask_to_slots(cs35l36, rx_mask, CS35L36_ASP_RX1_SLOT, 1); + cs35l36_mask_to_slots(cs35l36, tx_mask, CS35L36_ASP_TX1_TX2_SLOT, 8); + + return 0; +} + static const struct snd_soc_dai_ops cs35l36_ops =3D { .set_fmt =3D cs35l36_set_dai_fmt, .hw_params =3D cs35l36_pcm_hw_params, .set_sysclk =3D cs35l36_dai_set_sysclk, + .set_tdm_slot =3D cs35l36_set_tdm_slot, }; =20 #define CS35L36_RATES ( \ SNDRV_PCM_RATE_8000_48000 | \ SNDRV_PCM_RATE_12000 | \ SNDRV_PCM_RATE_24000 | \ SNDRV_PCM_RATE_88200 | \ SNDRV_PCM_RATE_96000 | \ --=20 2.55.0 From nobody Sat Sep 26 07:16:12 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 21A614FECD6; Thu, 3 Sep 2026 18:26:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460004; cv=none; b=o7mhfYcuaSoM/FwayLyz2nETb/lsSj5T1tCjQ7Zkj2d1AaIuJCKQ0S/F3Yn3fG4jUg7mb/QEkqbNpyzu84TMdx/WAHebqdBb+ZJpbY+xbNFewH6RuzQUHkfMsyWMiwyJNa0rh3WCny0yRjM2bBWWRRgJ/FnlddRS8AA6yeoHdDI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788460004; c=relaxed/simple; bh=0Wny3MyWQ81+tlNB90k7g1GgQgq82xtFl3DomK3NlRU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fxK+l4CArASEW75U8N6csT5bTHdrg1wyZfy5kSEOcawlEoTHLT3uouAsLuvCNkb593ni1OD2aQ06BqpwdQt+1kdrUfmRGoYC0QkHE5m4/7FmIYkloy00o6XcBTF3bhTo3pRR3I4n7AUZg3PmyALKfZaPqCp08YoY496W/3VeEcQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qg6k6ynD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qg6k6ynD" Received: by smtp.kernel.org (Postfix) with ESMTPS id A494FC4AF54; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1788460003; bh=0Wny3MyWQ81+tlNB90k7g1GgQgq82xtFl3DomK3NlRU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=qg6k6ynDxzgm/qBRr157zdb025YIaILciyYEMB2tAbtFR05zqCaontoV6ssirhJPx YeyT1+99MUdv2b1q+VAQkVxWrLGXYqdJDTjcrquFHpB3M2I8DKmpRatc1Fcehi4hvT DXpEAYd/qO+xrTuReioLwlXjIv2FfPdceDJubhrfK/GAbibm+Fu01deGmUNeeG635d 4bCTjCfvdwkM7tSowHKgKODC2yClfZlFhvLw3cmlhXYnx8RhGkjHT4/TQIpxLQ91Es QMuaPjuYXic8XlK5vvKzoSY1dR+AQqFe/LCP/A4iZvaDu5qeYTJCrr+XaiVyAcye1A GzY+KJJKrEcjQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 925E1C624DA; Thu, 3 Sep 2026 18:26:43 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 03 Sep 2026 20:26:42 +0200 Subject: [PATCH RFC v2 6/6] arm64: dts: qcom: sdm845-google: Add basic audio support 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: <20260903-pixel3-audio-v2-6-7c22ed915291@ixit.cz> References: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> In-Reply-To: <20260903-pixel3-audio-v2-0-7c22ed915291@ixit.cz> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , David Rhodes , Richard Fitzgerald , Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , David Rhodes , Conor Dooley Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, devicetree@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5540; i=david@ixit.cz; h=from:subject:message-id; bh=kcOJuw/9+ohJx6Qaeb4TQNVMUEcnU0DSvegSZd7bX2g=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqmbvhTfl1EXtZDTwfw3yAzBzxGM/FJIhTIo2ys TErcfXu9aKJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCapm74QAKCRBgAj/E00kg ckGSD/wJ69vnz1ofZpIVB54E7qYekdE6wOfLXvQU1FH0YYOqrFMGRAU+JbWToP6a+MdIPQNksrH UulLFMOuFqpsYaeYOH3MWcCD81Qre+prVb1JOdG9wgu01HK/PPJmLm94fIcmTtGBsGtoZX5l3yd y1L8VAJXUrtWo7o2GgwPyI+2z74nzS97lZeNswWdumyVo0rym37nGkHCye0GZx3k0L4eaSefnmT 9fluoLkgSIc8RxJOoI9viLPGMFEnJ8C21kNiKpyeoqqX3G/DM1vzguJjwFecUxkKg1xifxNvUYs wcAp4bpmSVundraSCx2L9tH19n0y3s48eaYd+KZxfQW6uJjQBupSHiyEjN+k5WRhIQvg5dqY6mA pRoo6Wmqt7r5vCEWskufA8ys+vAoIt3pzOwb4u6tOnX3JuIsG8i6l0LrME8h1CfMKi8P8O4eTIF UzxabCiBsvwFAdPfnZrsKh8jrkbl3AizELlqnVtHURVNkhS5lpZAxEMZNfwt5NcTgWAkJJXyH4s XH7a3BNXhzWNBSozBwFcZkEtVOjoCEFMCvTBy1U4IgS/tacR8ryUbzMrVVG42WLQ8awIhqde9Zy 436Romslj+hPeZrDHFWhKlzNr9voN7wXvYY7FyuONlbk9GHiEaL2V6lbOseKge71k34yeeG6QeO +9+Ylw4IfRvUfWg== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Introduce support for sound card and wire two CS35L36 audio codecs for top and bottom speakers. Inspired by commit from Joel Selvaraj. Signed-off-by: David Heidelberg --- arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 132 +++++++++++++++++= +++- 1 file changed, 130 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi b/arch/arm6= 4/boot/dts/qcom/sdm845-google-common.dtsi index 9e952f9862f24..cf87b582e3997 100644 --- a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi +++ b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi @@ -2,16 +2,18 @@ =20 /dts-v1/; =20 #include #include #include #include #include +#include +#include =20 #include "sdm845.dtsi" #include "pm8998.dtsi" #include "pmi8998.dtsi" =20 /delete-node/ &mpss_region; /delete-node/ &venus_mem; /delete-node/ &cdsp_mem; @@ -404,19 +406,61 @@ nfc@28 { firmware-gpios =3D <&tlmm 79 GPIO_ACTIVE_HIGH>; =20 pinctrl-0 =3D <&nfc_int_default &nfc_enable_default>; pinctrl-names =3D "default"; }; }; =20 &i2c12 { - /* Bottom spkr (right) CS35L36 @ 40 */ + status =3D "okay"; + + cs35l36_bottom: audio-codec@40 { + compatible =3D "cirrus,cs35l36"; + reg =3D <0x40>; + reset-gpios =3D <&tlmm 112 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right"; /* Bottom */ + VA-supply =3D <&vreg_s4a_1p8>; + interrupts-extended =3D <&tlmm 115 IRQ_TYPE_LEVEL_LOW>; + + pinctrl-0 =3D <&cs35l36_bottom_default_state>; + pinctrl-names =3D "default"; + + cirrus,boost-ind-nanohenry =3D <1000>; + cirrus,boost-ctl-select =3D <1>; + cirrus,boost-ctl-millivolt =3D <10000>; + cirrus,boost-peak-milliamp =3D <3700>; + cirrus,temp-warn-threshold =3D <1>; + cirrus,multi-amp-mode; + cirrus,irq-drive-select =3D <0>; + cirrus,irq-gpio-select =3D <0>; + }; =20 - /* Top spkr (left) CS35L36 @ 41 */ + cs35l36_top: audio-codec@41 { + compatible =3D "cirrus,cs35l36"; + reg =3D <0x41>; + reset-gpios =3D <&tlmm 75 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left"; /* Top */ + VA-supply =3D <&vreg_s4a_1p8>; + interrupts-extended =3D <&tlmm 40 IRQ_TYPE_LEVEL_LOW>; + + pinctrl-0 =3D <&cs35l36_top_default_state>; + pinctrl-names =3D "default"; + + cirrus,boost-ind-nanohenry =3D <1000>; + cirrus,boost-ctl-select =3D <0x01>; + cirrus,boost-ctl-millivolt =3D <10000>; + cirrus,boost-peak-milliamp =3D <3700>; + cirrus,temp-warn-threshold =3D <1>; + cirrus,multi-amp-mode; + cirrus,irq-drive-select =3D <0>; + cirrus,irq-gpio-select =3D <0>; + }; }; =20 &ipa { firmware-name =3D "qcom/sdm845/Google/blueline/ipa_fws.mbn"; memory-region =3D <&ipa_fw_mem>; =20 status =3D "okay"; }; @@ -449,16 +493,35 @@ &pm8998_resin { }; =20 &pmi8998_charger { monitored-battery =3D <&battery>; =20 status =3D "okay"; }; =20 +&q6afedai { + dai@72 { + reg =3D ; + + qcom,tdm-sync-mode =3D <0>; + qcom,tdm-sync-src =3D <1>; + qcom,tdm-data-out =3D <0>; + qcom,tdm-invert-sync =3D <0>; + qcom,tdm-data-delay =3D <1>; + qcom,tdm-data-align =3D <0>; + }; +}; + +&q6asmdai { + dai@0 { + reg =3D ; + }; +}; + &qupv3_id_0 { status =3D "okay"; }; =20 &qupv3_id_1 { status =3D "okay"; }; =20 @@ -467,16 +530,49 @@ &qup_uart9_rx { bias-pull-up; }; =20 &qup_uart9_tx { drive-strength =3D <2>; bias-disable; }; =20 +&sound { + compatible =3D "qcom,sdm845-sndcard"; + model =3D "blueline"; + pinctrl-0 =3D <&quat_mi2s_active>, <&quat_mi2s_sd0_active>, + <&quat_mi2s_sd1_active>; + pinctrl-names =3D "default"; + + /* mm[0-9]-dai-link nodes must be positioned first regardless of sorting = */ + mm1-dai-link { + link-name =3D "MultiMedia1"; + + cpu { + sound-dai =3D <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>; + }; + }; + + cs35l36-dai-link { + link-name =3D "Speaker Playback"; + + codec { + sound-dai =3D <&cs35l36_bottom>, <&cs35l36_top>; + }; + + cpu { + sound-dai =3D <&q6afedai QUATERNARY_TDM_RX_0>; + }; + + platform { + sound-dai =3D <&q6routing>; + }; + }; +}; + &tlmm { gpio-reserved-ranges =3D < 0 4>, /* SPI (Intel MNH Pixel Visual Core) */ <81 4>; /* SPI (most likely Fingerprint Cards FPC1075) */ =20 nfc_int_default: nfc-int-default-state { pins =3D "gpio63"; function =3D "gpio"; drive-strength =3D <2>; @@ -505,16 +601,48 @@ touchscreen_pins: ts-pins-gpio-state { }; =20 touchscreen_i2c_pins: qup-i2c2-gpio-state { pins =3D "gpio27", "gpio28"; function =3D "gpio"; drive-strength =3D <2>; bias-disable; }; + + cs35l36_bottom_default_state: cs35l36-bottom-default-state { + reset-pins { + pins =3D "gpio112"; + function =3D "gpio"; + drive-strength =3D <2>; + bias-disable; + }; + + irq-pins { + pins =3D "gpio115"; + function =3D "gpio"; + drive-strength =3D <2>; + bias-pull-up; + }; + }; + + cs35l36_top_default_state: cs35l36-top-default-state { + irq-pins { + pins =3D "gpio40"; + function =3D "gpio"; + drive-strength =3D <2>; + bias-pull-up; + }; + + reset-pins { + pins =3D "gpio75"; + function =3D "gpio"; + drive-strength =3D <2>; + bias-disable; + }; + }; }; =20 &uart6 { pinctrl-0 =3D <&qup_uart6_4pin>; =20 status =3D "okay"; =20 bluetooth { --=20 2.55.0