From nobody Sat Jul 25 19:30:20 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 27E1E49219D for ; Tue, 14 Jul 2026 14:53:11 +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=1784040795; cv=none; b=Volatjl16NjBSyLUv/sHZy03jh3XWqI87QNtgTtFrzhl0eFnn4+eW3NGPDrZP0uo/xGrmvZGgR3LMcXUkzNUbMIGYqw4v5TdnxYW/X+xzf7yAYFuc+UdnksqTNQ43OXQI9wgJmnTIvv//ZiiK21UHZE87r/tVLe6TztpNLAzYOk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784040795; c=relaxed/simple; bh=mUsS+GvxnVmAQvX3tN/URUtS6qia41RXJhMZqg1lKGg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VQvVS4x1I9oKkUF5MtPWsBv21fXBRT14gaRV3vn7Gjlw6jYxkt1VvCJjB/3px4kc2syYI7ovDCNaxfmYgkShVEaQHM2+0X4CxNyNyRIx1GlW/SiOcAWmef7D9mKayqc5Q0McXBqW722LV5PeSrJjilkbuxJWruMb11ViCowx9pQ= 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=pqqu5J1A; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bCDDkfQb; 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="pqqu5J1A"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bCDDkfQb" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66EEch2h824385 for ; Tue, 14 Jul 2026 14:53: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=N4zDumXgGqT zNb1A7W7PrnDPcMHrX3OAzIUOpDTYsBM=; b=pqqu5J1A99a7ase9nLil+XdLSNQ ms1RkoTw0SogpVKN3ZJw8cbvZXJyrC5UP+Rbm9X5gYViDZPuPuuaDj1DLy3igNof PpSrTtNjbLn+CyaVl2UFN3blLzLPrZJwKhRFw5205SgLySBBlrNretFN3N+VJv06 kTVv2PSak4LEsCvhilPNBFTunv6UKYM8B+3bH1b5H2b3i9K324vnnm+nA6dsifZK TK6KU+8xBWQughpzw04GXTeZBkVnXP6obYuFZ8jEAv6TXeJLpXms1Wo/YSopc6Xw EXJNojROoE2UtQonCKTvGiRgIP16k6S1N4hlDLrrjodDBS2gaJHzwg2LdMg== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fdbr4aus3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 14 Jul 2026 14:53:09 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38c7e26ecabso1151067a91.1 for ; Tue, 14 Jul 2026 07:53:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784040788; x=1784645588; 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=N4zDumXgGqTzNb1A7W7PrnDPcMHrX3OAzIUOpDTYsBM=; b=bCDDkfQbqlZZdt0tV0MX/R9XOJyhMdewPFEr6wMb/fDhE4I6iqzqcwBJ+eNC9cagtZ MRfag3zctz6x8BWkOZIXrhmWvHfm/hNIbOswBv6xR+fm6zjnMjcwO7FMrmRrf7rwT0YL I0KY5BemJaKTp8fQNLuHuSBH56d3c0ZcrAxzWZe45MpaxDx1rwvR/2XVJxwAUwRX18Zo OUlWp0ZhNyTrhDSuaZHq/bTnvmM6iDwBvzaHl/koOUjdClWQf+3engy2wtFXVBHQFhL4 hz1pDXoPbWOpVlGiBc90f18I+brVAYXsdHtjsTlNuhKoq0NnYKXdMGZYesPPMPr6/GOk aDYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784040788; x=1784645588; 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=N4zDumXgGqTzNb1A7W7PrnDPcMHrX3OAzIUOpDTYsBM=; b=aCmg/HG07oEbZ50/NQ1VhUCZpdqc74co9omwYIUoQI0X1B1m7Y3s71or6BasXulh22 aHK7CctRSpxGd1hztByVCfQGNqqm45d/aB+5M4TQzv5/0/KVLdHWfWrAXEzA6GoT+fX0 ykrsS4FEZ4vfDUQXhaTEKHeAeyqSzeDY9YYF9SGOah7jC83V1UVzaXk7UujNmmKximcS 2FOH5UavsdlVZBGUvOekbqgHDigwlC6o0Ol0CwNzQvIaF6Gx42PUTtQyjbDWUisa04Cy rxrybaFfzy/TXnyyYMLNIR+eHiPbRAgoBYe0+ZOfdM3V+O2t60RpEgCfRZm867peBj2D 5ymA== X-Forwarded-Encrypted: i=1; AHgh+RoVW+AiuRWKhYR9d7UohSNuVn+t6SBL1znKzUzoiCfYpppev6EjceBI1WgIKa6/Uh4XrrcHC7rqKDNqOwU=@vger.kernel.org X-Gm-Message-State: AOJu0YyTAG+9DIHe+Mz1mdmTqH5KiTrB9S6wRuEmNaGYsYK8uX8G6gsk rPQu/cownrERMUhLDP83do1C7B43ieJyRdlVEVWY5476VqPCmzgVJKd1r2061ajeAn6ulNy89H3 pzUfm66dnw0PDmVeVj4Dmy8Kyq9d6o/L15BCZPLZOyB5ysIpjUNhZOqGk5g22pLJtSaI= X-Gm-Gg: AfdE7clm9+SSdxMUYH2kC8II/a0UsykSkHKEZJR/oGy+BXZSlZl+5B8W9YyawwEwR5y juMtpE272JUtxIJdHw68PZ1Xgdp8RFpSV5jq2Siyww0gWC1SQ3gfndNX+qJuXei14qAlLOBK0dy 46HfyC9bUv4Jk+BtzzSgOWtS8NDYKIlcj+VItQYCL6A7dCRQbD3xdi6BbBFeu5WWJkXLX7s3VP+ UQ68KJL/h1INTPaUcsnNciVY4Onm4/gTMGKC7YILpWUh+3SBvuJ/2gLhiYr0kHwfl6rrhGkpcqO DkaaBgoJFVFdgiJPcN+ysZruWZVY1pkpWwvMcyoUY9hjMDL7iGRZdUkmNR3nh3AlyOxuV7fS5Kj rney/ArFUToHV7hP/yDe1f5d6zRYusfLyDg5pvH1UTVrvnug= X-Received: by 2002:a17:90a:2ec4:b0:38d:adae:4866 with SMTP id 98e67ed59e1d1-38dc7b3f843mr9709056a91.21.1784040788240; Tue, 14 Jul 2026 07:53:08 -0700 (PDT) X-Received: by 2002:a17:90a:2ec4:b0:38d:adae:4866 with SMTP id 98e67ed59e1d1-38dc7b3f843mr9709020a91.21.1784040787736; Tue, 14 Jul 2026 07:53:07 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313cb804197sm31941773eec.13.2026.07.14.07.53.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2026 07:53: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-arm-msm@vger.kernel.org, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH v5 1/3] ASoC: dt-bindings: qcom,q6apm-lpass-dais: Document DAI subnode Date: Tue, 14 Jul 2026 20:22:48 +0530 Message-Id: <20260714145250.2473461-2-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260714145250.2473461-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260714145250.2473461-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-GUID: s1IefEf1ycfQHTPWXlq3zYNa_uNIFTck X-Proofpoint-ORIG-GUID: s1IefEf1ycfQHTPWXlq3zYNa_uNIFTck X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDE1NSBTYWx0ZWRfX2JiFaz9f1Dqh cc9Ac7lTm9zVz+MryDlXNzDqIOLz3S7pAbUlWyvgf56iEMOGRBFlzpubpgasxoftDtap+TZIjIY jH/vP2q4KqZAj7Vl2VAOGVomGFLXZSPMg7Rtkom5JgL9OsUac2rwsjR+N85soj/hn2+NEvWLr3z /pdmuLTJK8cwHKJiJwDMZYNbRZ1JAWPNFlz6hjSIBy2BMhL1sUO5svfY05AoPkQjbs+UgXP1cm4 TwpvPmP+8N080Y8bPzQPoAauccwsVeA0bdNExO8zV5XzFfdsWgfeqGPAPHigRHCrUAkIljpeer4 SHELWzZy29lcHZWbosaFRlA6lspccTTa410i2WzParQsKGukRqlW12McK3IBHwrNozP51UZZ08F fC3QeNSKU3qmiGI8KpJR68pAiv67XfvLhqJ/Nt7swnUJRfVDfkluUfukj/V70Sl50+eR65lxpoc UAHuHSfb8vxZBvRW3yQ== X-Authority-Analysis: v=2.4 cv=F5hnsKhN c=1 sm=1 tr=0 ts=6a564d55 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=VOP_JMduspszKC0JWG4A:9 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDE1NSBTYWx0ZWRfX2qdSvbZMp/xe nYECA0iWS8rEkRorJ7kgkKt9zIoZAB9O93zQvGryT6MT7ET4DRhISOGV5VDajZEcn6lQkHOicV8 VCav8ObSh9s864X9txbfSUiEXUsgQWQ= 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-14_03,2026-07-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 clxscore=1015 adultscore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607140155 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 Signed-off-by: Mohammad Rafi Shaik --- .../bindings/sound/qcom,q6apm-lpass-dais.yaml | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.= yaml b/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml index 2fb95544d..b37c62ccd 100644 --- a/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml @@ -21,6 +21,82 @@ 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 + maxItems: 2 + description: MI2S clocks (mclk, bclk and/or eclk). + + clock-names: + minItems: 1 + maxItems: 2 + + allOf: + - oneOf: + - properties: + reg: true + clocks: true + clock-names: + items: + - const: mclk + additionalProperties: false + - properties: + reg: true + clocks: true + clock-names: + items: + - const: bclk + additionalProperties: false + - properties: + reg: true + clocks: true + clock-names: + items: + - const: eclk + additionalProperties: false + - properties: + reg: true + clocks: true + clock-names: + items: + - const: mclk + - const: bclk + additionalProperties: false + - properties: + reg: true + clocks: true + clock-names: + items: + - const: mclk + - const: eclk + additionalProperties: false + + dependencies: + clocks: [clock-names] + + required: + - reg + + additionalProperties: false + required: - compatible - '#sound-dai-cells' @@ -29,7 +105,20 @@ 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>; + clock-names =3D "mclk", "bclk"; + }; }; --=20 2.34.1 From nobody Sat Jul 25 19:30:20 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 8470348C8BC for ; Tue, 14 Jul 2026 14:53:16 +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=1784040803; cv=none; b=R8wV1XG4DBrtNoj78E5dikU5b8davXsiKyov2f4TJhmVAp6HSqxO080Xw/dW68TF5jrk3TiJWKZMpGnAGtcXp+12k3mp6VadjtqG3s5AEpPw94KtVPPmanFa+nU4N73gGoeLbv+/T4ixUvfZu1Rhi6cORkOIAVLyB2SJdX15iYg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784040803; c=relaxed/simple; bh=xrwaAHbnVExHsqHGYhJkGbQsEOoKu1dBqwSOTP4njNs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cBk2HhaE5AFjJ8gWnkPjVjDtYpGGSCtjGuSgb7BbDlQmGANtmTqtzqeGpj9QbjxacuJk7EvfKrkbk/e3HO8zwmYYCIcGvm9sMqrbafSL4kiKKQNJiidtkOZQe/AKrgp66lEdjOKxfP3/idFtb4AURb8AMk/r8Ck7Ms70Qs0BJf4= 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=kjM5G7uD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RsyjFDr/; 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="kjM5G7uD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RsyjFDr/" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66EEch43824377 for ; Tue, 14 Jul 2026 14:53:14 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=njyQPlyf1rk av6QBwZPOvqqqPVwldTUvErL1mc4lwao=; b=kjM5G7uDZkpPQwBMUncGqjL8bh0 K5n4xmxrGHXbfcp1mbnZEQ9qbhQhdY7k0lFns+ZEkUeVeuCDLgoGmsuiBnSh+jQS a2hA6qWJje4shxnr4QYpsMh6CIA8TB8IpkObcJpWxKIaAM/IXciCndZh6/Dqmy2r bZKzM6mmBLUVd9dNF09KekuCUvLT0Keh2VBWQ0d6dQ3PCpsUZ4emJLL7p6NdO+YG BokMLC81TBR14HbJ2F1cu5I74jwpg+Gzbzsu2UmBYr5h1YI7dWv3zxAfYF8lFcrF 7Iu7m7L6RH1d2xiohlb1f0eko/WnCi/7Qq37i4WBG0x/s1Tc0045PNoBRmA== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fdbr4aush-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 14 Jul 2026 14:53:14 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c916d17dd43so7501711a12.3 for ; Tue, 14 Jul 2026 07:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784040794; x=1784645594; 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=njyQPlyf1rkav6QBwZPOvqqqPVwldTUvErL1mc4lwao=; b=RsyjFDr/2ATtRobXEgNUtPwrrP/IO1KrVJ1WxmQcnOkGu0iJUTNQUKfTZf0Cf2xX/B cAwbkIcEE8UfkosDpM/nu7lSKeAVc44S1QEDwqcNcexWHj8ygYRsAoxVUqOfEFXyz+U9 49LMyXdhxla4kP3kJnkTMJkLabfQB3BMj0zGU4ZpWQjl+4LZflPoXD9Y023RfVZxO/Ic Q3rC3UJdR6C0ccTHHZ3ZYSg9JPZpQELEb8RDQfylQM6FpFuwd8D2/gWs14JfhfQt09F7 DAdpompsdwj3tjsowQHHLkhf3wONjJXchpq4c+FIUnf6DdKgGpiLlP1lCdCmAraQuhsk 9wkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784040794; x=1784645594; 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=njyQPlyf1rkav6QBwZPOvqqqPVwldTUvErL1mc4lwao=; b=jLiryI5sEhEFK0ctIyNh2pmBaT7nzLQRJqu46K5Quf3Jm/82z9s/GfoMxi5HYKpenS 2rtS6nE8UHseUkpU0JAOWzogsqbk0SePCBRmyfKXHKxKqmNG7WUmAsshwVIpZNyfEyTR kYW03JJyydfan3buLTJXD5jllpwXjlTUxwAtXCmJudZvAKxT7+KNI4PM+k7IbfBY9kvC gCitDw67ErMNbmomjDoR1URp6A7heVuCAwCeEGnRX94wIWeHnFZ3ahhZqlPCEogjkG3a J4D8JPU26fqZlPwo56MMuMroQwTHXeSk2ArgDRe5OIMrPgbOEvp5Hfk9kjJQx++YUs3I lLUA== X-Forwarded-Encrypted: i=1; AHgh+Rpk/v4JM5iMVqB65Zu5gxLvWsAVGpb+Pqaa6uj8BJNWzuylRJRR7mAx9EE5rgYQS789aQGm+weDvlqZk8w=@vger.kernel.org X-Gm-Message-State: AOJu0YxmVu1wmSmCVrINNpeiS+l+/ys6e5xJAxN3E0wXe6T92WVOiXVC NW/1r0hlIayG1k2Cbx68kgCZW/lZNTDWXaPP7bT3YBtVSW9Pj59bIlpOYI8BRyel3Ic1vMQt1So Or+Egyso66t3XnB1sgoZPDvaqM2lxmCNkuvYfXNodXABKCvdzheK0+lyN3zcPfvp5iXc= X-Gm-Gg: AfdE7ck2le7qyIBdueb3ZvnXZolTnp7AIalf22lZlHuW//htEMb1RIRhQKuCIoNCKDv t8sHCIkYbmu0ZvgRQDQbTXMZyYWITtJNkfqQGMHTFUoyBlStI3cBTIH6kogRAbUQMak/o9FHilg rDKdJ7UpDcSn+uFSf2HBashV1hH8GvZy7ASGBIeG4QCBQwvaQK9l1zdvgesJLji2X6xOz6Z+rGZ GD/QDHRc+Og5Sv8ytEa19mLf1qCVdfEzmHyKymxlo6IU0ypN6whlZc9mq9yrElOlGZ2nCb8UvCJ tid3jhd6vtbY4CKJySzHu3USjA19ii+ISApH9m3w7D3K1frkH2dQHGd/U+hTW6k34x1DmKoPu16 F0La3j/rfV5UY66iBBvjut2cRkhmNUR0BfvvNLuYOG0ZGfG8= X-Received: by 2002:a05:6a21:339a:b0:3b4:84c5:45c8 with SMTP id adf61e73a8af0-3c11029a002mr18498849637.24.1784040793601; Tue, 14 Jul 2026 07:53:13 -0700 (PDT) X-Received: by 2002:a05:6a21:339a:b0:3b4:84c5:45c8 with SMTP id adf61e73a8af0-3c11029a002mr18498800637.24.1784040793022; Tue, 14 Jul 2026 07:53:13 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313cb804197sm31941773eec.13.2026.07.14.07.53.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2026 07:53:12 -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-arm-msm@vger.kernel.org, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Kandagatla , Neil Armstrong Subject: [PATCH v5 2/3] ASoC: qcom: q6apm-lpass-dais: Add MI2S clock control Date: Tue, 14 Jul 2026 20:22:49 +0530 Message-Id: <20260714145250.2473461-3-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260714145250.2473461-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260714145250.2473461-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-GUID: rBc3n69dxQ57cXaDrUsMDPN5_UNPRy6y X-Proofpoint-ORIG-GUID: rBc3n69dxQ57cXaDrUsMDPN5_UNPRy6y X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDE1NSBTYWx0ZWRfX4HEyJcdQsNfR QT3PIp6J43fmjzEuOmpeOAR5g+mKUvp7h9rneEvcm7BK3aKJq8ORBoxkSvWg4zvsIgtpjOBk6uP PwQiDySTGHjiHipeG6xhDCLSW+vDgxXOxDzGlGTKu5Lo+H6bmWuJ5L3dlg9G017QtAKXlUh2ost MnBYxWsCWhAu20jfLUHsUFdBZX7HMGLVBq7K0oNGdwuoni5X5Fux44O5+R5LqPyTLVoqEeoOl4u QA4N5zG2BYKQSUGOH9rnjJ8vNVaE3HSCLZx8/2Q0BdV+/g+lwAz/krmQVpblC+FhkxHcFxqYjjC pbJwwFoVIOkovDpEp3IUzXOFvNBi6y3zE4/wm2d6+mPtmOYNIeimCMwTn7FLt6Or/0M7Rp65j0S vc9iqoMln0WspWMZ5wktkK8mX7zn6XwVM4N1gBr7OKCI0wKZ1GePBXYzmZBCWfXpzO5I/Ywgcs8 if8jpNJ9uftIoBA5Hjg== X-Authority-Analysis: v=2.4 cv=F5hnsKhN c=1 sm=1 tr=0 ts=6a564d5a cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=lGR961BgJX-Zf7vNLHcA:9 a=_Vgx9l1VpLgwpw_dHYaR:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDE1NSBTYWx0ZWRfX6Z/xRozY5o0l HIZCYo4zCSwHKL9RlDwIYR6xEoKr8N4z8XXPePy3auZj3JBZFojfe5afymnpuVsjuPkgu9Cmg8E KmSKecxl/ZNvVolAIA6eK902CnR59zw= 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-14_03,2026-07-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 clxscore=1015 adultscore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607140155 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 | 194 +++++++++++++++++++++++- sound/soc/qcom/qdsp6/q6prm.h | 4 + 2 files changed, 196 insertions(+), 2 deletions(-) diff --git a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c b/sound/soc/qcom/qdsp6= /q6apm-lpass-dais.c index 006b28348..040b97f03 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,76 @@ 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)) { + int err =3D PTR_ERR(priv->mclk); + + priv->mclk =3D NULL; + if (err =3D=3D -EPROBE_DEFER) { + q6apm_lpass_dai_put_clocks(data); + return dev_err_probe(dev, err, + "unable to get mi2s mclk\n"); + } + } + + priv->bclk =3D of_clk_get_by_name(node, "bclk"); + if (IS_ERR(priv->bclk)) { + int err =3D PTR_ERR(priv->bclk); + + priv->bclk =3D NULL; + if (err =3D=3D -EPROBE_DEFER) { + q6apm_lpass_dai_put_clocks(data); + return dev_err_probe(dev, err, + "unable to get mi2s bclk\n"); + } + } + + priv->eclk =3D of_clk_get_by_name(node, "eclk"); + if (IS_ERR(priv->eclk)) { + int err =3D PTR_ERR(priv->eclk); + + priv->eclk =3D NULL; + if (err =3D=3D -EPROBE_DEFER) { + q6apm_lpass_dai_put_clocks(data); + return dev_err_probe(dev, err, + "unable to get mi2s eclk\n"); + } + } + break; + default: + break; + } + } + + return 0; +} + +static void q6apm_lpass_dai_clocks_action(void *data) +{ + q6apm_lpass_dai_put_clocks(data); +} + static int q6apm_lpass_dai_dev_probe(struct platform_device *pdev) { struct q6dsp_audio_port_dai_driver_config cfg; @@ -304,12 +486,20 @@ 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; + + ret =3D devm_add_action_or_reset(dev, q6apm_lpass_dai_clocks_action, dai_= data); + if (ret) + return ret; =20 memset(&cfg, 0, sizeof(cfg)); cfg.q6i2s_ops =3D &q6i2s_ops; diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h index a988a3208..bbbe6d368 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 19:30:20 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 500F6492186 for ; Tue, 14 Jul 2026 14:53:23 +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=1784040809; cv=none; b=aCqgnVR4kMyppLTRXcoUV2JdtnEOUBjD5YWed4M920/ek4yiY1yGiOjcrc8nmEgOjnzSSINaCJ1TN6LWJfdP1TZdeoyxT2os10zFBb8LE8+qac08+df6LCYBjAhXvnTavpl5wwsYidwbLTRfW4QbPAT7JSh1jtS4iNetIXc6BFk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784040809; c=relaxed/simple; bh=hdw8J2ZBOu0nycl3TGkq3ROoRnkzek60WiOdlSZSFb4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=W6mJI/2WUSUV6KVAkwP/empWDC4kkWRlsurmfDKNvthSVqD7BWIEU0477HOy3JshcIpsoyYvvX9D2eLBDAiZ5E0EDOS3uqGa3/wx3usg0K5UIElv0Ry4nYHykau8mT6N/A6a/6YFVAwK4L3AzsZjF9I2hRnrfrwI8rtlj/KgSH4= 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=CcM52aff; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=AkMeFcJT; 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="CcM52aff"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="AkMeFcJT" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66EEcj6n824481 for ; Tue, 14 Jul 2026 14:53:20 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=bW+BJeB73TL QniouiBJuhbKOq+WyLzgtTosYyjjnXP4=; b=CcM52affUgkF9QHe7jBEIsNY5z0 HTGwV1vewqoKzpKPbtGtdSTUVB6mRdqrT3FbxoiR4Qf9uCoLEPbfOKkikkmoPK85 Y2UQ/H2JpE99odkbnXt37N+YfRH9SdP2/hR6+foOsf3enUBC4whqrLnEwBEfBtI8 LHjeKtaEA4+h2+ta7lDFTzWTHA2B5Xtnuh5g8dFwf0hirsxobXrtLupKn8jlRnf4 DiHBdod4oBEPLqMAVsCiZic4D+RppMMI0v1ISfCFLMpso7lGEv2uY/I6gQYtqnSh zUF2v7t3cRz4je1J2hpw7J+SKQf6EclHzdBXsQtc4a6SbcXlWEFiEqRvVdQ== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fdbr4ausy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 14 Jul 2026 14:53:20 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38c7de7baf1so4958442a91.1 for ; Tue, 14 Jul 2026 07:53:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784040799; x=1784645599; 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=bW+BJeB73TLQniouiBJuhbKOq+WyLzgtTosYyjjnXP4=; b=AkMeFcJTQ4QCTTPDX7i0wvaQzhR6RzB3/mGLZfBypjyNIFQHjZ1GCdU0Sk2iwEBr0B jGxAcM9rJxRa//qV4ZAvALQBuUe8ZGNYx0mA+H50tgOlgKXs89kojXt3tTj+clAQ+9uG 3buIBxEZNP4/MVRp8RdhwyTU8gI4c9IaF5Tu5cxnwPLVJDX+wPU06l34rGtX0yWKgmxw DOZ+8hbHUpO1lV9Dou0vYdS1R7oMnpUHk0jgdMMxOwG+qaHTRhE4VQUqyDoSvtif4Mc7 bgc6fkaJVs570NO/7qAJvOuwRgKCxL5ZbN0/zfn8YXXdWOMAorcBr07rAn+pUtGn3NEz CB2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784040799; x=1784645599; 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=bW+BJeB73TLQniouiBJuhbKOq+WyLzgtTosYyjjnXP4=; b=OuQtOsEgo7Xmr8yzTGprb/+ghsGrtNIgZ+9HyE/MXz3Vv3a+tutCrEN1rvIA/jbLtf pZM347n97M9wiKsBA5qrB30n+lvn4ROp9ak8ooHd0RqsUmffHhDjNGsDBV6q2OuH1BeB bytpWD0nPUzSnxDXVb8C/sdDUovHOGIfAPymIW92I1eI4ioCQgiYtOgsBl2Gy3SLgZEs IwkZwLUqgwfVtVAhTY+gcFpLSHiSqWXJDqp+FlDSH6I2iUMc3NPbfUFBKA79pmdCn4rj Jk7sPPnEb/z+Hty2/DWPwgZUnWC4Clx7W8RfDqx4RdzxiExeqcVOMhdHVEwNJS7dTxla MshQ== X-Forwarded-Encrypted: i=1; AHgh+RoxEjOjHCmSIfKrNl0/2YZN39MNl6J4vNlrdj94Uh223iLpigpF81MLu2688Sz0UTW5psuMkLo+ODjQBhU=@vger.kernel.org X-Gm-Message-State: AOJu0YymV6Y4pGLEF6TvQjvRmULJr6UXurNDE6Dsn8y+W78M6nIRK3X3 EVhW0IsGC79HiiCh2TY3agthlgLE95+Ur2yexTSWnXKG8F7pR3pVFgYwiY21bVfKQFj0IkHX/j/ NxGZgpWLL7Tpg9lCW9rc39eWqXGZiA/4vQZbShWCry1oc+aQmkP7OLFA5gOcpctChE2U= X-Gm-Gg: AfdE7cmAqzr1/QN240etSv/9PLhWE/CLrEOTmDaKsMeTAhBhhSzL+eCIL90TtCcGvxK X0M8hPLMdZtEuK9UyQLJXRNK1aL6+eey81GlVRMbYVIT2XFJL1Hi+EcliEr1E9paeD2TvQnyakP 9Ekc557fhBKi4K+RMVbbiVUMSDu/kem7EthJOixB5hi8WnVCLf8J/E79kGhF3bECrP4e4ESG5gg i32/KdUT6otNyucKpjDxy1uVpeYWUWFy2BwM2xh5tJxwFcs1wM0/Z4MwYc+S1gU7BgzTRNUha7y 5dDzx0AHGrWfbGSUj58htSNFVcQn+oDw8L2T2961NdJm1lYZfvh5HN4Ay+u4in0hx7c1x1jxFYn qAXQ6nMxAcsivbyrGhcjdzXq7z7wECoYe4UuD7BwlOkWSTIw= X-Received: by 2002:a17:90a:d643:b0:381:26f:8f05 with SMTP id 98e67ed59e1d1-38dc7822803mr11000091a91.3.1784040798428; Tue, 14 Jul 2026 07:53:18 -0700 (PDT) X-Received: by 2002:a17:90a:d643:b0:381:26f:8f05 with SMTP id 98e67ed59e1d1-38dc7822803mr11000072a91.3.1784040797943; Tue, 14 Jul 2026 07:53:17 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313cb804197sm31941773eec.13.2026.07.14.07.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2026 07:53:17 -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-arm-msm@vger.kernel.org, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Neil Armstrong Subject: [PATCH v5 3/3] ASoC: qcom: sc8280xp: enhance machine driver for board-specific config Date: Tue, 14 Jul 2026 20:22:50 +0530 Message-Id: <20260714145250.2473461-4-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260714145250.2473461-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260714145250.2473461-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-GUID: NXaLylqI84r7-82KeNBEcEZuunUjOoAf X-Proofpoint-ORIG-GUID: NXaLylqI84r7-82KeNBEcEZuunUjOoAf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE0MDE1NSBTYWx0ZWRfXwObqBvqSb1VA 0nuOB1ckfRfT1kgR9AmNFdt26CCxWU+dFdZrVhWWJxWtaVvKQKZdg9m77decZML3ZZ7OR3/bKGC 5rKCLKKMf9JAzz1cYHscq91E7AdeyNw463FcUiI+92H1l667qTMA4w08eTy/20kzvi82wJqp7Xe 8mrLUDoalEaKTnkmNKCw6D65Qj0Y8BJsifKv98fY0pANnIVVNCCM+rv+dXhgC4CZrb+MAaY0nLJ NllcGcVd7598ggYv8BK4K1bGwjszdDm1ijQv+Yy7cyDFYS24tkoMjqkGQUyF0D6Q/Te7wDgyArn +vu6vSDG5Y93EjiFrtR/ODjTECg+Xo1qTHMTJvZ/hUAwW1M0OeS81Y16gJX+KV9TTaNwUc4+S2l Lkkt5YSExiPVFegjrupETc2QvAyk742UCNonBsLI79bIgkwypASjvh7n8pRaz2fX1tQz8xL44HT MxSQwMGoAZOzqh7hxMA== X-Authority-Analysis: v=2.4 cv=F5hnsKhN c=1 sm=1 tr=0 ts=6a564d60 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=T-rPskIIbrx-efRHNJwA:9 a=rl5im9kqc5Lf4LNbBjHf:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE0MDE1NSBTYWx0ZWRfX25ze4FWP6rUc zbkgcoeSwrG5QvcV2RYb1GNcNhi41Q4aCPE/r6EcmWhVY2wTIRBw281zv8H/LcAb5l3Val8LQVI o8KctTWXBFJg01r5OgX/mStthzHybew= 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-14_03,2026-07-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 clxscore=1015 adultscore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607140155 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 | 251 +++++++++++++++++++++++++++++++++++--- 1 file changed, 231 insertions(+), 20 deletions(-) diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c index 98b15a527..109e39b93 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,131 @@ 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), +}; + +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