From nobody Fri Jul 24 20:48:44 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 819E844CAE0 for ; Fri, 24 Jul 2026 18:25:13 +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=1784917514; cv=none; b=TRuPlQiBOFqCmtP8aTWZBN3UpeksNOpUSvrlDJngNAA2irdnUGFQVucIPqlBDbFZ0z8/BSd/m75OzXHUBXdNJSgmcXUuNRMaBs0/RDxHgxJbxJuCmCU2Vzu3GcpT/VhTKkeHEWqbfYzoJl1RpCVLbVgHiIhuhs9nSDPsooAII8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784917514; c=relaxed/simple; bh=fplq4MhiYbjZ4gR4KmwJS2Gi90zzUaka3YGluovCwTg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=to39p3MsW5R+03Fy+/XzxGVdSeY2KfZGybWQMc35fFkx3dRMBwzMXTSLLATLOcfVH+8kQB0dROZrjnEb3ghJe/0pyCrxoJJlAJk8xYT3k6JnjtJrjM0n+pyRLXUt8Xv6KrBF3QIHM0eO48L4UrbxnFiCjx3G7JbMFq94CFPSHHY= 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=o4SdRi0H; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=X5lcuFEs; 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="o4SdRi0H"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="X5lcuFEs" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OGqT0A3793003 for ; Fri, 24 Jul 2026 18:25:12 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=2Boq2riYmih qWiWhhoyaoL47R0UXWhEOQX4/mmtxBxY=; b=o4SdRi0HVRtn1DQM9PQMXSDDD88 d1ybj0+92oxGebYkNGXjV93hqAYQVwUNlyTlKiA2kCuDftNDQzd1N1dafNxm2P2W DaCWhyErW0czdgxiWTNfF/fFpalP1NYGPXzh35RTWq7KtSL0dmcQyiQvAJBGTHLp 9yG5TSh7Ft5qOutp/uE2PxzHg3ixmLUSgugRKwmtIzTqo+w5HyEV7i7WJofonK91 e702KIKKnBktZUX0sK5Sm+mvcq+hasCLiey6Hyf0UGARsQnWAfjsJUBCmXxPzjkB iWjtrUShWJbdk0e2/HnRULWV2H1J0ebXBRU2qCqWGwgwuGDuQN1V5eqRUHA== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm8cf17wu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 18:25:12 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cb5ea36f969so768571a12.2 for ; Fri, 24 Jul 2026 11:25:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784917512; x=1785522312; 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=2Boq2riYmihqWiWhhoyaoL47R0UXWhEOQX4/mmtxBxY=; b=X5lcuFEsH6dVeaV6UAxOlUxIx5kPL8vJANpn1bCp1cdvAjihXarW/9IUC75dKOzy85 brtIdA6p//aqTyYaZRsZVxH5Qhlw/6DyseJJI+c8yepTGNe9kZW7tmMRPPKJV9ZWAQ2U 7RDFbV7/dTtjwF6OtaCMEkKnHoSIidJQM80xHXW+07Ac/XZXm7REPMboBN3gZjX72Ix2 RtwZnO5p8DY/jXb4kmYpP23EDKkMHrtbH/9L8pMqVo1mJA9EZG5ExG/cYX5aDpyVkVX8 A/Adob3YKjeoTKqKi5o/6w6qnYd9oggjMI3YqqQZYvvsKRwBQNtfvHr112o8f35lYsBe lKvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784917512; x=1785522312; 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=2Boq2riYmihqWiWhhoyaoL47R0UXWhEOQX4/mmtxBxY=; b=a4hcXeRkylBwwpfCskIUgr2NutcohWyfyfRzK6PEdXPJzW7yMzuni1P7c9+9bd755g ROt5zg93ZTFIlsZV/PBEpftyTB1jlHNP1t3iyQ28IJdUu3H1t23SWUBV3d5toryH0RBF j/pXJXX5gdSv1zQGjmV5gkzqRymCcIEW8fpD5DqN9tVc22wCM05qiHFLdWIo8i/tz93L 3bkv3tmqsmH2R0y8ua/7EiexqsbsnCd6jAS4vCC3Ut7SJohdAl42QFN4LPel4QhdZuTF xFpvnaS4NHl7VDz3ZI9G+2VFdalMnoppJtxziYVlU9R/m3gt5ZFjHvxDXbCwz9NwW0Lk 1UbA== X-Forwarded-Encrypted: i=1; AHgh+RpJn8rMHVy11TM0rGscL8FjTkx+Ugxj30Yodvt6RZMDeoa3vBETRo3f8g42YWEfjMEhBTNECEtBUkmpDb4=@vger.kernel.org X-Gm-Message-State: AOJu0YzwkzhYiiG+Qk4hL01AM0jCfOkbho0SdxO4ONlMdrpGPPTf2xbV PUH8JyK6t/BphaEYtrci7kjclmK+p1nCw1flvhwdhI0W7mWuYg6jZd1yAu/Gd9mKNCFfWRUmOa8 T+o4CeKM0Qo0ipa3eqFtK6q5uTusr+krQBdBahVmgzm7KSVJusvDrjdjW3rPH94+HyJo= X-Gm-Gg: AR+sD13d2gvsf3vbPJljuLGutmVbameoqNEH5qk+DCsu8ywJuXWTelF56wkE6XwfcMx KbfFAppGx50TFGOjStMFM7u1EIVYd5qPotGq1ssrRPKJbYGTR+G8Zg34oG62XrQg95sOZRg4cqL h9JnTGn7NqBMwzwyRea095wdXFDRw4y5hXeNGb5SDl7I0pLH/x9gdOdOApd1ru7QJQpZ2UAqsOo GUGVXmG35ThiiEg6CAd5LhfQgK00V2S+M8/avJayWUkeCq1OydmsNhCDW8TAF66EZbAlbfAVSLL QvkztGQjDZBR+IxX5SoB9dB3UvuqpdTuXPPFG/WvVBPhCmM1GbHYi0eXMQublliYQ2W9n6pXh/x u5hoGuhCXgtB6TGpa3uDoI0JCuHKTiE4ayERG X-Received: by 2002:a05:6a21:4613:b0:3b4:b216:2b26 with SMTP id adf61e73a8af0-3c44af76896mr9889585637.5.1784917511917; Fri, 24 Jul 2026 11:25:11 -0700 (PDT) X-Received: by 2002:a05:6a21:4613:b0:3b4:b216:2b26 with SMTP id adf61e73a8af0-3c44af76896mr9889571637.5.1784917511518; Fri, 24 Jul 2026 11:25:11 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-314bc5a67f3sm1669324eec.29.2026.07.24.11.25.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 11:25:11 -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 v7 1/3] ASoC: dt-bindings: qcom,q6apm-lpass-dais: Document DAI subnode Date: Fri, 24 Jul 2026 23:54:44 +0530 Message-Id: <20260724182446.1484894-2-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724182446.1484894-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260724182446.1484894-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: AW1haW4tMjYwNzI0MDE2NSBTYWx0ZWRfX17Yzqu/EABiM aXDAwRB1efrjFQaMeV+mWwwc8lVmCmHkYPfGDpOVVpm+zdB9x3xntU11V2mJCgSBKIF9c8EMb1e WR+J5b/9Qww4Qe3pWUbDM2F6vKyCUKM= X-Proofpoint-GUID: -M1duH4QFXRHw-rdBhrMFd09PAlqu_fO X-Proofpoint-ORIG-GUID: -M1duH4QFXRHw-rdBhrMFd09PAlqu_fO X-Authority-Analysis: v=2.4 cv=er/vCIpX c=1 sm=1 tr=0 ts=6a63ae08 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=3jZq6FF4vXrVA1D6PBYA:9 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDE2NSBTYWx0ZWRfX81JUgeMgT0ZC TQy3n6KkkJ4Fiyr/Lw0cLC1qtbB3OECjVsqyojf5Y1u8sLuDhDpCoNofRQLfXNulcmYZ89hJBq4 bKNgWiQYEzeLP6f69pzoJbORRIA8j0y/ch5hI/4C9opkW/yt0oDRn2Ve0qqM05+4dH0OGjh9NTb AJY+zsGbaFjv0uqZs36ZqKoBwsPBtSndrTcfRz++PT3f7ih4i6RZDcUhZPNAUHUXNJ/nwgSm6iL Lb4FleLCTCKN3Iymo9JcUuTCl4NeWCK1f3MLsMsd8KgtXrehraZKcVrBNGHwqaFa7VaICCfO+3p NyT//+R1g4Jo9exmWWmA0Cpi/BBIRNuEadazPDDpA6/5vBIGQRKjYiXKUzYoxsD9olp/3wKFMc3 bENaKHReO97AJKZIpp76cqsCmT0FusdEbf3fJe5Y/jpjrildSKbhucSKDlOao8VXQH2nAgrQocA 4so4Jd1R0kgwTK2/BHA== 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-24_04,2026-07-24_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 impostorscore=0 spamscore=0 clxscore=1015 bulkscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240165 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 | 50 +++++++++++++++++++ 1 file changed, 50 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..4878c424ef03 100644 --- a/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml @@ -21,6 +21,43 @@ 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 + + clock-names: + minItems: 1 + items: + - enum: [bclk, mclk] + - const: mclk + + dependencies: + clocks: [clock-names] + + required: + - reg + + additionalProperties: false + required: - compatible - '#sound-dai-cells' @@ -29,7 +66,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_PRI_MI2S_IBIT + LPASS_CLK_ATTRIBUTE_COUPLE_NO>, + <&q6prmcc LPASS_CLK_ID_MCLK_1 + LPASS_CLK_ATTRIBUTE_COUPLE_NO>; + clock-names =3D "bclk", "mclk"; + }; }; --=20 2.34.1 From nobody Fri Jul 24 20:48:44 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 7FE6D44E02C for ; Fri, 24 Jul 2026 18:25:18 +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=1784917520; cv=none; b=iJs3LYSXDekMPPNh6UKagalf4pVdTmAAtNYrHPO7w0j/Nd7NIAnKm9ZI96cGzf83X/tR8vZA+nYvtUjmSMVYmz51+ysB6WkehHtvNhY27eyhXWzUAgk7GJzFBk9gEo32CkOsb3TURuwZBzZEfNIVOTP3H9/1cz9/i6XWAgua9lA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784917520; c=relaxed/simple; bh=Msn43J0TrnGLj1kHOGx0r+3kSga//Mgw+RDvad5R80k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rFLUeZYGk73gBOXnYZhahYoSGsKhNKwcYjExAIuZbFFN+SVfQsJZTcmqm+LYg0jWATJt5SiMC7nIqWkydUXTaAl/lltJw+XVH5lnLKGCJSzW8UzDmu4QD3neNwaa1cBdvaJROgTiNxKlFWI+3ZluKXojm23YRc8J/Z+f0nYPeR4= 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=G+BCGYbn; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YUmG7o/5; 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="G+BCGYbn"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YUmG7o/5" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OGqbLt3537458 for ; Fri, 24 Jul 2026 18:25:17 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=FAMn0DIoJ0k GBfXrUsli8TdU0bnIzXlv7A+FI69h2X0=; b=G+BCGYbnYjBxvR3GPqjZso865YG hfy4EQSIZCpg2CeMT7Po6LiOl9YYR+9VfAw/96tqix0qA+L7muq4XUZ6IND0xAgZ lAPkyA90MG6//CogGFEPN3Grx1soEAbRPXjKwtmathXC5w95VlosBAr6WvNlPPMn L0w10/rbNYd3TAozBxfHyAw+r36RHDllApFY/B5/Ma9cPuSjplogeZPP8oaDzf8V i/lF3muy0Bi23sDlf8dhmCQL9ezZlObUoRsWeVHxUJaWZxLzl4SeEEjq4mUUwWou sPf2oOkKiwV1BozXLZCys1juXGulrwY4ElMPhOaEIAzYjw4fw31OF5tpAmg== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm8cgh70m-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 18:25:17 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cb711c88f2eso419738a12.2 for ; Fri, 24 Jul 2026 11:25:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784917517; x=1785522317; 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=FAMn0DIoJ0kGBfXrUsli8TdU0bnIzXlv7A+FI69h2X0=; b=YUmG7o/5op4f2tHkkiCljafgOR2ayjJx4JEs8zctabBbytK6ZRYGW5LjF/18BW0WuM 5tUYAmpgLADqlyLE9swaqbH6n6N1gQG64lBFtexQf2FLpJnPHC/u26RMDlIAw7CN1BaW 1woxoDqbpgfu2xk6viMtyV5B6n9bh9//7Es/i9DMYesB9fkkiUtlyxpyKmeLCRjdk+jX FNPCmsRXzFkF46lCY1/mu3jqBbP/O8QGZDMLgbaACv3ns6dKuZT8Dc3WYL/bhbFvp2la 7/DFQkLdUCL1X2fzwC8qWASpRV7CN1bYxeSHtFRRRFmAU7JZspymENk9hc/TIk+SxnTn IbpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784917517; x=1785522317; 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=FAMn0DIoJ0kGBfXrUsli8TdU0bnIzXlv7A+FI69h2X0=; b=njsbT0lau5S8Os3RVBuWyjubhmT6YuVhx/avBsmFx8w3BiGr+hwXQbzwXNsAchxI3M Njm5HOEmZoxdvEegRq/Vf80QQBQ1ebpY6s3KjvsdlkJVs5j24rkjZY8BOR39Fj6Z5icl Zhp4kUgqrSSYtsQcee0BXUMJdgKAuV6IHIdvVhHkfWiVoscU5jK5NtBXoxsCxjoUsJ5t MVe2fexhEzVm9gsy7L6+N22gVUmfRr+8g5//5alLHCCsMRNXmv+YvI1JiciZofu2p9ER 2Zm/oye3nI9CzyT0BWZwbH1olzFt06tTXbVm8kD7bGvyupdD1r8AhhRfLZTyDToAd2f/ 4aQQ== X-Forwarded-Encrypted: i=1; AHgh+RqXo1vd3nH1IOv6WEa7U7xqCVh1exW/RGJJmFcMFhHqqIzrp5qzbl/tsTrLTacIOvJSjY//cjjZTZB13QM=@vger.kernel.org X-Gm-Message-State: AOJu0YzxQOOUhH6v28p3+dy+N6+lzfEx+3+JOhAmT4gC8+Hni/oM/lsn dwEwGBKBTc6fai2Aact5knNUmfia/zR853ijv++LPhs3ySGYjh7J2dk+m4G1Xml5h5FdGX1uLIT XrNcAjcu4chwQNnVOtX2Bp1JXHylfmP+Zq1knsXyP84pSvku2RO0lS1oqkhd07BIkqTg= X-Gm-Gg: AR+sD13MWFj9/SxJiNMSHtxo3ERXJadXvMMOYRGGgVJ+QeeAR5Nt3x9H9sBtcWbbg2x SCZiqcQkjXZM6q9LKp2LrXughLJb+CW0kjNUSGA4e/v2feor8BlJIHhKwsGqPNNiJPomgNQAZbE t3gyPls3yY6lxAAEjiXrDQJvf8j2ZULnMCQD2LdUMTc3PKVxiAqy/YWkXLjIR+NoSaKzbVuSPcJ tLgddWPvGqA+v7T/j1wngZvPNQHJA9VWRXuShFQQCv0IUrDJI/NG4P7BtHZ74RaUmrWfzsq02dV Jn18oPOIPT4wOgtUmqjDWyrIiZce/HW0VJU0+O67f2KUO9oGR12WXPoxsjQNu/DMAdwt/VoTGRr qnak4UbqjqaYLjDD8i/Y7YNdMzm7JXAyos03l X-Received: by 2002:a05:6a21:a8d:b0:3c3:af85:85e7 with SMTP id adf61e73a8af0-3c44b078667mr8854232637.34.1784917516993; Fri, 24 Jul 2026 11:25:16 -0700 (PDT) X-Received: by 2002:a05:6a21:a8d:b0:3c3:af85:85e7 with SMTP id adf61e73a8af0-3c44b078667mr8854195637.34.1784917516555; Fri, 24 Jul 2026 11:25:16 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-314bc5a67f3sm1669324eec.29.2026.07.24.11.25.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 11:25:16 -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 v7 2/3] ASoC: qcom: q6apm-lpass-dais: Add MI2S clock control Date: Fri, 24 Jul 2026 23:54:45 +0530 Message-Id: <20260724182446.1484894-3-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724182446.1484894-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260724182446.1484894-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-Details-Enc: AW1haW4tMjYwNzI0MDE2NSBTYWx0ZWRfX7v72lBXZ1yy7 rVULjZRmukrgafttpDUEqTNaDqEFwluCU2mV5mpFzf5QgnSNBNP6pD7jN3oGH74MXJTim6Rg0qh xxnPIzlPtvMs76eekefy+03sIydbSc4LNojJcUhqG9QHXxcAeOWx7FAHQ0r4E0uel7HzB+BBbse Zaj8h9MVGnDACgI7z/C0kaE45WDi1lXaJmYpGGBnZxejX54XtFm4GZOkL4Yk7CKDPUpf5L6QX8u 6JzivZziNvks3ufpVIaBnvzvz3M3UTnLsNynqiW0OPNbZ8+eXmTRwCjrI/1JcBmdClFHeAhVLC0 PJ/wNoq5YQZ5PVY/Jz326aCw3xZgMTydTjpkbsoJwF2Mqr/afaY0DMClHBuNSk0zkxtj2HNV5Bm ZDhZGDF8YYQaf1/3AG/oE7qfCf3pmEVw+A+y4idZfyX4aaT97ANH3Oi98l5ShUxc3ru77wbkJzU KeXmfyPhznhfE8f3lDg== X-Proofpoint-GUID: U2Qgsk6wuHpzpHxTCzxamsC_m0wzhESX X-Proofpoint-ORIG-GUID: U2Qgsk6wuHpzpHxTCzxamsC_m0wzhESX X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDE2NSBTYWx0ZWRfXwp1AK8sOUGE0 q0jFK7lqR2n60XLhW3/S1zEMU16TD29d7hxyTEctAWaqs6NHX5DJ1gTR07VUs6UC9s1Zz7iyS7Z zkqornH7Q1F0UoG02nPR0jQ1KVKLRP8= X-Authority-Analysis: v=2.4 cv=P9sKQCAu c=1 sm=1 tr=0 ts=6a63ae0d cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=7K0g8EdguqLjfqVUVIwA:9 a=x9snwWr2DeNwDh03kgHS:22 a=cvBusfyB2V15izCimMoJ:22 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-24_04,2026-07-24_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 priorityscore=1501 phishscore=0 bulkscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240165 Content-Type: text/plain; charset="utf-8" Add support for MI2S clock control within q6apm-lpass DAIs, including handling of MCLK, BCLK 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 | 168 +++++++++++++++++++++++- sound/soc/qcom/qdsp6/q6prm.h | 3 + 2 files changed, 169 insertions(+), 2 deletions(-) diff --git a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c b/sound/soc/qcom/qdsp6= /q6apm-lpass-dais.c index 006b283484d9..e68e8b000e07 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,54 @@ #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; + bool mclk_enabled, bclk_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; + } +} + +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; + } + } +} + static int q6dma_set_channel_map(struct snd_soc_dai *dai, unsigned int tx_num, const unsigned int *tx_ch_mask, @@ -251,6 +292,62 @@ 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; + 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 +369,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 +395,64 @@ 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"); + } + } + 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 +460,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 a988a32086fe..bc5b9fa13283 100644 --- a/sound/soc/qcom/qdsp6/q6prm.h +++ b/sound/soc/qcom/qdsp6/q6prm.h @@ -3,6 +3,9 @@ #ifndef __Q6PRM_H__ #define __Q6PRM_H__ =20 +#define LPAIF_MI2S_MCLK 1 +#define LPAIF_MI2S_BCLK 2 + /* 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 Fri Jul 24 20:48:44 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 4A3CE3168E6 for ; Fri, 24 Jul 2026 18:25:24 +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=1784917527; cv=none; b=sknAh80gklDkJpBWj3QGlY3niqgygb3St+DuIQmDOR3p3zWMx11KdozrZtXhsCDpsjkSQcgSTqQOfZcvLafzskGAuY6NsQTWVf1cJwjt1FZsVFmjEoLkl6itWe4b8PVJSCNlOHSTP+qrPIE85ls2B2xpyfO9LKuJ4aMVnrPNxOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784917527; c=relaxed/simple; bh=e6ZGeB4iU4cHZ/bJJvHpXZM4Ynn8k79NdZJa3IR7dNk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=krMnCmrftTc6LjSL9w64s3MBsc3Jm4BorjwOeEoKDh6UrlnHQSQROP5w7K7ThNLapX++YdMWdPqPxlX/0J5wDZ15f7SXTTqxMXNDXr2jLDIjn9+w8JrD8wAK3uFsPKxYgseOFqlqDo6X6u5a9a0FzDqSrwW34k8rEb+u/fr9wGU= 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=kbo4sb/C; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=O4obcm4n; 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="kbo4sb/C"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="O4obcm4n" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OGqsD33820820 for ; Fri, 24 Jul 2026 18:25:23 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=MryDxrVPdee PlgqYirkPEnw1CIQSHHAkyIbBI8/yqKQ=; b=kbo4sb/CMt8jlnxyxMidY/iNYEl S7cf8BTcEhxgfjlu3RxRsWqPHTQCKbAYJpudlu5Nya7ThwSyOSZIGddAxShP5OJD rY0FknJaEYelb0pR9prw7phT7yVStpiC+2iaXcPEJ97CEh0qtuhkZiiEnawCbU0P 3byLF+BgfDrgd1gtwmoA5LBDU3163nw352ZnABrYUsO72arf0mrT6hmPNZRoqLI4 em+ivKqs51MiiVI7lzJhJQ3dCUtRu55ikaI02i7vhtHkOiDyW5kRi/MNYc972Hm5 s4/DWdNklTV/UJ1NCGQwLBsAUHbRFJAtVLh5IVYsFXFfRAm0XHlQsEetwtA== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm9pd0vrd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 18:25:22 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc88e22f92so15196435ad.1 for ; Fri, 24 Jul 2026 11:25:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784917522; x=1785522322; 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=MryDxrVPdeePlgqYirkPEnw1CIQSHHAkyIbBI8/yqKQ=; b=O4obcm4nldcDfXXQj28jmR7dmTcpLx5R+qYqIR6c5Ku0MDQcZs7m+sRqR9PB98ym/y tRVetuYSq4yuMoLauNRf39bRPJEdgaeOf7LrKg4rhMK+19C2BZG6R1hIOSod4VBp1Xnf DynfaUJcJsriBZMTly3ghmzV1twlmFwE1YjMHlC9Ds6wIDYqM+ayCD1psBj4Q9C2i9Bm tg0pVRu/Anabu1n6XrVuyPv7s1aS4keGd6S0Otx+HZaivV9KtIHHb5DpHmbijfGk+U+R 4fg4zHY8/C/FDH5+dg3Lumx5ry+mi3nWfHpYhkAnKHNuH0tOo9KSnd/4dLETmVPv/Fm/ gaHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784917522; x=1785522322; 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=MryDxrVPdeePlgqYirkPEnw1CIQSHHAkyIbBI8/yqKQ=; b=MHk7ZjC2m51chUPDO2r5zjF2mYfrUQSEvcj4uRfsSkaZ5wJl720Rr3weZEXmN8Y5f5 G8l5/UPWH9EazpcqrqfiZcjGc09KY608xec0o8BZxEggbI2MsKOPEQuxnaLdCWzpjdxI by1mhzg5Pd31X+HODUZ6MTxZMfMkTyCwAMhraOzICshcCJnbGxymNbQcjNVHM7mI1GGA sZ+1ApsSHBmCEG90+s50FsXVzr5tqaP770c6FiggKwQkawRsDbCCQmkU9dm3t78jsjdc GjFbJaiBHIN0Fie5xUnfb6M5PkNro7q8zWbwVreYmzXzVsehmNzdGOe+84qVB7WEJJMF +a7A== X-Forwarded-Encrypted: i=1; AHgh+Rq+Ms1RrwZcjLWAjyI0IdhJhpeQkXyqirMTctLS2KIfHMS2g4H73QGErLyx8SdomPsgV4SxO+nBbI8/8Tw=@vger.kernel.org X-Gm-Message-State: AOJu0YzRYhlRihDbzKOGczUZuaazjXEHQOuKkWceVQ42QyqogQhIH+lU 3ao/uOapcYaEuAeTnbboym6aZCmfb/ewXiIt8PgzUvB4IGjK9x8KFW/CGdHvzlLbgesyl2Expj+ CAoL03f+glN9MZeSq9RycLYJNhzJmS5FucQT6/awdBjqdaWpoim18QWcH6k+wq1Nl1qE= X-Gm-Gg: AR+sD11Iuij4H0g2V64PPl4rQr/OB2Pqq9qs/zCcrH5akg8oRiLPapvVvRIwU8Khz1m gMlNYQXaPRHPo+ONVPRT3q/dOktLvBhNOY7o3sJ21FWjJDzd0PLYMXBmVLjHlsmYJFeHltbPNvy 7dCSYB552GnVyM+cwNjesF0QWmQgqPHNIv01ee2tBIqFFQ8/FYg+3WoUcfmxjYX1tXJhrSuTmDP cNK/FjXmR98YzyhoAVJ5Bw/KWW4YLbpKpf4PXReFDUliNMus7gwXO6MOFVPwTFZGR78E7lPBC/z rkTkoiXDrDlqdaKyS7PCQO0cyiAgxrZt5Muk/2j/TlXAwF2cibllEw0n7le2Ok6bnm1AIybJ5uG e+5uwBkbQBwoudJ4rD9gza5yNWPoEPq2csz/j X-Received: by 2002:a05:6a21:689:b0:3c3:94a8:7c18 with SMTP id adf61e73a8af0-3c44b18d9e4mr8649637637.37.1784917521910; Fri, 24 Jul 2026 11:25:21 -0700 (PDT) X-Received: by 2002:a05:6a21:689:b0:3c3:94a8:7c18 with SMTP id adf61e73a8af0-3c44b18d9e4mr8649594637.37.1784917521340; Fri, 24 Jul 2026 11:25:21 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-314bc5a67f3sm1669324eec.29.2026.07.24.11.25.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 11:25:20 -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 v7 3/3] ASoC: qcom: sc8280xp: enhance machine driver for board-specific config Date: Fri, 24 Jul 2026 23:54:46 +0530 Message-Id: <20260724182446.1484894-4-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724182446.1484894-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260724182446.1484894-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: R8ZRDGMxIl-_w4wBaJCzw7j1UoAnbWyq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDE2NSBTYWx0ZWRfX2WaYJwYwL1UD 8Q07aClE19ill97jdfU+HMxHdHUTFNecT/9BoGu95yu8UkKZkvtxx9PEr5f0kWrWUgF0fax94a3 CacoYsw7kPLjP+7WSps5S7PFdQAWMFbFBLt2JogrPU7/2y9g2A5Yp42X1lO+BnebkRrcOsiTvNb SrEdWBDO3mcA3/hhMRh7bPXqlhNRGvlLqFh7f718e8spjLsMTxndN7HDqmOHGBjFPAM2SxcLm7X inZERX+ewo7ciLQB8+ju3UylSMqBO8wTLPNDE0QcuwLeW4qydU0WXTEA/1Wd2rFukzCnpKcsYrI 9ie5t2QVwCJZra4k4EzqMVHO3hkAinsSzmKA26l2j68mEwRhk1QK/8WYwaHgrzTfeEVLdw81LZA CMgiO905Apt9TAv2vbNNhsYRJ5UU7ZxCSOhm829JdHNsWXvU0mhOlf6MVbLfWf7L2oFJtpC7F7C tTyWANu7/2n+GM9SN7Q== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDE2NSBTYWx0ZWRfX6QwdOKqKeHeo 3k7KBkQSRPK7CfNIVf8GPlHKGqGT1KVA6ERFgXroFcz9TJ/lIu9ArdfV7JIXzX2rsHTrmeaCTgd 8V6Fv/CKGSeRvZ3c8h8bC9Ek+5B8meg= X-Authority-Analysis: v=2.4 cv=DLW/JSNb c=1 sm=1 tr=0 ts=6a63ae13 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=T-rPskIIbrx-efRHNJwA:9 a=GvdueXVYPmCkWapjIL-Q:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: R8ZRDGMxIl-_w4wBaJCzw7j1UoAnbWyq 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-24_04,2026-07-24_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 adultscore=0 phishscore=0 clxscore=1015 suspectscore=0 priorityscore=1501 bulkscore=0 spamscore=0 malwarescore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240165 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 integrate third-party audio codecs or use different external audio paths. These designs often require additional configuration such as explicit MI2S MCLK/BCLK 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 98b15a527e37..2ecba74d736e 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 -ENOTSUPP) + 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 -ENOTSUPP) + 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