From nobody Sat Jul 25 23:41:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 2E3133C5DCD for ; Sat, 11 Jul 2026 12:58:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783774681; cv=none; b=pN1/Sf9qfr/NmHb2V5bBfc6Hk8ZjpPNm/eFqsVUfuykja+zBkx+Dys/XR251OW0gHD0GCETSpa/bHPGUkgi9h8GmROGrfNJkNwzanADa/mhfFOLKQK1DIvp+Fy6VaVqrYmyU4EgJDsVPyP3FvKgh2IleKuGtowGb28tCEjxeakQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783774681; c=relaxed/simple; bh=vBUE09K2ZJ0I6D7b7YeWJW4uNjwNJtT1FGpBYywnV+w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eutQPEOrg4CDgn0x1nThpRPJ5YOY+bHBiMY/4uf6i/Kj6gURSdD0WyjA2lP9XI3RQGBQxU7Wd+JO4BYn4jp3wOD1n+4e8RGlwoSB9ZiTzxCQ4wta9ivTK5LdlIvCzNPTyuqtEMgQUobcHKnVS4mYLYq7AWVrbVxuaHaPEYpcjME= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=jeJRKAlk; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ebNdNC+F; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="jeJRKAlk"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ebNdNC+F" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66BAo64b3476609 for ; Sat, 11 Jul 2026 12:57:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=cp4uLzOCic1 RRkGa7AiSR4wCQkdmgpEFJlMlPSR0hCk=; b=jeJRKAlk0IxnliHRBh6InvnuKnR IxlQmeA3YyRHgQuO76itsH6zBTB4ktp9S2sjtXVk+byihi/uya9p3YXAHSvh5r5R yzSZtvCcMP/49SaLTaY2DDNjpMRluJxEfhOLPge4UOr4cNH/PGkrN2UickXfHxmk gOg3iYAxxUCU3IS6Tg8izQvTz+rLcfiPBNE149zA9cc/S+Co5rlVnK9xiBvhBTgI 2GWgVdjaRZH//eQW1FcqmSQBgwArZwoyBHWKKfaxBX2ZlfirBINZT+FWXS0rDc71 FRY6T0LpW3sDIv+uKeKeB69jkzq3KI920jz/uwcVnBtFMX/JcSbFX/4Homg== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbee9gu3f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 11 Jul 2026 12:57:59 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-380a638fb5bso2046061a91.0 for ; Sat, 11 Jul 2026 05:57:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783774678; x=1784379478; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cp4uLzOCic1RRkGa7AiSR4wCQkdmgpEFJlMlPSR0hCk=; b=ebNdNC+Fer8I9rxfxKnlh/ccCQbBaoPv5OELS6YD1wzRN6789lMLGbBkGABet6dhpx 3p2M4bV6JUk+avUDcERhtkhldnzD2srcb/wYXeXyunUlJsGxAMrEn4f4qtm8iWZ/CutH Xy/PAcZf/U1kGMhZa+NCJK8hHCfn5GcBJUn+nYER9CVj7JdK7fAAeE50+5OK+p1N6Ibc ovMncfmelWXGLmUn5M3E5NFdW0DOgq4ct2K3lgh2cJYuUdL/VUl72tx7kqXcwpQ+wj4q O/CveBNNg1dI0UmNpk35Xjtda4rz/hbD2+QCx+EX5WvsYK9qBGP6VbaplHXerVjKKIh7 Q6SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783774678; x=1784379478; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=cp4uLzOCic1RRkGa7AiSR4wCQkdmgpEFJlMlPSR0hCk=; b=jMNkwMuNofpOEQj1TYAlm74/eaHELsrdEReJ1Eh+zdPpEU+j4P95Q75FY1LGVGTEYG OAieRMqQbM0OureNqEiTJPkPbB9Fc9i9avCctCDxQP2Agjj5DMHkIMqZqFDf6/B0dA+l 8UgF5WEKZ+KLa6X31KiZGFfavGgDfLLroElQibpzX8iciCQywOHSdR9WOgjkNmJjBk1U gtkv/SGDglsEzXN0zOFCkqKZHEKM7L2KPEik4f7c8Zm2LCLPBoMlyKiu66EUM3VfntUf wp/kArlxgqmK7kxgF4xtCx5PQmLWfH2lnle11Rs8Iy7psVEnMiYNIZ+A20OGt2KVaBaK U8Ww== X-Forwarded-Encrypted: i=1; AHgh+Rpf6ezwCC4qqM07vXwRBTo+n3xew5dZAZNVN8t+jg+33uWO8fRxqURtg8bwDnqB/ZwlSsxKgzTDv9VLxVg=@vger.kernel.org X-Gm-Message-State: AOJu0YwOVGA+CptLN8+cbI00Cxi7F3D96a8CXgdTNfo20wr+JZgH71bo SA3+srOsiqrgoxFNVIfG/3SpIS5bauQqpLV23EDsu3jSv2pbwaQlgvLAdJ6hKs4Jbtftlz2l0NX D/sZ9Wl7O8sz4Wx8ejeVNGEcVy8kYROavCBYmdMDhRweZIcn92kwYX8huNZ0J9MM6FSo= X-Gm-Gg: AfdE7ckNrfHUlPETQnzn3UlHxcYXtZgGqMdh6TSUgZdgsMw6Tyr6oOnMnbh07Z7OpwM UVvdlN7X6yUZP5W1N+N7e+3F3BuWLTJqbxbCfUoX8DiBIf+Iky8dDk+F8cLa5itrVJrvAqSV2kK PuFLk6DEiLq8CWULe14GCTlfLFGgH042vDZadtcX5CvglqWpvfjy5i47WLLvWXJSjjDHK7UONd0 XDSk0ZqDXhcQeM9hUfrqZ7tXlKTX8OOgT/4mN3lBn8JhL2IeHPoB16Jrv37ZnPzPDS78qsTgaxO cC+idbhCNHYAtA+aeDGKBd3TMrYekZ7xLE73Lj9c1aNwvCg1f84BcrtJZ+7WWsE7wiz8NRe9lE6 JeES/AXo/dZC3uh3bHr8M4PgSdFShuXoYPsYmEBBTCKKTEeg= X-Received: by 2002:a17:90b:3d89:b0:381:2811:e8ad with SMTP id 98e67ed59e1d1-38dc7777abcmr2924089a91.23.1783774677945; Sat, 11 Jul 2026 05:57:57 -0700 (PDT) X-Received: by 2002:a17:90b:3d89:b0:381:2811:e8ad with SMTP id 98e67ed59e1d1-38dc7777abcmr2924073a91.23.1783774677496; Sat, 11 Jul 2026 05:57:57 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313b9ca880fsm11185634eec.23.2026.07.11.05.57.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 05:57:57 -0700 (PDT) From: Mohammad Rafi Shaik To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: Krzysztof Kozlowski , linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Kandagatla , Krzysztof Kozlowski , Neil Armstrong Subject: [PATCH v4 1/3] ASoC: dt-bindings: qcom,q6apm-lpass-dais: Document DAI subnode Date: Sat, 11 Jul 2026 18:27:38 +0530 Message-Id: <20260711125740.3083236-2-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260711125740.3083236-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260711125740.3083236-1-mohammad.rafi.shaik@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwNzExMDEyOCBTYWx0ZWRfX3OjEkNVaaH6m nMKCCHY/ryjZAltV5zSVl9UhJ9E2zuR7yN7BujlWPKfdG3s0jCSNbUHwdagbgeZxa4BfUDtfpP9 9fMbFMo6iqNoKz4S1vUqNQLdhgJqVyc= X-Proofpoint-GUID: FlMoJfdIEDzBD3W4eJP1zX0y5cksitpA X-Authority-Analysis: v=2.4 cv=a7UAM0SF c=1 sm=1 tr=0 ts=6a523dd7 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=NrbrONOL4QpDeGKfLFoA:9 a=iS9zxrgQBfv6-_F4QbHw:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzExMDEyOCBTYWx0ZWRfX+y+X6v3y7F8y kMlj9IjZZU6XZ7u8EU2JpWnLwutvCc3XBMzLZ9Oe7jv+sZexu3M0NrtQ9MzNHQ2UoX27R9DqZTk Pn9nHvFe+KQgkAgJHsFMr2JxS7qchj0mBp+3IbhKGooC+jgGMR7GLI9yo0Q50YcXfabrze2Tqln o96ABIJXq3Q/BJ+C3H48MjWtQFOJYjeSbaztOrYOLyxGwk4g2rhqkmka3cRUFEizRaZuAvbShYy C1ZW2QZ2VmxwcP9Amcmhi31Fjt64Bl6us0JbwQYKXK9NS0qwnSf6YSZyucZXPQjInKVEnL86urX iX7P2zExQN2u6MM0gtuYG7C6OeIqzr6sC6YCyjoEkAjKtBuwaSmHGf2pLZdxtKrPEHqrwJk3Yf8 7kudYqrK+nVNghL5iZUDsEkKM/Rg0vuSeuBRlzxPnP6OqB8LyaIGuoWlid6K3InVdyzq26Ie2az iOlpXqJl+RIT5XlGoTw== X-Proofpoint-ORIG-GUID: FlMoJfdIEDzBD3W4eJP1zX0y5cksitpA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-11_03,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 adultscore=0 clxscore=1015 spamscore=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607110128 Content-Type: text/plain; charset="utf-8" Extend the qcom,q6apm-lpass-dais device tree binding to explicitly describe Digital Audio Interface (DAI) child nodes. Add #address-cells and #size-cells to allow representation of multiple DAI instances as child nodes, and define a dai@ pattern to document per-DAI properties such as the interface ID and associated clocks. On platforms such as Monaco and Lemans, third-party codecs are hardware wired to the SoC and do not always have an in-tree codec driver to manage their clocks. For these designs, clock line enablement must be driven from the platform side, and this series provides the necessary support for that. On QAIF-based platforms such as Shikra and Hawi, responsibility for voting I2S MCLK and BCLK has moved from the DSP to the kernel. This series introduces the required device tree binding support to represent and vote for these clocks from the kernel. Co-developed-by: Srinivas Kandagatla Signed-off-by: Srinivas Kandagatla Reviewed-by: Krzysztof Kozlowski Tested-by: Neil Armstrong Signed-off-by: Mohammad Rafi Shaik --- .../bindings/sound/qcom,q6apm-lpass-dais.yaml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.= yaml b/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml index 2fb95544db8b..f3a8b12d7fc8 100644 --- a/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml @@ -21,6 +21,49 @@ properties: '#sound-dai-cells': const: 1 =20 + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + +# Digital Audio Interfaces +patternProperties: + '^dai@[0-9a-f]+$': + type: object + description: + Q6DSP Digital Audio Interfaces. + + properties: + reg: + maxItems: 1 + description: + Digital Audio Interface ID + + clocks: + minItems: 1 + items: + - description: MI2S master clock + - description: MI2S bit clock + - description: MI2S external bit clock + + clock-names: + minItems: 1 + maxItems: 3 + items: + enum: + - mclk + - bclk + - eclk + + dependencies: + clocks: [clock-names] + + required: + - reg + + additionalProperties: false + required: - compatible - '#sound-dai-cells' @@ -29,7 +72,22 @@ unevaluatedProperties: false =20 examples: - | + #include + dais { compatible =3D "qcom,q6apm-lpass-dais"; #sound-dai-cells =3D <1>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + dai@10 { + reg =3D ; + clocks =3D <&q6prmcc LPASS_CLK_ID_MCLK_1 + LPASS_CLK_ATTRIBUTE_COUPLE_NO>, + <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT + LPASS_CLK_ATTRIBUTE_COUPLE_NO>, + <&q6prmcc LPASS_CLK_ID_PRI_MI2S_EBIT + LPASS_CLK_ATTRIBUTE_COUPLE_NO>; + clock-names =3D "mclk", "bclk", "eclk"; + }; }; --=20 2.34.1 From nobody Sat Jul 25 23:41:45 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 E88893C9ED8 for ; Sat, 11 Jul 2026 12:58:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783774686; cv=none; b=SmkLcq9dVIa5VvSgq8FVs4/17DHfZOJQ63Bw8AxYeZ+wHRIWppDWDvevVxfrpN/MiWWYi+YLZxm2VDgFn29zPYXMrQzg9tbkAxrNuh2vleyXeWn/eF4V82bFS+9NldrBM9bsYdXpL7m9/veUIZhL5gdiEXKgefrbrF2CXAr7sfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783774686; c=relaxed/simple; bh=KvUpskzBVPV/7vEKPv+bmGdVgAMdsRKyxfmvYIT20aI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CSsteoxp3wP7ClMY6AzT5Ex1ch8HG5MKgTNFcS1dsKyE7XRaEhle8/nN+X/29BvnXuCc9flwh51fV/PlN9Qm7GbTiZf220M8oQHm0Yp+a7HEXH35g9LmaPlbnVvmhJk4cgavVNIt1VnWT64VrFrORNXJQcEhC/iBYF0pLfKrzCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=IocvDBy4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=G9TivhG/; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="IocvDBy4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="G9TivhG/" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66BAnqm73434572 for ; Sat, 11 Jul 2026 12:58:04 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=D06ra01IvSd Mxz5XPt8RV1cHrQG6Bm8TGeQ7EiZzeXY=; b=IocvDBy4WMk/cbBa1L6HUeMTg2Z omMx4SZRk6fI7YyhmiKzLvMBq7BmnwPvnQUYQluG3FySyMUMuJgKQxxzw+quCMjh 7RODtPmjlEMBUIJsIbiooHo652Q9DiQqGB87ag4VylGwiXxL9buNYBLiN5830MBh AGF1ihxqr6e4FPEF2NL2AzRoOpts+n4imyxaX9PPEsFTf5gapfDaeQow70NLctSZ 3WwXaesDljIGl/V1AnhNDdwfe20OOwha73OysjlTS5PffMvWeens5bMXnR6w6ET1 XUJrKVDP8YBh4VGqAaMzUD8Whb7sJd/zWtX07xorscH+A7h3rKypIERzUPw== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbf0ggqnm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 11 Jul 2026 12:58:04 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2ca3b314193so36743215ad.1 for ; Sat, 11 Jul 2026 05:58:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783774683; x=1784379483; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=D06ra01IvSdMxz5XPt8RV1cHrQG6Bm8TGeQ7EiZzeXY=; b=G9TivhG/+v69QI47HQGPAqc19QJy/MOuPoDIR8e7mw65rvbzFRw7gkFbgtHtvV/YfY 6+QWgI4LH81vAhs9cU4wpunfVRXd8d1LikA+LGD9o6RINDwSR4TMP3OMBk+O5H90rf4I TYTPoyO4KcZTr5aCN94dIUEu8hUY5VW+BcnOUyhSryrL/z+3LvGU/JRdihOkBRGJpOD/ vCPVm3yv0x6e+q8N6oa3iAlT+jhn2CxWHwo/IO7o5E5YkhjfcyqpuDWioVmXz7eBZ5+k aAE1rGVO3IRyo77Z1ltOr5/VFfGK7yXqFCQvhT0fT+NWIuClmSCOG84J4YBm0RFlbSHb KcRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783774683; x=1784379483; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=D06ra01IvSdMxz5XPt8RV1cHrQG6Bm8TGeQ7EiZzeXY=; b=cHME80l+gH/rvzIrNqnYiUfe8+BefeDHMlhIrZKkUqcNZVt66P7n8RESGLxCdUZjnk cHUm+pGE7BkuIfXq3iwWYQRbMyGlL/BQLOLbEmBPDL1HGNlad+lE8GHLr2eRRV+Wj3X2 Asp0F2OPPfHXlumErdWhS/yhQrEMZWjLqMijvdNesQhuX4KSI4qoelEea7CXX7WAs+2K Ibq9bGJCF74Z/MvYgRzVlHlxlxPvSKWKaRYLroq7MqXFeLCb4cInDdZN2SfRgkaKmHFt RWfkmcogwo5Os2dBCdCbBV1jVDSeWdPnKtvy60T9myiFRy8CkZEzmZ1fnnbEjuAF/DZY Kg3A== X-Forwarded-Encrypted: i=1; AHgh+Rr0G7Dt89CWb9TXnRlsbCY6JmjOacDYG9nIC4OmPBrFfiVmG42jkbMpszVLRTt8AmSwytkLnqwIZozX8T4=@vger.kernel.org X-Gm-Message-State: AOJu0YxjWV0tj0ZCjR6nnbY2EZqDJWFW2Yc/t1QMB8uoE9/aTlz/DxkS VIn1Ztxs/Z2fiXjr62iY6STQ1Ogpbq1m8Haid3nGEbu2VaENY4pEbdeRfa/5oXmFl3tq7mq6AZU gGqMcugwgl/e6zRbsNwCF3kUvG8stWOqGLR9wQRY2Pa9el4f2YmGoq5jEBJNSjdTFrA8= X-Gm-Gg: AfdE7clO1aah/FNdG7HavhK8OgY9ECWB6+e8kUxzqRezvtYd6Aqr/zXefCJfe9XHsuS yAaz4VP8rolv9hr+P8YWTFCT5fxoF1Vcy6Y+f8M0WQdWpTIoDro/vn4REiIGbq2Y6XIi//AOxvT C8S96Nno9jODj8wUCWR11B1QuosoqjVOR4vkoRy2OjGmlRr/gu2RYwP1lNCLH/Va1cZRxVJFmIC /qaPs3iEgMYvPKdfVtoIlgTvumdZb6tBJvVrVPgLINXlj9gtxC6/BHOP/P/8OsmWbTQ3N/LPOTz rWBENwCDjfZdJI2ufFqFbGd4+PWuNiuWYFWBqDv9z/vkE3C2ekcYfrDYzxbr9bD5WR5bObx1dp1 d3NPvd7ZwgjSQwGmS/P4Mh/iaJrKrsgUBh/DWw0+RBCKbiY0= X-Received: by 2002:a17:90b:57ef:b0:37f:fdc8:71b4 with SMTP id 98e67ed59e1d1-38dc74c4a24mr2634299a91.2.1783774683325; Sat, 11 Jul 2026 05:58:03 -0700 (PDT) X-Received: by 2002:a17:90b:57ef:b0:37f:fdc8:71b4 with SMTP id 98e67ed59e1d1-38dc74c4a24mr2634282a91.2.1783774682795; Sat, 11 Jul 2026 05:58:02 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313b9ca880fsm11185634eec.23.2026.07.11.05.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 05:58:02 -0700 (PDT) From: Mohammad Rafi Shaik To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: Krzysztof Kozlowski , linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Kandagatla , Neil Armstrong Subject: [PATCH v4 2/3] ASoC: qcom: q6apm-lpass-dais: Add MI2S clock control Date: Sat, 11 Jul 2026 18:27:39 +0530 Message-Id: <20260711125740.3083236-3-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260711125740.3083236-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260711125740.3083236-1-mohammad.rafi.shaik@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=Nq3htcdJ c=1 sm=1 tr=0 ts=6a523ddc cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=Aj7a1bfOtWJOebrZNk4A:9 a=uG9DUKGECoFWVXl0Dc02:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: xZBTNBX0ZxvS4Wv7XrhP59J-NQAGzpib X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzExMDEyOCBTYWx0ZWRfX9e7l+Dwmh2hy aJuqHiC7txgBcRpo+BsgxUPk5l2vHTdZr8SvDQwzBLPna9fNVsu/gR6YCB/DL7LtDxpA3H1BkGU 1w17Orgrj9lzMtwmiJMvLuzC1MTj6xgMf0e99U6t4m+g7deXRm8zXI8rleVhKGgG4OTHwYjxOHL 4kx1LxF39Zh6/S+N5P6b+vKCSlW6EnFo5QYzEi1yuZ7RR6GkHb2GQdAlEnf8YmXql/X3NHX1Rok j0dVlXDS+gFrR/40Hxu6fEpE5cLJPaoDRjEAn4ZrJuJyEpNW9BgV83WPf1X/93gNWQRTjWUHvG3 4epIb1F2g0sAUFiy6L8cBPYxx1u2PBM4JT/PXfjz//U1N67u4cDnm4uA8ku5D+PGwrXx0u/voS1 CNLMLExlrG6Tgg/X/Q8Jl1JEtC1Rb04AH+tfU/j1GNH89B9YVZRSZumt2mjvnpXvj+YMBFEB5GN bgte82I0lFNvIxJ2+hQ== X-Proofpoint-GUID: xZBTNBX0ZxvS4Wv7XrhP59J-NQAGzpib X-Proofpoint-Spam-Info: AW1haW4tMjYwNzExMDEyOCBTYWx0ZWRfXwRnOPWsjowbq 9umScNFpX6p+H22csS9HOtVK9t3j194DCjuTPRzAWyewOfn4asMG6XOYi736A73JkyQgZqVXRWC O7LQduaxmdDaYs2QJNZbQUPVA30ArhY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-11_03,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607110128 Content-Type: text/plain; charset="utf-8" Add support for MI2S clock control within q6apm-lpass DAIs, including handling of MCLK, BCLK, and ECLK via the DAI .set_sysclk callback. Each MI2S port now retrieves its clock handles from the device tree, allowing per-port clock configuration and proper enable/disable during startup and shutdown. Co-developed-by: Srinivas Kandagatla Signed-off-by: Srinivas Kandagatla Tested-by: Neil Armstrong Signed-off-by: Mohammad Rafi Shaik --- sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 193 +++++++++++++++++++++++- sound/soc/qcom/qdsp6/q6prm.h | 4 + 2 files changed, 194 insertions(+), 3 deletions(-) diff --git a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c b/sound/soc/qcom/qdsp6= /q6apm-lpass-dais.c index 006b283484d9..5743586ffda1 100644 --- a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c +++ b/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c @@ -2,10 +2,12 @@ // Copyright (c) 2021, Linaro Limited =20 #include +#include #include #include #include #include +#include #include #include #include @@ -15,15 +17,64 @@ #include "q6dsp-common.h" #include "audioreach.h" #include "q6apm.h" +#include "q6prm.h" =20 #define AUDIOREACH_BE_PCM_BASE 16 =20 +struct q6apm_dai_priv_data { + struct clk *mclk; + struct clk *bclk; + struct clk *eclk; + bool mclk_enabled, bclk_enabled, eclk_enabled; +}; + struct q6apm_lpass_dai_data { struct q6apm_graph *graph[APM_PORT_MAX]; bool is_port_started[APM_PORT_MAX]; struct audioreach_module_config module_config[APM_PORT_MAX]; + struct q6apm_dai_priv_data priv[APM_PORT_MAX]; }; =20 +static void q6apm_lpass_dai_disable_clocks(struct q6apm_lpass_dai_data *da= i_data, int id) +{ + if (dai_data->priv[id].mclk_enabled) { + clk_disable_unprepare(dai_data->priv[id].mclk); + dai_data->priv[id].mclk_enabled =3D false; + } + + if (dai_data->priv[id].bclk_enabled) { + clk_disable_unprepare(dai_data->priv[id].bclk); + dai_data->priv[id].bclk_enabled =3D false; + } + + if (dai_data->priv[id].eclk_enabled) { + clk_disable_unprepare(dai_data->priv[id].eclk); + dai_data->priv[id].eclk_enabled =3D false; + } +} + +static void q6apm_lpass_dai_put_clocks(struct q6apm_lpass_dai_data *dai_da= ta) +{ + int i; + + for (i =3D 0; i < APM_PORT_MAX; i++) { + q6apm_lpass_dai_disable_clocks(dai_data, i); + + if (dai_data->priv[i].mclk) { + clk_put(dai_data->priv[i].mclk); + dai_data->priv[i].mclk =3D NULL; + } + if (dai_data->priv[i].bclk) { + clk_put(dai_data->priv[i].bclk); + dai_data->priv[i].bclk =3D NULL; + } + if (dai_data->priv[i].eclk) { + clk_put(dai_data->priv[i].eclk); + dai_data->priv[i].eclk =3D NULL; + } + } +} + static int q6dma_set_channel_map(struct snd_soc_dai *dai, unsigned int tx_num, const unsigned int *tx_ch_mask, @@ -251,6 +302,66 @@ static int q6apm_lpass_dai_startup(struct snd_pcm_subs= tream *substream, struct s return 0; } =20 +static int q6i2s_dai_startup(struct snd_pcm_substream *substream, struct s= nd_soc_dai *dai) +{ + return q6apm_lpass_dai_startup(substream, dai); +} + +static void q6i2s_lpass_dai_shutdown(struct snd_pcm_substream *substream, = struct snd_soc_dai *dai) +{ + struct q6apm_lpass_dai_data *dai_data =3D dev_get_drvdata(dai->dev); + + q6apm_lpass_dai_shutdown(substream, dai); + q6apm_lpass_dai_disable_clocks(dai_data, dai->id); +} + +static int q6i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned = int freq, int dir) +{ + struct q6apm_lpass_dai_data *dai_data =3D dev_get_drvdata(dai->dev); + struct clk *sysclk =3D NULL; + bool *enabled =3D NULL; + int ret =3D 0; + + switch (clk_id) { + case LPAIF_MI2S_MCLK: + sysclk =3D dai_data->priv[dai->id].mclk; + enabled =3D &dai_data->priv[dai->id].mclk_enabled; + break; + case LPAIF_MI2S_BCLK: + sysclk =3D dai_data->priv[dai->id].bclk; + enabled =3D &dai_data->priv[dai->id].bclk_enabled; + break; + case LPAIF_MI2S_ECLK: + sysclk =3D dai_data->priv[dai->id].eclk; + enabled =3D &dai_data->priv[dai->id].eclk_enabled; + break; + default: + return -EINVAL; + } + + if (sysclk) { + ret =3D clk_set_rate(sysclk, freq); + if (ret) { + dev_err(dai->dev, "Error, Unable to set rate (%d) for sysclk %d\n", + freq, clk_id); + return ret; + } + + if (*enabled) + return 0; + + ret =3D clk_prepare_enable(sysclk); + if (ret) { + dev_err(dai->dev, "Error, Unable to prepare (%d) sysclk\n", clk_id); + return ret; + } + + *enabled =3D true; + } + + return ret; +} + static int q6i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) { struct q6apm_lpass_dai_data *dai_data =3D dev_get_drvdata(dai->dev); @@ -272,11 +383,12 @@ static const struct snd_soc_dai_ops q6dma_ops =3D { =20 static const struct snd_soc_dai_ops q6i2s_ops =3D { .prepare =3D q6apm_lpass_dai_prepare, - .startup =3D q6apm_lpass_dai_startup, - .shutdown =3D q6apm_lpass_dai_shutdown, + .startup =3D q6i2s_dai_startup, + .shutdown =3D q6i2s_lpass_dai_shutdown, .set_channel_map =3D q6dma_set_channel_map, .hw_params =3D q6dma_hw_params, .set_fmt =3D q6i2s_set_fmt, + .set_sysclk =3D q6i2s_set_sysclk, .trigger =3D q6apm_lpass_dai_trigger, }; =20 @@ -297,6 +409,65 @@ static const struct snd_soc_component_driver q6apm_lpa= ss_dai_component =3D { .remove_order =3D SND_SOC_COMP_ORDER_FIRST, }; =20 +static int of_q6apm_parse_dai_data(struct device *dev, + struct q6apm_lpass_dai_data *data) +{ + int ret; + + for_each_child_of_node_scoped(dev->of_node, node) { + struct q6apm_dai_priv_data *priv; + int id; + + ret =3D of_property_read_u32(node, "reg", &id); + if (ret || id < 0 || id >=3D APM_PORT_MAX) { + dev_err(dev, "valid dai id not found:%d\n", ret); + continue; + } + + switch (id) { + /* MI2S specific properties */ + case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX: + case QUINARY_MI2S_RX ... QUINARY_MI2S_TX: + case SENARY_MI2S_RX ... SENARY_MI2S_TX: + priv =3D &data->priv[id]; + priv->mclk =3D of_clk_get_by_name(node, "mclk"); + if (IS_ERR(priv->mclk)) { + if (PTR_ERR(priv->mclk) =3D=3D -EPROBE_DEFER) { + q6apm_lpass_dai_put_clocks(data); + return dev_err_probe(dev, PTR_ERR(priv->mclk), + "unable to get mi2s mclk\n"); + } + priv->mclk =3D NULL; + } + + priv->bclk =3D of_clk_get_by_name(node, "bclk"); + if (IS_ERR(priv->bclk)) { + if (PTR_ERR(priv->bclk) =3D=3D -EPROBE_DEFER) { + q6apm_lpass_dai_put_clocks(data); + return dev_err_probe(dev, PTR_ERR(priv->bclk), + "unable to get mi2s bclk\n"); + } + priv->bclk =3D NULL; + } + + priv->eclk =3D of_clk_get_by_name(node, "eclk"); + if (IS_ERR(priv->eclk)) { + if (PTR_ERR(priv->eclk) =3D=3D -EPROBE_DEFER) { + q6apm_lpass_dai_put_clocks(data); + return dev_err_probe(dev, PTR_ERR(priv->eclk), + "unable to get mi2s eclk\n"); + } + priv->eclk =3D NULL; + } + break; + default: + break; + } + } + + return 0; +} + static int q6apm_lpass_dai_dev_probe(struct platform_device *pdev) { struct q6dsp_audio_port_dai_driver_config cfg; @@ -304,12 +475,16 @@ static int q6apm_lpass_dai_dev_probe(struct platform_= device *pdev) struct snd_soc_dai_driver *dais; struct device *dev =3D &pdev->dev; int num_dais; + int ret; =20 dai_data =3D devm_kzalloc(dev, sizeof(*dai_data), GFP_KERNEL); if (!dai_data) return -ENOMEM; =20 dev_set_drvdata(dev, dai_data); + ret =3D of_q6apm_parse_dai_data(dev, dai_data); + if (ret) + return ret; =20 memset(&cfg, 0, sizeof(cfg)); cfg.q6i2s_ops =3D &q6i2s_ops; @@ -317,7 +492,18 @@ static int q6apm_lpass_dai_dev_probe(struct platform_d= evice *pdev) cfg.q6hdmi_ops =3D &q6hdmi_ops; dais =3D q6dsp_audio_ports_set_config(dev, &cfg, &num_dais); =20 - return devm_snd_soc_register_component(dev, &q6apm_lpass_dai_component, d= ais, num_dais); + ret =3D devm_snd_soc_register_component(dev, &q6apm_lpass_dai_component, = dais, num_dais); + if (ret) + q6apm_lpass_dai_put_clocks(dai_data); + + return ret; +} + +static void q6apm_lpass_dai_dev_remove(struct platform_device *pdev) +{ + struct q6apm_lpass_dai_data *dai_data =3D dev_get_drvdata(&pdev->dev); + + q6apm_lpass_dai_put_clocks(dai_data); } =20 #ifdef CONFIG_OF @@ -334,6 +520,7 @@ static struct platform_driver q6apm_lpass_dai_platform_= driver =3D { .of_match_table =3D of_match_ptr(q6apm_lpass_dai_device_id), }, .probe =3D q6apm_lpass_dai_dev_probe, + .remove =3D q6apm_lpass_dai_dev_remove, }; module_platform_driver(q6apm_lpass_dai_platform_driver); =20 diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h index a988a32086fe..bbbe6d368a41 100644 --- a/sound/soc/qcom/qdsp6/q6prm.h +++ b/sound/soc/qcom/qdsp6/q6prm.h @@ -3,6 +3,10 @@ #ifndef __Q6PRM_H__ #define __Q6PRM_H__ =20 +#define LPAIF_MI2S_MCLK 1 +#define LPAIF_MI2S_BCLK 2 +#define LPAIF_MI2S_ECLK 3 + /* Clock ID for Primary I2S IBIT */ #define Q6PRM_LPASS_CLK_ID_PRI_MI2S_IBIT 0x100 /* Clock ID for Primary I2S EBIT */ --=20 2.34.1 From nobody Sat Jul 25 23:41:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 8D1223C8732 for ; Sat, 11 Jul 2026 12:58:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783774692; cv=none; b=Cbpiaww8xbktBOyycZgoFUjyfA332UnUgR3o17vM0cG9/KFrHbFW95GPYtKCtv59tiA1ToahAnDoBz4hGx0BbwqHGqWcbQ0UX6pzrJgenUQrfBP1qyf4d7kN30U6ELlWHyT0KkcNQ6fEh0CXKWcud9Ga4AOF5edmz0cT3YdX1i0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783774692; c=relaxed/simple; bh=YbS6dQCFVX48uGxNA9CbmvMJDrMYJaCKhqPv794VWTg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=siKqSPtUo8VHcAD4kDECrUdOxdz3H2175zDu1TwqyUIeGBtokOWPrxhvEL7PfTGCboeleHWZpwALol7DNfidvdZRM7ALzuMToNztV1NJevXnyMbGq5k4gvc7RuWbvVQFgZGyi/6ZeKv/j/8l8V9htJZei/8MY246C2Sx4NE9PCo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=AEyxIa04; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KbVV9tyn; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="AEyxIa04"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KbVV9tyn" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66BAmtX33474780 for ; Sat, 11 Jul 2026 12:58:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=x+8QOwpxkYA qy6i5nf9O32yYwrANC/lDlcX9pi0hY3U=; b=AEyxIa042iNlZ3FjZ5+nxWkA8rP Q4mVyNCC7bzVz7hJlEtNaiIfk888mg1cXasscwtrJJ8t0xNZ5tTfkNsmCKMEIwv1 40jLTXkO/yntkz1HgIAMqxa2omBPHCU7GQa8XiK+/Xy8cOgJHPhmH8g8V1kJ4Hek G+bJJzYAnk+HAk0h0FEB4nuoOiEVv+E+C38Mt0Zxx0PUOxjemge+tVHjEwD5TlVN gVqggaYCXhb2n+hXPL0Bv4MNt7AJF8KIoANmuB7ahV+N+kBXA9kKZkJGgTMdpVEl x8v71jJRLJfAbKggm9dGr/QXhT+neVnx/xPhjpcqwsrbz5cu0WXWnDMs35g== Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbee9gu44-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 11 Jul 2026 12:58:09 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c892143db7fso1667579a12.1 for ; Sat, 11 Jul 2026 05:58:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783774688; x=1784379488; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=x+8QOwpxkYAqy6i5nf9O32yYwrANC/lDlcX9pi0hY3U=; b=KbVV9tyn5P6E4Xisu3E7PA7/GYFivY0duw/khGotf/QOz6qNyPUGvvRjl2WQYvHaGG RLi1wnH3iyBaPt6yssRpPrpfF+5pf01UnAMJTwWdNLi5OkPXGCC0fAaikkeKiA4OY8Qp +6NiFZkpqRx66gTXq7bhjLIcaCdqZnVRyUO3kY69kZB/Mua6W0kBLb0QISKNerL+88CI HLE6XwIdwGh42e3rIu+NTVZsYq0YgORqPIC+CcoHsB8WIdScfKNgNuwf5sYWRZ90sdyx M2Z+/JjHMgBGrI2HemuUq0sZJ1mYjmEYgejdv0F1UxgBuiH/YYKb3NsKAPgg+ev/5tyf KcaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783774688; x=1784379488; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=x+8QOwpxkYAqy6i5nf9O32yYwrANC/lDlcX9pi0hY3U=; b=XTRjPnnn0Wq6F0q/apjTWxEN+29nWTU/1CEw4n5ZOkNGfZXhO1MTaJglJhG5aoeNLz F7PA0k0YW/9URBw2ItauOP36dprg34exr39ygjdY+pigyTz5KZSp/2Aik8Sd4JAPecHf vkwztPv1AmKpVtHP/Gjo9aDynLT+MIgo8J2eNsDbnPjy2c3GVhZHt7buS+KFjs0cC4oM lM5Lnr9PkAfC+pM0NFd74Iou6az5jzep7gAEeHFXmPPcPjMZ9KqV+ejgOIBsxiKbxEsS rxj6S236H24h/NfXEZsiTTPoaZPlCN9if3ZTGFjickkxrjsA/VF6GbVT2Cm9O0aHJ/Cm ZE5A== X-Forwarded-Encrypted: i=1; AHgh+Rozb7d4n29B1Y0z3/lSnDzUFl07gN++J0ik28pNwzYDlvZL/FXJz3ccDrcB377+2gWvaEK4LOH4ZySXfNg=@vger.kernel.org X-Gm-Message-State: AOJu0YyQ7ac0tYGwtYgTkpHXeBZ0DZ4YbeHhyNLRR9NmZy4PGqJWkuJ8 Y5R5D3Bw8l3K7SQ5vPQo+iBm9AeElWE9reG6RKDuM1AfsAkhp3sEhMl26wynprfLcHosrsJpWpM rkDLU/av7LRJnKz0xqeeSYtn6CkyFUjAlljRreolbxSQ8d5EyYJxqH+0uGkXMxNkpQ/I= X-Gm-Gg: AfdE7cle3JIqNP/S0x254cEOn9k9kg9y6i/XTiIABKasI1W/O/8CWtEg/09rD2Z3PYA wFwI1vnpoK2QQV/+TpmS3h+8b8t3LItsYH8Um0yVAQ8BX4c/evmbnxK9Q7ypviikp5zuoptvwer m4SvpFkbMKMYvy4PcM70Ct2Sisr5VcBM8n8t/2ClbsbNxLARFbmAMgDaT5XsYrVfG4wGvyYDx2S uDdK3KwCsnROhrCAsFgUk77dFClzzQtE4dL3nJ9cHpRZWazxVF+T7H9OnQI7dyfvS1dLmqf+/SY 09smlMbCixrsfv6hAiQ/AWetgYQ8xQZs+lzWdS1D1OU9UnRr+kAJi5d8suCglC05MamNkOOt1Di KRwJsH0qkTR8GDeFjIPp9DZ8vx+pzTgNdzM1G9FUuNpaN47U= X-Received: by 2002:a17:90b:4fc9:b0:381:9b7b:35e5 with SMTP id 98e67ed59e1d1-38dc782c715mr2811784a91.4.1783774688361; Sat, 11 Jul 2026 05:58:08 -0700 (PDT) X-Received: by 2002:a17:90b:4fc9:b0:381:9b7b:35e5 with SMTP id 98e67ed59e1d1-38dc782c715mr2811756a91.4.1783774687853; Sat, 11 Jul 2026 05:58:07 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313b9ca880fsm11185634eec.23.2026.07.11.05.58.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 05:58:07 -0700 (PDT) From: Mohammad Rafi Shaik To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: Krzysztof Kozlowski , linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Neil Armstrong Subject: [PATCH v4 3/3] ASoC: qcom: sc8280xp: enhance machine driver for board-specific config Date: Sat, 11 Jul 2026 18:27:40 +0530 Message-Id: <20260711125740.3083236-4-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260711125740.3083236-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260711125740.3083236-1-mohammad.rafi.shaik@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwNzExMDEyOCBTYWx0ZWRfX7KHMgRJlCLjy yUcGe0AZZTqyIUkspjkynjggOzAUG/KcgtcxHf6nD8m88FFoLUVMlcEW94/6lM1QXxlv97dad8W f+rXvgf/j7RP54Z4BakkCxntX1NzESE= X-Proofpoint-GUID: dkr0pwf1Idj_qYc-dOHEq0E_SBhdzbt9 X-Authority-Analysis: v=2.4 cv=a7UAM0SF c=1 sm=1 tr=0 ts=6a523de1 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=T-rPskIIbrx-efRHNJwA:9 a=3WC7DwWrALyhR5TkjVHa:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzExMDEyOCBTYWx0ZWRfX642jskpWIb+3 97JKXxFm8Vth/IfZ7JJI5TcdyqkvtVK63OC/YM3slD6acR6ZuI1/6mLBGIn/M1yeYgW/ekSZoN3 sJ+Je7lm/2ZDnfyaYGyIwlt1QGXJ2/XU9fSYsgwh6AQOrMbCXTZdowhoiw4L0//Y1mVk/Ly3jDU BF/2Lzn8i3s0ZrQgx09pu+1BhPH6VJnbPUtIP9rBxtsa3ykO+ZadbCHyA7TLcqWHOQfPYS0CUzV GMacFi0dK9cILtvqGxQVrGsgMOGH9AbBN4mCcTveEheB1fj9yR+g/kz9At4TdD22gEj1migWkJT WVrY1ZkOKmBWpCpXNqtH37+rDjEU83H9Vf1/IG+EJodzd7yjaW1sJuuduo4eoPCke2U3b8X7gEM pBOUOQ/BGMiT94BrRagKKvj0evuUA6u//dtpd7E7/K6aDeRTw7IaOTnlZQsPCMjeSgDaM8nwB/G gdc6R8Iyfq+nP67QEMA== X-Proofpoint-ORIG-GUID: dkr0pwf1Idj_qYc-dOHEq0E_SBhdzbt9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-11_03,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 adultscore=0 clxscore=1015 spamscore=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607110128 Content-Type: text/plain; charset="utf-8" The sc8280xp machine driver is currently written with a largely SoC-centric view and assumes a uniform audio topology across all boards. In practice, multiple products based on the same SoC use different board designs and external audio components, which require board-specific configuration to function correctly. Several Qualcomm platforms like talos integrate third-party audio codecs or use different external audio paths. These designs often require additional configuration such as explicit MI2S MCLK settings for audio to work. This change enhances the sc8280xp machine driver to support board-specific configuration such as allowing each board variant to provide its own DAPM widgets and routes, reflecting the actual audio components and connectors present and enabling MI2S MCLK programming for boards that use external codecs requiring a stable master clock. Tested-by: Neil Armstrong Signed-off-by: Mohammad Rafi Shaik --- sound/soc/qcom/sc8280xp.c | 252 +++++++++++++++++++++++++++++++++++--- 1 file changed, 232 insertions(+), 20 deletions(-) diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c index 98b15a527e37..eea571de9d12 100644 --- a/sound/soc/qcom/sc8280xp.c +++ b/sound/soc/qcom/sc8280xp.c @@ -12,17 +12,78 @@ #include #include #include "qdsp6/q6afe.h" +#include "qdsp6/q6apm.h" +#include "qdsp6/q6prm.h" #include "common.h" #include "sdw.h" =20 +#define I2S_MCLKFS 256 + +#define I2S_MCLK_RATE(rate) \ + ((rate) * (I2S_MCLKFS)) +#define I2S_BIT_RATE(rate, channels, format) \ + ((rate) * (channels) * (format)) + +static struct snd_soc_dapm_widget sc8280xp_dapm_widgets[] =3D { + SND_SOC_DAPM_HP("Headphone Jack", NULL), + SND_SOC_DAPM_MIC("Mic Jack", NULL), + SND_SOC_DAPM_SPK("DP0 Jack", NULL), + SND_SOC_DAPM_SPK("DP1 Jack", NULL), + SND_SOC_DAPM_SPK("DP2 Jack", NULL), + SND_SOC_DAPM_SPK("DP3 Jack", NULL), + SND_SOC_DAPM_SPK("DP4 Jack", NULL), + SND_SOC_DAPM_SPK("DP5 Jack", NULL), + SND_SOC_DAPM_SPK("DP6 Jack", NULL), + SND_SOC_DAPM_SPK("DP7 Jack", NULL), +}; + +struct snd_soc_common { + const char *driver_name; + const struct snd_soc_dapm_widget *dapm_widgets; + int num_dapm_widgets; + const struct snd_soc_dapm_route *dapm_routes; + int num_dapm_routes; + const struct snd_kcontrol_new *controls; + int num_controls; + unsigned int codec_dai_fmt; + bool codec_sysclk_set; + bool mi2s_mclk_enable; + bool mi2s_bclk_enable; + bool wcd_jack; +}; + 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 snd_soc_common *snd_soc_common_priv; bool jack_setup; }; =20 +static inline int sc8280xp_get_mclk_freq(struct snd_pcm_hw_params *params) +{ + int rate =3D params_rate(params); + + switch (rate) { + case 11025: + case 44100: + case 88200: + return I2S_MCLK_RATE(44100); + default: + break; + } + + return I2S_MCLK_RATE(rate); +} + +static inline int sc8280xp_get_bclk_freq(struct snd_pcm_hw_params *params) +{ + return I2S_BIT_RATE(params_rate(params), + params_channels(params), + snd_pcm_format_width(params_format(params))); +} + static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd) { struct sc8280xp_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); @@ -32,10 +93,6 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime = *rtd) int dp_pcm_id =3D 0; =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); - break; case WSA_CODEC_DMA_RX_0: case WSA_CODEC_DMA_RX_1: /* @@ -64,7 +121,10 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime= *rtd) if (dp_jack) return qcom_snd_dp_jack_setup(rtd, dp_jack, dp_pcm_id); =20 - return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup); + if (data->snd_soc_common_priv->wcd_jack) + return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup); + + return 0; } =20 static int sc8280xp_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, @@ -96,6 +156,63 @@ static int sc8280xp_be_hw_params_fixup(struct snd_soc_p= cm_runtime *rtd, return 0; } =20 +static int sc8280xp_snd_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_dai *codec_dai =3D snd_soc_rtd_to_codec(rtd, 0); + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct sc8280xp_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); + int mclk_freq =3D sc8280xp_get_mclk_freq(params); + int bclk_freq =3D sc8280xp_get_bclk_freq(params); + int ret; + + switch (cpu_dai->id) { + case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX: + case QUINARY_MI2S_RX ... QUINARY_MI2S_TX: + case SENARY_MI2S_RX ... SENARY_MI2S_TX: + ret =3D snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_BP_FP); + if (ret && ret !=3D -EOPNOTSUPP) + return ret; + + if (data->snd_soc_common_priv->codec_dai_fmt) { + ret =3D snd_soc_dai_set_fmt(codec_dai, + data->snd_soc_common_priv->codec_dai_fmt); + if (ret && ret !=3D -EOPNOTSUPP) + return ret; + } + + if (data->snd_soc_common_priv->mi2s_mclk_enable) { + ret =3D snd_soc_dai_set_sysclk(cpu_dai, + LPAIF_MI2S_MCLK, mclk_freq, + SND_SOC_CLOCK_OUT); + if (ret) + return ret; + } + + if (data->snd_soc_common_priv->mi2s_bclk_enable) { + ret =3D snd_soc_dai_set_sysclk(cpu_dai, + LPAIF_MI2S_BCLK, bclk_freq, + SND_SOC_CLOCK_OUT); + if (ret) + return ret; + } + + if (data->snd_soc_common_priv->codec_sysclk_set) { + ret =3D snd_soc_dai_set_sysclk(codec_dai, + 0, mclk_freq, + SND_SOC_CLOCK_IN); + if (ret) + return ret; + } + break; + default: + break; + } + + return 0; +} + static int sc8280xp_snd_prepare(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); @@ -117,6 +234,7 @@ static int sc8280xp_snd_hw_free(struct snd_pcm_substrea= m *substream) static const struct snd_soc_ops sc8280xp_be_ops =3D { .startup =3D qcom_snd_sdw_startup, .shutdown =3D qcom_snd_sdw_shutdown, + .hw_params =3D sc8280xp_snd_hw_params, .hw_free =3D sc8280xp_snd_hw_free, .prepare =3D sc8280xp_snd_prepare, }; @@ -145,38 +263,132 @@ static int sc8280xp_platform_probe(struct platform_d= evice *pdev) card =3D devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); 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; =20 + data->snd_soc_common_priv =3D of_device_get_match_data(dev); + if (!data->snd_soc_common_priv) + return -ENODEV; + + card->owner =3D THIS_MODULE; card->dev =3D dev; dev_set_drvdata(dev, card); snd_soc_card_set_drvdata(card, data); + card->dapm_widgets =3D data->snd_soc_common_priv->dapm_widgets; + card->num_dapm_widgets =3D data->snd_soc_common_priv->num_dapm_widgets; + card->dapm_routes =3D data->snd_soc_common_priv->dapm_routes; + card->num_dapm_routes =3D data->snd_soc_common_priv->num_dapm_routes; + card->controls =3D data->snd_soc_common_priv->controls; + card->num_controls =3D data->snd_soc_common_priv->num_controls; + ret =3D qcom_snd_parse_of(card); if (ret) return ret; =20 - card->driver_name =3D of_device_get_match_data(dev); + card->driver_name =3D data->snd_soc_common_priv->driver_name; sc8280xp_add_be_ops(card); return devm_snd_soc_register_card(dev, card); } =20 +static const struct snd_soc_common eliza_priv_data =3D { + .driver_name =3D "eliza", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common kaanapali_priv_data =3D { + .driver_name =3D "kaanapali", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common qcs9100_priv_data =3D { + .driver_name =3D "sa8775p", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), +}; + +static const struct snd_soc_common qcs615_priv_data =3D { + .driver_name =3D "qcs615", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .mi2s_mclk_enable =3D true, +}; + +static const struct snd_soc_common qcm6490_priv_data =3D { + .driver_name =3D "qcm6490", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common qcs6490_priv_data =3D { + .driver_name =3D "qcs6490", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common qcs8275_priv_data =3D { + .driver_name =3D "qcs8300", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), +}; + +static const struct snd_soc_common sc8280xp_priv_data =3D { + .driver_name =3D "sc8280xp", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common sm8450_priv_data =3D { + .driver_name =3D "sm8450", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common sm8550_priv_data =3D { + .driver_name =3D "sm8550", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common sm8650_priv_data =3D { + .driver_name =3D "sm8650", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + +static const struct snd_soc_common sm8750_priv_data =3D { + .driver_name =3D "sm8750", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .wcd_jack =3D true, +}; + static const struct of_device_id snd_sc8280xp_dt_match[] =3D { - {.compatible =3D "qcom,eliza-sndcard", "eliza"}, - {.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 "qcom,eliza-sndcard", .data =3D &eliza_priv_data }, + { .compatible =3D "qcom,kaanapali-sndcard", .data =3D &kaanapali_priv_dat= a }, + { .compatible =3D "qcom,qcm6490-idp-sndcard", .data =3D &qcm6490_priv_dat= a }, + { .compatible =3D "qcom,qcs615-sndcard", .data =3D &qcs615_priv_data }, + { .compatible =3D "qcom,qcs6490-rb3gen2-sndcard", .data =3D &qcs6490_priv= _data }, + { .compatible =3D "qcom,qcs8275-sndcard", .data =3D &qcs8275_priv_data }, + { .compatible =3D "qcom,qcs9075-sndcard", .data =3D &qcs9100_priv_data }, + { .compatible =3D "qcom,qcs9100-sndcard", .data =3D &qcs9100_priv_data }, + { .compatible =3D "qcom,sc8280xp-sndcard", .data =3D &sc8280xp_priv_data = }, + { .compatible =3D "qcom,sm8450-sndcard", .data =3D &sm8450_priv_data }, + { .compatible =3D "qcom,sm8550-sndcard", .data =3D &sm8550_priv_data }, + { .compatible =3D "qcom,sm8650-sndcard", .data =3D &sm8650_priv_data }, + { .compatible =3D "qcom,sm8750-sndcard", .data =3D &sm8750_priv_data }, {} }; =20 --=20 2.34.1