From nobody Mon Jun 8 05:26:21 2026 Received: from mail-m93152.xmail.ntesmail.com (mail-m93152.xmail.ntesmail.com [103.126.93.152]) (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 E5184134CF; Sat, 6 Jun 2026 18:58:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.126.93.152 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780772336; cv=none; b=IxpWdkAl9BZJ1Ic6la3W6jbzVs9s/kBfMNvEZUBbvcv5wX7Z1dKw8P9RQxf8gSTc1TTrG77NDXVM8z2MiDQRq9gkZfgc4et0YA+0nHHllCBLPORhU7X2w2EzN6Jy+XRKdq9yXYZOMfNXyZy7Cgg8wyedaqBXg4czlF/hDNavrPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780772336; c=relaxed/simple; bh=m88qVbdluM64RSwLFqRXoNDpYWbOzjnmYJ02QfOknSQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CY5swjNuMb0Wpm2EN335yL/27RzrNaHCHA2Dnjij9Bzmyf2699rFeUkxWuP5TemqSDJB2YzQHgWXmmKjAJObz3em6bfv4XszFJxh2bQa5x0AaXf94Te+pSOaILyS37dkzUYvaTQuyxbRGNdeZMDhdOeZEN3TJawl8KggoDFuAS4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com; spf=pass smtp.mailfrom=thundersoft.com; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b=Z+0IW+16; arc=none smtp.client-ip=103.126.93.152 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b="Z+0IW+16" Received: from [127.0.1.1] (unknown [113.235.125.44]) by smtp.qiye.163.com (Hmail) with ESMTP id 415a2503a; Sun, 7 Jun 2026 02:58:42 +0800 (GMT+08:00) From: Hongyang Zhao Date: Sun, 07 Jun 2026 02:58:17 +0800 Subject: [PATCH 1/5] ASoC: dt-bindings: es8316: Document jack detect inversion 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: <20260607-rubikpi-next-20260605-v1-1-7f334e16fea6@thundersoft.com> References: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> In-Reply-To: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Daniel Drake , Katsuhiro Suzuki , Matteo Martelli , Binbin Zhou , Srinivas Kandagatla , Jaroslav Kysela , Takashi Iwai , Bjorn Andersson , Konrad Dybcio Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Hongyang Zhao , mohammad.rafi.shaik@oss.qualcomm.com, rosh@debian.org, Krzysztof Kozlowski X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780772320; l=1048; i=hongyang.zhao@thundersoft.com; s=20251115; h=from:subject:message-id; bh=m88qVbdluM64RSwLFqRXoNDpYWbOzjnmYJ02QfOknSQ=; b=QLzThrNUxw4Lby2sFPYgjJwtc3uBY8sxASveB9EWgaDru2EI3v08egBiKLZd+meoDy56kOkSs 1KNuMUSQw+cDWnkpiGHB9Wh4Dm5yxgHLUvdf3NcbQ0Q3VRv5cumLUaK X-Developer-Key: i=hongyang.zhao@thundersoft.com; a=ed25519; pk=0M0CJ1s9WiFZwli2JsxLB9ykikp5WkpKzCWgpdANKNI= X-HM-Tid: 0a9e9e4d3cdf09d5kunm343af971138add X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlCSkNNVh1MS01IHhhOQ01JTlYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlKSkhVSUhOVUpJTlVPT1lXWRYaDxIVHRRZQVlPS0hVSk tJT09PSFVKS0tVSkJLS1kG DKIM-Signature: a=rsa-sha256; b=Z+0IW+160aYUKA3LNzoniNc//44PX3DvWK203KKzR3NkTJw4zVsWj/t8+ZWjjbn+GVyQex8ThxxvGojWcVVT9zakW9O/6XVk717BAodA04Uw73qw2HVBVAanNoNwKJLmYpb8qPs4Ta3g9sMzCb2j8r0hqAl7BnEZnhzUGKoC9rs=; c=relaxed/relaxed; s=default; d=thundersoft.com; v=1; bh=bw+txc/ADse1JJow5q9GzM7efFpmiteX5+u/h3bA03Y=; h=date:mime-version:subject:message-id:from; The ES8316 codec driver already supports the everest,jack-detect-inverted property to invert the jack detection logic, but the property is not documented in the devicetree binding. Document the property. Acked-by: Krzysztof Kozlowski Signed-off-by: Hongyang Zhao --- Documentation/devicetree/bindings/sound/everest,es8316.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/everest,es8316.yaml b/= Documentation/devicetree/bindings/sound/everest,es8316.yaml index fe5d938ca310..a0a4c1c99cf3 100644 --- a/Documentation/devicetree/bindings/sound/everest,es8316.yaml +++ b/Documentation/devicetree/bindings/sound/everest,es8316.yaml @@ -60,6 +60,11 @@ properties: "#sound-dai-cells": const: 0 =20 + everest,jack-detect-inverted: + $ref: /schemas/types.yaml#/definitions/flag + description: + Defined to invert the jack detection. + required: - compatible - reg --=20 2.43.0 From nobody Mon Jun 8 05:26:21 2026 Received: from mail-m93248.xmail.ntesmail.com (mail-m93248.xmail.ntesmail.com [103.126.93.248]) (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 045AE1A262D; Sat, 6 Jun 2026 18:58:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.126.93.248 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780772336; cv=none; b=aiKiXEx2AcnYMNLRWcWzcMNUIpYUlAIaQwwa9PnG3wLMq1LbImd4UPXvyiBpARxBrhm/hnWXL4EhHHYHMxOyKLpLTUmGhQ0Oio0PU7uHfUeeqSvs1QZgINOkPUdu71/DPSoesECQkU//me1GX9x2egBiAuQEPChPrA9IySGK5j8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780772336; c=relaxed/simple; bh=RoUg/BXWhrYiziL9n4l4DX9+Tj0qADYgbnNxJUacDzI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WSUe5T/UjC2vOqo2Mg/OpYIpBYCIZdckugZTKElZovF5b/anol4SLt2+JhFZoxhecC7ApMt4+8TXC7qsnhixiMaCuqfUFxi9GhHT++JCJ7Ds+RccGP3ixHL9mInW7f1WvFWMEAzLlv+sKDmXaDgbHWlFbckWTwmtPaTNqY1NBhs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com; spf=pass smtp.mailfrom=thundersoft.com; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b=UOodSRfR; arc=none smtp.client-ip=103.126.93.248 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b="UOodSRfR" Received: from [127.0.1.1] (unknown [113.235.125.44]) by smtp.qiye.163.com (Hmail) with ESMTP id 415a2503d; Sun, 7 Jun 2026 02:58:44 +0800 (GMT+08:00) From: Hongyang Zhao Date: Sun, 07 Jun 2026 02:58:18 +0800 Subject: [PATCH 2/5] ASoC: dt-bindings: qcom,sm8250: Add QCS6490 RubikPi3 sound card 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: <20260607-rubikpi-next-20260605-v1-2-7f334e16fea6@thundersoft.com> References: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> In-Reply-To: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Daniel Drake , Katsuhiro Suzuki , Matteo Martelli , Binbin Zhou , Srinivas Kandagatla , Jaroslav Kysela , Takashi Iwai , Bjorn Andersson , Konrad Dybcio Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Hongyang Zhao , mohammad.rafi.shaik@oss.qualcomm.com, rosh@debian.org X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780772320; l=867; i=hongyang.zhao@thundersoft.com; s=20251115; h=from:subject:message-id; bh=RoUg/BXWhrYiziL9n4l4DX9+Tj0qADYgbnNxJUacDzI=; b=iITATkkO4eVFmz3KPj4KFQsYZqOd+IIF86JA1rF1y8cLtvQPBmvIMI9x9JDIXDrDWZ2DIRWJ0 +EcqTjFbWncDB/GNsegNvp/7719oku+lCB3PvJqEvOxb7nSkVjzxoO8 X-Developer-Key: i=hongyang.zhao@thundersoft.com; a=ed25519; pk=0M0CJ1s9WiFZwli2JsxLB9ykikp5WkpKzCWgpdANKNI= X-HM-Tid: 0a9e9e4d441209d5kunm343af971138ae9 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUtXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkZS0xLVhlMQh9JGU1ISB8dSlYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlKSkhVSUhOVUpJTlVPT1lXWRYaDxIVHRRZQVlLVUtVS1 VLWQY+ DKIM-Signature: a=rsa-sha256; b=UOodSRfRzF+JwQ6RVlJGp7ITIZvZfvTNJLZKU2fVQVPR/4ULb2ZiTJCnLRz1zer8tqg6XVN2kQzIVY3ckzji9XwimZswzybwuT7mxkfdWscJtRqvJM49ibTGcGKVBCJzpV4cE1KI5F0l9CBn4Rgt5/rUUNS6Zy2jn8MLeKs1m9o=; c=relaxed/relaxed; s=default; d=thundersoft.com; v=1; bh=5IIegllXcDflxwC/097PCpDjxmrGTbH0MMSgTvWKOeg=; h=date:mime-version:subject:message-id:from; Add the thundercomm,qcs6490-rubikpi3-sndcard compatible for the QCS6490 Thundercomm RubikPi3 sound card. Signed-off-by: Hongyang Zhao --- Documentation/devicetree/bindings/sound/qcom,sm8250.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml b/Doc= umentation/devicetree/bindings/sound/qcom,sm8250.yaml index 15f38622b98b..d95e072fab25 100644 --- a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml @@ -48,6 +48,7 @@ properties: - qcom,sm8250-sndcard - qcom,sm8450-sndcard - qcom,x1e80100-sndcard + - thundercomm,qcs6490-rubikpi3-sndcard =20 audio-routing: $ref: /schemas/types.yaml#/definitions/non-unique-string-array --=20 2.43.0 From nobody Mon Jun 8 05:26:21 2026 Received: from mail-m49195.qiye.163.com (mail-m49195.qiye.163.com [45.254.49.195]) (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 E888730E0EC; Sat, 6 Jun 2026 21:21:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780780902; cv=none; b=BPlyX7t6znIqQyCDYvhFI2AYeibniSpZ9YcfZH7HaPEK3Qzpk0rVbjqt5tWbYSXwGpTuRL4eBnw+3CqRUPqINK+/aYJHfLr5u8pLoLBF2s+mZSgGnJg45xoSPjtwOCZixHV5SYO1JWPTjA7CBWvH/xl2Oirh1M7CbnmYZY+MyWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780780902; c=relaxed/simple; bh=7EG4MYgDN65VriGUaMdngMbhhxlSmg7pk8t2q5/VPVg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SNGu0C/Bqb4z400Xneqf+kLQfvH3Bwsy4m8LOmLjE3PlbIb06/To3CdlKZDGf2x8ET45nqso+f4KwcnG9M0sN/RWeP+kN/qs+3dp8HJ+k6Azjxg3EP70yKXfFk2HMUac9uOyfC9/qxRDtURxirWGABOfPLTnE1O4o+ZLNNJkJS4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com; spf=pass smtp.mailfrom=thundersoft.com; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b=kGlvO1TT; arc=none smtp.client-ip=45.254.49.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b="kGlvO1TT" Received: from [127.0.1.1] (unknown [113.235.125.44]) by smtp.qiye.163.com (Hmail) with ESMTP id 415a25042; Sun, 7 Jun 2026 02:58:46 +0800 (GMT+08:00) From: Hongyang Zhao Date: Sun, 07 Jun 2026 02:58:19 +0800 Subject: [PATCH 3/5] ASoC: qcom: qdsp6: q6prm: add the missing MCLK clock IDs 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: <20260607-rubikpi-next-20260605-v1-3-7f334e16fea6@thundersoft.com> References: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> In-Reply-To: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Daniel Drake , Katsuhiro Suzuki , Matteo Martelli , Binbin Zhou , Srinivas Kandagatla , Jaroslav Kysela , Takashi Iwai , Bjorn Andersson , Konrad Dybcio Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Hongyang Zhao , mohammad.rafi.shaik@oss.qualcomm.com, rosh@debian.org, Neil Armstrong , Srinivas Kandagatla X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780772320; l=2011; i=hongyang.zhao@thundersoft.com; s=20251115; h=from:subject:message-id; bh=18JeWlh/iLVQ3WjYzzzqk8im+NKs9pPPa8nkOS33lBo=; b=T9LCr9wz2J7vcjSJTheM2EFdk1rv2Y74UXf1/D2RijnZFFwCoGm3Lzd1mBR+iav/4miJ//SNS CIYI/Vl2IJoDsB9/DCCO6YPuOqcarnTb+65bJtcWnnISPFULk6h80Uh X-Developer-Key: i=hongyang.zhao@thundersoft.com; a=ed25519; pk=0M0CJ1s9WiFZwli2JsxLB9ykikp5WkpKzCWgpdANKNI= X-HM-Tid: 0a9e9e4d4afd09d5kunm343af971138af5 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlCTE5LVkhNThpLTUIeSRhLS1YVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlKSkhVSUhOVUpJTlVPT1lXWRYaDxIVHRRZQVlPS0hVSk tJT09PSFVKS0tVSkJLS1kG DKIM-Signature: a=rsa-sha256; b=kGlvO1TTYTANWGOTdSfaZmNcqwO3QB5R0NKf2HYdIeV6bL4URxyyGa/mXs5RowJrt4HGrqkfxUxgKCtM9ur8dI+BUVT+exyHdSaksr4O0ww4wcaqqLwG/EIvn+f436Umx64/p+Wd0jxSbQA3jcXCVM/CcEFdvCM6m6JU+3139BU=; c=relaxed/relaxed; s=default; d=thundersoft.com; v=1; bh=O43pN37qUkYihSLgp1vhj4/ZPYt2n5s4WelMktsks3g=; h=date:mime-version:subject:message-id:from; From: Neil Armstrong Add the missing MCLK ids for the q6prm DSP interface. Reviewed-by: Srinivas Kandagatla Signed-off-by: Neil Armstrong --- sound/soc/qcom/qdsp6/q6prm-clocks.c | 5 +++++ sound/soc/qcom/qdsp6/q6prm.h | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/sound/soc/qcom/qdsp6/q6prm-clocks.c b/sound/soc/qcom/qdsp6/q6p= rm-clocks.c index 4c574b48ab00..51b131fa9531 100644 --- a/sound/soc/qcom/qdsp6/q6prm-clocks.c +++ b/sound/soc/qcom/qdsp6/q6prm-clocks.c @@ -42,6 +42,11 @@ static const struct q6dsp_clk_init q6prm_clks[] =3D { Q6PRM_CLK(LPASS_CLK_ID_INT5_MI2S_IBIT), Q6PRM_CLK(LPASS_CLK_ID_INT6_MI2S_IBIT), Q6PRM_CLK(LPASS_CLK_ID_QUI_MI2S_OSR), + Q6PRM_CLK(LPASS_CLK_ID_MCLK_1), + Q6PRM_CLK(LPASS_CLK_ID_MCLK_2), + Q6PRM_CLK(LPASS_CLK_ID_MCLK_3), + Q6PRM_CLK(LPASS_CLK_ID_MCLK_4), + Q6PRM_CLK(LPASS_CLK_ID_MCLK_5), Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_MCLK), Q6PRM_CLK(LPASS_CLK_ID_WSA_CORE_NPL_MCLK), Q6PRM_CLK(LPASS_CLK_ID_VA_CORE_MCLK), diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h index a988a32086fe..6917e70bcb8a 100644 --- a/sound/soc/qcom/qdsp6/q6prm.h +++ b/sound/soc/qcom/qdsp6/q6prm.h @@ -52,6 +52,17 @@ /* Clock ID for QUINARY MI2S OSR CLK */ #define Q6PRM_LPASS_CLK_ID_QUI_MI2S_OSR 0x116 =20 +/* Clock ID for MCLK1 */ +#define Q6PRM_LPASS_CLK_ID_MCLK_1 0x300 +/* Clock ID for MCLK2 */ +#define Q6PRM_LPASS_CLK_ID_MCLK_2 0x301 +/* Clock ID for MCLK3 */ +#define Q6PRM_LPASS_CLK_ID_MCLK_3 0x302 +/* Clock ID for MCLK4 */ +#define Q6PRM_LPASS_CLK_ID_MCLK_4 0x303 +/* Clock ID for MCLK5 */ +#define Q6PRM_LPASS_CLK_ID_MCLK_5 0x304 + #define Q6PRM_LPASS_CLK_ID_WSA_CORE_MCLK 0x305 #define Q6PRM_LPASS_CLK_ID_WSA_CORE_NPL_MCLK 0x306 =20 --=20 2.43.0 From nobody Mon Jun 8 05:26:21 2026 Received: from mail-m19731110.qiye.163.com (mail-m19731110.qiye.163.com [220.197.31.110]) (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 91DD82F3C19; Sat, 6 Jun 2026 19:34:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.110 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780774479; cv=none; b=fBpHNcPWlz9U2khBtk2xzHEtLmGzUGWJH7hjtjFwPXrg3kSk9IKpjMuGNypEN3ffl138O68BIUjV0UihhxuTKmzRK6nWxHCuHuvzqZ/ie5B72F+SMIOsw2BksHqjnN419nPcUCpdeJIG78uncUQhCq3tGR7aFPHOsl5rDDpS2Sw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780774479; c=relaxed/simple; bh=Gl51sjsifnBfgDdxUg9x0+j1Uce4+RbbPp32hAjw8m8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YzqD9Fkxg0rpiOY7pEglUxiLlZEwLeLDL38sXGQ7EzECl9nGfYW+3YW+BN6YDKk4eQLDNatbLyCQDmQuaET/wYUvyxQwiWSETH/kf1aQekNpXwlhYxN1NBJK/0HWJin2Txcu5EduJTFlYjoDOaa80fH+z1HWVqlv3anmToybOUA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com; spf=pass smtp.mailfrom=thundersoft.com; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b=VaNVSolt; arc=none smtp.client-ip=220.197.31.110 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b="VaNVSolt" Received: from [127.0.1.1] (unknown [113.235.125.44]) by smtp.qiye.163.com (Hmail) with ESMTP id 415a25045; Sun, 7 Jun 2026 02:58:48 +0800 (GMT+08:00) From: Hongyang Zhao Date: Sun, 07 Jun 2026 02:58:20 +0800 Subject: [PATCH 4/5] ASoC: qcom: sc8280xp: Add per-card data 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: <20260607-rubikpi-next-20260605-v1-4-7f334e16fea6@thundersoft.com> References: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> In-Reply-To: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Daniel Drake , Katsuhiro Suzuki , Matteo Martelli , Binbin Zhou , Srinivas Kandagatla , Jaroslav Kysela , Takashi Iwai , Bjorn Andersson , Konrad Dybcio Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Hongyang Zhao , mohammad.rafi.shaik@oss.qualcomm.com, rosh@debian.org X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780772320; l=16979; i=hongyang.zhao@thundersoft.com; s=20251115; h=from:subject:message-id; bh=Gl51sjsifnBfgDdxUg9x0+j1Uce4+RbbPp32hAjw8m8=; b=jwe9iwOk5K7EQ/HQgHKcojZjdeix15hlc4GuXfwFRWNWVOyIw8GD8UPXUmHNBxslobWF0E6b6 ngNPSN3NoL6Bwm2GGqin0QvHCpUEKr7mL4hg9GOZcovMlmzzzSHTQn5 X-Developer-Key: i=hongyang.zhao@thundersoft.com; a=ed25519; pk=0M0CJ1s9WiFZwli2JsxLB9ykikp5WkpKzCWgpdANKNI= X-HM-Tid: 0a9e9e4d526209d5kunm343af971138afd X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlDGU0dVk1LQkhDHUkaTx8fGVYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlKSkhVSUhOVUpJTlVPT1lXWRYaDxIVHRRZQVlPS0hVSk tJT09PSFVKS0tVSkJLS1kG DKIM-Signature: a=rsa-sha256; b=VaNVSolt942U2yVhuVysl2qdscNlALzw8VQAd8HaiybfF/BNdHKmphzwbiKCjgn7lr/Ui0u+OSbGwGXc33k/mKvCiTZtk3X6NsVq7Q2J9QUwj1t5Ht5OLHdIntAfVpXre/Zkpq+qOE2XTf5DVf4rqAzeQ5TKGm/C+UEftBHsqBI=; c=relaxed/relaxed; s=default; d=thundersoft.com; v=1; bh=/kiPLtZFPm41HqQl20CWTW8cpvYZ4sOBg+VZBWrNsBQ=; h=date:mime-version:subject:message-id:from; The sc8280xp machine driver currently uses the OF match data only as a driver name, which makes it difficult to describe board-specific MI2S codec requirements. Convert the match data to a per-card data structure and add data for the QCS6490 RubikPi3. The RubikPi3 data configures the ES8316 MI2S DAI format, MCLK rate, BE hardware parameters and headset jack pins. Add a common headset jack helper which accepts board-specific DAPM pins for codecs that are not connected through the WCD TX codec DMA path. Signed-off-by: Hongyang Zhao --- sound/soc/qcom/common.c | 75 ++++++++--- sound/soc/qcom/common.h | 6 +- sound/soc/qcom/sc8280xp.c | 319 ++++++++++++++++++++++++++++++++++++++++++= ---- 3 files changed, 357 insertions(+), 43 deletions(-) diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c index cf1f3a767cee..5e7a01418ad8 100644 --- a/sound/soc/qcom/common.c +++ b/sound/soc/qcom/common.c @@ -201,26 +201,30 @@ static struct snd_soc_jack_pin qcom_headset_jack_pins= [] =3D { }, }; =20 -int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd, - struct snd_soc_jack *jack, bool *jack_setup) +static int qcom_snd_headset_jack_init(struct snd_soc_card *card, + struct snd_soc_jack *jack, + bool *jack_setup, + struct snd_soc_jack_pin *pins, + unsigned int num_pins) { - struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); - struct snd_soc_dai *codec_dai =3D snd_soc_rtd_to_codec(rtd, 0); - struct snd_soc_card *card =3D rtd->card; - int rval, i; + int rval; + + if (!pins) { + pins =3D qcom_headset_jack_pins; + num_pins =3D ARRAY_SIZE(qcom_headset_jack_pins); + } =20 if (!*jack_setup) { rval =3D snd_soc_card_jack_new_pins(card, "Headset Jack", - SND_JACK_HEADSET | SND_JACK_LINEOUT | - SND_JACK_MECHANICAL | - SND_JACK_BTN_0 | SND_JACK_BTN_1 | - SND_JACK_BTN_2 | SND_JACK_BTN_3 | - SND_JACK_BTN_4 | SND_JACK_BTN_5, - jack, qcom_headset_jack_pins, - ARRAY_SIZE(qcom_headset_jack_pins)); + SND_JACK_HEADSET | SND_JACK_LINEOUT | + SND_JACK_MECHANICAL | + SND_JACK_BTN_0 | SND_JACK_BTN_1 | + SND_JACK_BTN_2 | SND_JACK_BTN_3 | + SND_JACK_BTN_4 | SND_JACK_BTN_5, + jack, pins, num_pins); =20 if (rval < 0) { - dev_err(card->dev, "Unable to add Headphone Jack\n"); + dev_err(card->dev, "Unable to add Headset Jack\n"); return rval; } =20 @@ -231,6 +235,48 @@ int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime= *rtd, *jack_setup =3D true; } =20 + return 0; +} + +int qcom_snd_headset_jack_setup(struct snd_soc_pcm_runtime *rtd, + struct snd_soc_jack *jack, + bool *jack_setup, + struct snd_soc_jack_pin *pins, + unsigned int num_pins) +{ + struct snd_soc_dai *codec_dai =3D snd_soc_rtd_to_codec(rtd, 0); + struct snd_soc_card *card =3D rtd->card; + int rval, i; + + rval =3D qcom_snd_headset_jack_init(card, jack, jack_setup, + pins, num_pins); + if (rval) + return rval; + + for_each_rtd_codec_dais(rtd, i, codec_dai) { + rval =3D snd_soc_component_set_jack(codec_dai->component, jack, NULL); + if (rval !=3D 0 && rval !=3D -ENOTSUPP) { + dev_warn(card->dev, "Failed to set jack: %d\n", rval); + return rval; + } + } + + return 0; +} +EXPORT_SYMBOL_GPL(qcom_snd_headset_jack_setup); + +int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd, + struct snd_soc_jack *jack, bool *jack_setup) +{ + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai *codec_dai =3D snd_soc_rtd_to_codec(rtd, 0); + struct snd_soc_card *card =3D rtd->card; + int rval, i; + + rval =3D qcom_snd_headset_jack_init(card, jack, jack_setup, NULL, 0); + if (rval) + return rval; + switch (cpu_dai->id) { case TX_CODEC_DMA_TX_0: case TX_CODEC_DMA_TX_1: @@ -250,7 +296,6 @@ int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime = *rtd, break; } =20 - return 0; } EXPORT_SYMBOL_GPL(qcom_snd_wcd_jack_setup); diff --git a/sound/soc/qcom/common.h b/sound/soc/qcom/common.h index ee6662885593..6d023f76f27e 100644 --- a/sound/soc/qcom/common.h +++ b/sound/soc/qcom/common.h @@ -10,10 +10,14 @@ #define LPASS_MAX_PORT (SENARY_MI2S_TX + 1) =20 int qcom_snd_parse_of(struct snd_soc_card *card); +int qcom_snd_headset_jack_setup(struct snd_soc_pcm_runtime *rtd, + struct snd_soc_jack *jack, + bool *jack_setup, + struct snd_soc_jack_pin *pins, + unsigned int num_pins); int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd, struct snd_soc_jack *jack, bool *jack_setup); int qcom_snd_dp_jack_setup(struct snd_soc_pcm_runtime *rtd, struct snd_soc_jack *dp_jack, int id); =20 - #endif diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c index 7925aa3f63ba..1ccd7437cc52 100644 --- a/sound/soc/qcom/sc8280xp.c +++ b/sound/soc/qcom/sc8280xp.c @@ -15,26 +15,127 @@ #include "common.h" #include "sdw.h" =20 +struct sc8280xp_mi2s_codec_config { + unsigned int cpu_dai_id; + unsigned int dai_fmt; + unsigned int sysclk_rate; +}; + +struct sc8280xp_be_hw_params { + unsigned int rate; + snd_pcm_format_t format; + unsigned int channels_min; + unsigned int channels_max; +}; + +struct sc8280xp_be_hw_params_config { + unsigned int cpu_dai_id; + struct sc8280xp_be_hw_params hw_params; +}; + +struct sc8280xp_sndcard_data { + const char *driver_name; + struct sc8280xp_be_hw_params default_be_hw_params; + const struct sc8280xp_mi2s_codec_config *mi2s_codec_configs; + int num_mi2s_codec_configs; + const struct sc8280xp_be_hw_params_config *be_hw_params_configs; + int num_be_hw_params_configs; + const unsigned int *headset_jack_dais; + int num_headset_jack_dais; + struct snd_soc_jack_pin *headset_jack_pins; + unsigned int num_headset_jack_pins; +}; + struct sc8280xp_snd_data { bool stream_prepared[AFE_PORT_MAX]; struct snd_soc_card *card; struct snd_soc_jack jack; struct snd_soc_jack dp_jack[8]; + const struct sc8280xp_sndcard_data *card_data; bool jack_setup; }; =20 +static const struct sc8280xp_mi2s_codec_config * +sc8280xp_snd_get_mi2s_codec_config(const struct sc8280xp_sndcard_data *car= d_data, + unsigned int cpu_dai_id) +{ + int i; + + for (i =3D 0; i < card_data->num_mi2s_codec_configs; i++) { + if (card_data->mi2s_codec_configs[i].cpu_dai_id =3D=3D cpu_dai_id) + return &card_data->mi2s_codec_configs[i]; + } + + return NULL; +} + +static const struct sc8280xp_be_hw_params * +sc8280xp_snd_get_be_hw_params(const struct sc8280xp_sndcard_data *card_dat= a, + unsigned int cpu_dai_id) +{ + int i; + + for (i =3D 0; i < card_data->num_be_hw_params_configs; i++) { + if (card_data->be_hw_params_configs[i].cpu_dai_id =3D=3D cpu_dai_id) + return &card_data->be_hw_params_configs[i].hw_params; + } + + return NULL; +} + +static bool sc8280xp_snd_is_headset_jack_dai(const struct sc8280xp_sndcard= _data *card_data, + unsigned int cpu_dai_id) +{ + int i; + + for (i =3D 0; i < card_data->num_headset_jack_dais; i++) { + if (card_data->headset_jack_dais[i] =3D=3D cpu_dai_id) + return true; + } + + return false; +} + static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd) { struct sc8280xp_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); + const struct sc8280xp_sndcard_data *card_data =3D data->card_data; + const struct sc8280xp_mi2s_codec_config *mi2s_config; struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai *codec_dai; struct snd_soc_card *card =3D rtd->card; struct snd_soc_jack *dp_jack =3D NULL; int dp_pcm_id =3D 0; + int i, ret; =20 switch (cpu_dai->id) { case PRIMARY_MI2S_RX...QUATERNARY_MI2S_TX: case QUINARY_MI2S_RX...QUINARY_MI2S_TX: snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_BP_FP); + + mi2s_config =3D sc8280xp_snd_get_mi2s_codec_config(card_data, + cpu_dai->id); + if (mi2s_config) { + for_each_rtd_codec_dais(rtd, i, codec_dai) { + if (mi2s_config->dai_fmt) { + ret =3D snd_soc_dai_set_fmt(codec_dai, + mi2s_config->dai_fmt); + if (ret && ret !=3D -ENOTSUPP) + return ret; + } + + if (mi2s_config->sysclk_rate) { + ret =3D snd_soc_dai_set_sysclk(codec_dai, 0, + mi2s_config->sysclk_rate, + SND_SOC_CLOCK_IN); + if (ret && ret !=3D -ENOTSUPP) + return dev_err_probe(card->dev, ret, + "%s: failed to set sysclk for %s\n", + rtd->dai_link->name, + codec_dai->name); + } + } + } break; case WSA_CODEC_DMA_RX_0: case WSA_CODEC_DMA_RX_1: @@ -64,34 +165,56 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtim= e *rtd) if (dp_jack) return qcom_snd_dp_jack_setup(rtd, dp_jack, dp_pcm_id); =20 + if (sc8280xp_snd_is_headset_jack_dai(card_data, cpu_dai->id)) + return qcom_snd_headset_jack_setup(rtd, &data->jack, + &data->jack_setup, + card_data->headset_jack_pins, + card_data->num_headset_jack_pins); + + if (card_data->headset_jack_dais) + return 0; + return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup); } =20 static int sc8280xp_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, - struct snd_pcm_hw_params *params) + struct snd_pcm_hw_params *params) { + struct sc8280xp_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); + const struct sc8280xp_sndcard_data *card_data =3D data->card_data; + const struct sc8280xp_be_hw_params *be_hw_params; struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); struct snd_interval *rate =3D hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); struct snd_interval *channels =3D hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); struct snd_mask *fmt =3D hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); + bool use_default =3D false; =20 - rate->min =3D rate->max =3D 48000; - snd_mask_set_format(fmt, SNDRV_PCM_FORMAT_S16_LE); - channels->min =3D 2; - channels->max =3D 2; - switch (cpu_dai->id) { - case TX_CODEC_DMA_TX_0: - case TX_CODEC_DMA_TX_1: - case TX_CODEC_DMA_TX_2: - case TX_CODEC_DMA_TX_3: - channels->min =3D 1; - break; - default: - break; + be_hw_params =3D sc8280xp_snd_get_be_hw_params(card_data, cpu_dai->id); + if (!be_hw_params) { + be_hw_params =3D &card_data->default_be_hw_params; + use_default =3D true; } =20 + rate->min =3D be_hw_params->rate; + rate->max =3D be_hw_params->rate; + snd_mask_set_format(fmt, be_hw_params->format); + channels->min =3D be_hw_params->channels_min; + channels->max =3D be_hw_params->channels_max; + + if (use_default) { + switch (cpu_dai->id) { + case TX_CODEC_DMA_TX_0: + case TX_CODEC_DMA_TX_1: + case TX_CODEC_DMA_TX_2: + case TX_CODEC_DMA_TX_3: + channels->min =3D 1; + break; + default: + break; + } + } =20 return 0; } @@ -146,36 +269,178 @@ static int sc8280xp_platform_probe(struct platform_d= evice *pdev) if (!card) return -ENOMEM; card->owner =3D THIS_MODULE; + /* Allocate the private data */ data =3D devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; + data->card_data =3D of_device_get_match_data(dev); + if (!data->card_data) + return -EINVAL; =20 card->dev =3D dev; + card->driver_name =3D data->card_data->driver_name; + dev_set_drvdata(dev, card); snd_soc_card_set_drvdata(card, data); ret =3D qcom_snd_parse_of(card); if (ret) return ret; =20 - card->driver_name =3D of_device_get_match_data(dev); sc8280xp_add_be_ops(card); return devm_snd_soc_register_card(dev, card); } =20 +#define SC8280XP_SND_DATA(_driver_name) \ + .driver_name =3D _driver_name, \ + .default_be_hw_params =3D { \ + .rate =3D 48000, \ + .format =3D SNDRV_PCM_FORMAT_S16_LE, \ + .channels_min =3D 2, \ + .channels_max =3D 2, \ + } + +static const struct sc8280xp_sndcard_data kaanapali_data =3D { + SC8280XP_SND_DATA("kaanapali"), +}; + +static const struct sc8280xp_sndcard_data qcm6490_data =3D { + SC8280XP_SND_DATA("qcm6490"), +}; + +static const struct sc8280xp_sndcard_data qcs615_data =3D { + SC8280XP_SND_DATA("qcs615"), +}; + +static const struct sc8280xp_sndcard_data qcs6490_data =3D { + SC8280XP_SND_DATA("qcs6490"), +}; + +static const struct sc8280xp_sndcard_data qcs8300_data =3D { + SC8280XP_SND_DATA("qcs8300"), +}; + +static const struct sc8280xp_mi2s_codec_config qcs6490_rubikpi3_mi2s_codec= _configs[] =3D { + { + .cpu_dai_id =3D PRIMARY_MI2S_RX, + .dai_fmt =3D SND_SOC_DAIFMT_BC_FC | + SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_I2S, + .sysclk_rate =3D 19200000, + }, + { + .cpu_dai_id =3D PRIMARY_MI2S_TX, + .dai_fmt =3D SND_SOC_DAIFMT_BC_FC | + SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_I2S, + .sysclk_rate =3D 19200000, + }, +}; + +static const unsigned int qcs6490_rubikpi3_headset_jack_dais[] =3D { + PRIMARY_MI2S_RX, +}; + +static struct snd_soc_jack_pin qcs6490_rubikpi3_headset_jack_pins[] =3D { + { + .pin =3D "Mic Jack", + .mask =3D SND_JACK_HEADPHONE, + }, + { + .pin =3D "Headphone Jack", + .mask =3D SND_JACK_HEADPHONE, + }, +}; + +static const struct sc8280xp_be_hw_params_config qcs6490_rubikpi3_be_hw_pa= rams_configs[] =3D { + { + .cpu_dai_id =3D PRIMARY_MI2S_TX, + .hw_params =3D { + .rate =3D 48000, + .format =3D SNDRV_PCM_FORMAT_S16_LE, + .channels_min =3D 2, + .channels_max =3D 2, + }, + }, + { + .cpu_dai_id =3D QUATERNARY_MI2S_RX, + .hw_params =3D { + .rate =3D 48000, + .format =3D SNDRV_PCM_FORMAT_S16_LE, + .channels_min =3D 2, + .channels_max =3D 2, + }, + }, + { + .cpu_dai_id =3D TERTIARY_MI2S_RX, + .hw_params =3D { + .rate =3D 48000, + .format =3D SNDRV_PCM_FORMAT_S32_LE, + .channels_min =3D 2, + .channels_max =3D 2, + }, + }, + { + .cpu_dai_id =3D TERTIARY_MI2S_TX, + .hw_params =3D { + .rate =3D 48000, + .format =3D SNDRV_PCM_FORMAT_S32_LE, + .channels_min =3D 1, + .channels_max =3D 2, + }, + }, +}; + +static const struct sc8280xp_sndcard_data qcs6490_rubikpi3_data =3D { + SC8280XP_SND_DATA("qcs6490"), + .mi2s_codec_configs =3D qcs6490_rubikpi3_mi2s_codec_configs, + .num_mi2s_codec_configs =3D ARRAY_SIZE(qcs6490_rubikpi3_mi2s_codec_config= s), + .be_hw_params_configs =3D qcs6490_rubikpi3_be_hw_params_configs, + .num_be_hw_params_configs =3D ARRAY_SIZE(qcs6490_rubikpi3_be_hw_params_co= nfigs), + .headset_jack_dais =3D qcs6490_rubikpi3_headset_jack_dais, + .num_headset_jack_dais =3D ARRAY_SIZE(qcs6490_rubikpi3_headset_jack_dais), + .headset_jack_pins =3D qcs6490_rubikpi3_headset_jack_pins, + .num_headset_jack_pins =3D ARRAY_SIZE(qcs6490_rubikpi3_headset_jack_pins), +}; + +static const struct sc8280xp_sndcard_data sa8775p_data =3D { + SC8280XP_SND_DATA("sa8775p"), +}; + +static const struct sc8280xp_sndcard_data sc8280xp_data =3D { + SC8280XP_SND_DATA("sc8280xp"), +}; + +static const struct sc8280xp_sndcard_data sm8450_data =3D { + SC8280XP_SND_DATA("sm8450"), +}; + +static const struct sc8280xp_sndcard_data sm8550_data =3D { + SC8280XP_SND_DATA("sm8550"), +}; + +static const struct sc8280xp_sndcard_data sm8650_data =3D { + SC8280XP_SND_DATA("sm8650"), +}; + +static const struct sc8280xp_sndcard_data sm8750_data =3D { + SC8280XP_SND_DATA("sm8750"), +}; + static const struct of_device_id snd_sc8280xp_dt_match[] =3D { - {.compatible =3D "qcom,kaanapali-sndcard", "kaanapali"}, - {.compatible =3D "qcom,qcm6490-idp-sndcard", "qcm6490"}, - {.compatible =3D "qcom,qcs615-sndcard", "qcs615"}, - {.compatible =3D "qcom,qcs6490-rb3gen2-sndcard", "qcs6490"}, - {.compatible =3D "qcom,qcs8275-sndcard", "qcs8300"}, - {.compatible =3D "qcom,qcs9075-sndcard", "sa8775p"}, - {.compatible =3D "qcom,qcs9100-sndcard", "sa8775p"}, - {.compatible =3D "qcom,sc8280xp-sndcard", "sc8280xp"}, - {.compatible =3D "qcom,sm8450-sndcard", "sm8450"}, - {.compatible =3D "qcom,sm8550-sndcard", "sm8550"}, - {.compatible =3D "qcom,sm8650-sndcard", "sm8650"}, - {.compatible =3D "qcom,sm8750-sndcard", "sm8750"}, + { .compatible =3D "thundercomm,qcs6490-rubikpi3-sndcard", .data =3D &qcs6= 490_rubikpi3_data }, + { .compatible =3D "qcom,kaanapali-sndcard", .data =3D &kaanapali_data }, + { .compatible =3D "qcom,qcm6490-idp-sndcard", .data =3D &qcm6490_data }, + { .compatible =3D "qcom,qcs615-sndcard", .data =3D &qcs615_data }, + { .compatible =3D "qcom,qcs6490-rb3gen2-sndcard", .data =3D &qcs6490_data= }, + { .compatible =3D "qcom,qcs8275-sndcard", .data =3D &qcs8300_data }, + { .compatible =3D "qcom,qcs9075-sndcard", .data =3D &sa8775p_data }, + { .compatible =3D "qcom,qcs9100-sndcard", .data =3D &sa8775p_data }, + { .compatible =3D "qcom,sc8280xp-sndcard", .data =3D &sc8280xp_data }, + { .compatible =3D "qcom,sm8450-sndcard", .data =3D &sm8450_data }, + { .compatible =3D "qcom,sm8550-sndcard", .data =3D &sm8550_data }, + { .compatible =3D "qcom,sm8650-sndcard", .data =3D &sm8650_data }, + { .compatible =3D "qcom,sm8750-sndcard", .data =3D &sm8750_data }, {} }; =20 --=20 2.43.0 From nobody Mon Jun 8 05:26:21 2026 Received: from mail-m12782.qiye.163.com (mail-m12782.qiye.163.com [115.236.127.82]) (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 5D2022D8DD0; Sat, 6 Jun 2026 19:04:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.236.127.82 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780772653; cv=none; b=AxQxT0kyLCHN/zrBDEIsm+KR39xVsIbt4y8diIgg3G+CinDNijv1pU+r1WcpPLCjuFbTbQJfp/xQIRZW2UrDRUlH+NDAWSPR5bVyUPH9Dc2emF0ua3OGrLkjOYK6JeT9uR3o7KWVWNudNsHUkp0M4qVg6MAW5h8fX0rxL3xf4Zo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780772653; c=relaxed/simple; bh=xhGx9btUBJ7PbSENKiLTzAu2Pwgm8GyTghkEQBUGyqg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nAhb1p2XcDDvtislk5G+E+Kqkt2PUyzHwC6EZIdOzRheS9rCyRDba+cHIwBiwqhS3BB4Wea9h04X3TF77pUBkhtwQHvGYRYmQ0gAPza7fX/txKw56cD0s49wyqsKylNdMEWG0oaTXn48JwMS9+U6H7LZjN4gngr5QsrHDp+Bk/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com; spf=pass smtp.mailfrom=thundersoft.com; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b=bD1MJLPe; arc=none smtp.client-ip=115.236.127.82 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thundersoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thundersoft.com header.i=@thundersoft.com header.b="bD1MJLPe" Received: from [127.0.1.1] (unknown [113.235.125.44]) by smtp.qiye.163.com (Hmail) with ESMTP id 415a25048; Sun, 7 Jun 2026 02:58:49 +0800 (GMT+08:00) From: Hongyang Zhao Date: Sun, 07 Jun 2026 02:58:21 +0800 Subject: [PATCH 5/5] arm64: dts: qcom: qcs6490-rubikpi3: Add 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: <20260607-rubikpi-next-20260605-v1-5-7f334e16fea6@thundersoft.com> References: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> In-Reply-To: <20260607-rubikpi-next-20260605-v1-0-7f334e16fea6@thundersoft.com> To: Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Daniel Drake , Katsuhiro Suzuki , Matteo Martelli , Binbin Zhou , Srinivas Kandagatla , Jaroslav Kysela , Takashi Iwai , Bjorn Andersson , Konrad Dybcio Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Hongyang Zhao , mohammad.rafi.shaik@oss.qualcomm.com, rosh@debian.org X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780772320; l=6149; i=hongyang.zhao@thundersoft.com; s=20251115; h=from:subject:message-id; bh=xhGx9btUBJ7PbSENKiLTzAu2Pwgm8GyTghkEQBUGyqg=; b=Mn66vPLzlmABgaAUUrZHmG14UEMVyB3JmaGGiItMcwXP5ZTDvZJ35XA4cDV70j+YXTjuCDXD9 Kg2Y3s34YNsCpONU6F0YCHxS2DzDiEbs3rlIn2FDSl6QhokimEk791W X-Developer-Key: i=hongyang.zhao@thundersoft.com; a=ed25519; pk=0M0CJ1s9WiFZwli2JsxLB9ykikp5WkpKzCWgpdANKNI= X-HM-Tid: 0a9e9e4d59c609d5kunm343af971138b07 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkaGh9IVkkaS0hLH05MH0geSlYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlKSkhVSUhOVUpJTlVPT1lXWRYaDxIVHRRZQVlPS0hVSk tJT09PSFVKS0tVSkJLS1kG DKIM-Signature: a=rsa-sha256; b=bD1MJLPe6WiIC1Tw1WWbTRLJaPKkjJi3D5HA/IhsJFvulrcuWATzkH391PJVO72xvO3sv2eZHpieFCvqWOqq3JYTCBqsHg/JahDQluUKPr+Ixu9+rgUBbaA/QCtR5HxPw0r++Ga24OeeMLRYNagEKN+dNZ3dLSewUDuRpFhCxsg=; c=relaxed/relaxed; s=default; d=thundersoft.com; v=1; bh=Fhw4hjclec77QznNiSsI18O2qX1bXG4rCI/YfxKzWfs=; h=date:mime-version:subject:message-id:from; Add audio support for the Thundercomm RubikPi3 board. Enable AudioReach and describe the ES8316 headset codec, the LT9611 HDMI codec endpoint and the SPDIF TX/RX endpoints exposed on the 40-pin header. Add the sound card DAI links, LPASS pin configuration and ES8316 fixed 3.3V supply. Signed-off-by: Hongyang Zhao --- .../boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 196 +++++++++++++++++= ++++ 1 file changed, 196 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts b/ar= ch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts index f47efca42d48..3249176b4c77 100644 --- a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts +++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts @@ -19,6 +19,7 @@ #include "pm7325.dtsi" #include "pm8350c.dtsi" /* PM7350C */ #include "pmk8350.dtsi" /* PMK7325 */ +#include "qcs6490-audioreach.dtsi" =20 /delete-node/ &adsp_mem; /delete-node/ &cdsp_mem; @@ -128,6 +129,23 @@ fan0: pwm-fan { pinctrl-names =3D "default"; }; =20 + vreg_es8316_3v3: vreg-es8316-3v3 { + compatible =3D "regulator-fixed"; + + regulator-name =3D "vreg_es8316_3v3"; + regulator-min-microvolt =3D <3300000>; + regulator-max-microvolt =3D <3300000>; + + gpio =3D <&tlmm 117 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 =3D <&es8316_power_on>; + pinctrl-names =3D "default"; + + regulator-always-on; + regulator-boot-on; + }; + vreg_eth_1v8: regulator-eth-1v8 { compatible =3D "regulator-fixed"; =20 @@ -346,6 +364,16 @@ active-config0 { }; }; =20 + spdif_rx: spdif-rx { + compatible =3D "linux,spdif-dir"; + #sound-dai-cells =3D <0>; + }; + + spdif_tx: spdif-tx { + compatible =3D "linux,spdif-dit"; + #sound-dai-cells =3D <0>; + }; + usb1-sbu-mux { compatible =3D "pericom,pi3usb102", "gpio-sbu-mux"; =20 @@ -727,6 +755,23 @@ &gpu_zap_shader { firmware-name =3D "qcom/qcs6490/a660_zap.mbn"; }; =20 +&i2c0 { + status =3D "okay"; + + es8316: audio-codec@11 { + compatible =3D "everest,es8316"; + reg =3D <0x11>; + #sound-dai-cells =3D <0>; + + clocks =3D <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>; + clock-names =3D "mclk"; + + interrupts-extended =3D <&tlmm 63 IRQ_TYPE_EDGE_BOTH>; + + everest,jack-detect-inverted; + }; +}; + /* Pin 3, 5 in 40-pin connector */ &i2c1 { status =3D "okay"; @@ -740,6 +785,7 @@ &i2c9 { lt9611_codec: hdmi-bridge@39 { compatible =3D "lontium,lt9611"; reg =3D <0x39>; + #sound-dai-cells =3D <1>; =20 interrupts-extended =3D <&tlmm 20 IRQ_TYPE_EDGE_FALLING>; reset-gpios =3D <&tlmm 21 GPIO_ACTIVE_HIGH>; @@ -970,6 +1016,15 @@ &pon_resin { status =3D "okay"; }; =20 +&q6apmbedai { + pinctrl-0 =3D <&mi2s0_data0>, <&mi2s0_data1>, <&mi2s0_mclk>, + <&mi2s0_sclk>, <&mi2s0_ws>, + <&lpass_qua_mi2s_sclk>, <&lpass_qua_mi2s_ws>, <&lpass_qua_mi2s_data>, + <&lpass_lpi_i2s1_clk>, <&lpass_lpi_i2s1_ws>, + <&lpass_lpi_i2s1_data0>, <&lpass_lpi_i2s1_data1>; + pinctrl-names =3D "default"; +}; + &qupv3_id_0 { firmware-name =3D "qcom/qcm6490/qupv3fw.elf"; =20 @@ -1006,6 +1061,96 @@ &sdhc_2 { status =3D "okay"; }; =20 +&sound { + compatible =3D "thundercomm,qcs6490-rubikpi3-sndcard"; + model =3D "QCS6490-Thundercomm-RubikPi3"; + + audio-routing =3D + "Headphone Jack", "HPOL", + "Headphone Jack", "HPOR", + "MIC2", "Mic Jack"; + + mi2s-playback-dai-link { + link-name =3D "MI2S-LPAIF-RX-PRIMARY"; + + codec { + sound-dai =3D <&es8316>; + }; + + cpu { + sound-dai =3D <&q6apmbedai PRIMARY_MI2S_RX>; + }; + + platform { + sound-dai =3D <&q6apm>; + }; + }; + + mi2s-capture-dai-link { + link-name =3D "MI2S-LPAIF-TX-PRIMARY"; + + codec { + sound-dai =3D <&es8316>; + }; + + cpu { + sound-dai =3D <&q6apmbedai PRIMARY_MI2S_TX>; + }; + + platform { + sound-dai =3D <&q6apm>; + }; + }; + + quaternary-mi2s-playback-dai-link { + link-name =3D "MI2S-LPAIF_RXTX-RX-PRIMARY"; + + codec { + sound-dai =3D <<9611_codec 0>; + }; + + cpu { + sound-dai =3D <&q6apmbedai QUATERNARY_MI2S_RX>; + }; + + platform { + sound-dai =3D <&q6apm>; + }; + }; + + tert-mi2s-playback-dai-link { + link-name =3D "MI2S-LPAIF-RX-TERTIARY"; + + codec { + sound-dai =3D <&spdif_tx>; + }; + + cpu { + sound-dai =3D <&q6apmbedai TERTIARY_MI2S_RX>; + }; + + platform { + sound-dai =3D <&q6apm>; + }; + }; + + tert-mi2s-capture-dai-link { + link-name =3D "MI2S-LPAIF-TX-TERTIARY"; + + codec { + sound-dai =3D <&spdif_rx>; + }; + + cpu { + sound-dai =3D <&q6apmbedai TERTIARY_MI2S_TX>; + }; + + platform { + sound-dai =3D <&q6apm>; + }; + }; +}; + /* Pin 19, 21, 23, 24 in 40-pin connector */ &spi12 { status =3D "okay"; @@ -1220,6 +1365,50 @@ &sdc2_data { drive-strength =3D <10>; }; =20 +&lpass_tlmm { + lpass_qua_mi2s_sclk: qua-mi2s-sclk-state { + pins =3D "gpio0"; + function =3D "qua_mi2s_sclk"; + drive-strength =3D <8>; + bias-disable; + output-high; + }; + + lpass_qua_mi2s_ws: qua-mi2s-ws-state { + pins =3D "gpio1"; + function =3D "qua_mi2s_ws"; + drive-strength =3D <8>; + output-high; + }; + + lpass_qua_mi2s_data: qua-mi2s-data-state { + pins =3D "gpio2", "gpio3", "gpio4"; + function =3D "qua_mi2s_data"; + drive-strength =3D <8>; + bias-disable; + }; + + lpass_lpi_i2s1_clk: lpi-i2s1-clk-state { + pins =3D "gpio6"; + function =3D "i2s1_clk"; + }; + + lpass_lpi_i2s1_ws: lpi-i2s1-ws-state { + pins =3D "gpio7"; + function =3D "i2s1_ws"; + }; + + lpass_lpi_i2s1_data0: lpi-i2s1-data0-state { + pins =3D "gpio8"; + function =3D "i2s1_data"; + }; + + lpass_lpi_i2s1_data1: lpi-i2s1-data1-state { + pins =3D "gpio9"; + function =3D "i2s1_data"; + }; +}; + &tlmm { pcie1_reset_n: pcie1-reset-n-state { pins =3D "gpio2"; @@ -1387,6 +1576,13 @@ pcie0_wake_n: pcie0-wake-n-state { bias-pull-up; }; =20 + es8316_power_on: es8316-power-on-state { + pins =3D "gpio117"; + function =3D "gpio"; + drive-strength =3D <2>; + bias-pull-down; + }; + wifi_power_on: wifi-power-on-state { pins =3D "gpio125"; function =3D "gpio"; --=20 2.43.0