From nobody Thu Jun 25 10:20:10 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 C45EF31355D for ; Mon, 8 Jun 2026 02:30:39 +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=1780885841; cv=none; b=n5TF/wsPbiS7AB2u8TytECtmIRyELtXnnsms5uFWPr0QJhAactgkd2L1mvOElPcZpdR+EUY3d+uxmE38qKBdHk6IMZWrcCIMwGHixabhBWemzEue3cOIHGHzHEUzIuHn1NhFYmift97kTtdioAbJYKl2FJ8Ez4BHqduCbRAQXiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885841; c=relaxed/simple; bh=42VpR8ugAARHyI0wmOQZp/rBCGxgBSiRrJQELIHnh8s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VkL7izlF/noGSJt9jrnG5xKMOH2CwmZYuXrj9PPJh71JTASMgL3RYvFpVU7OzLdViD6CC7EpfcJIFmRlkciD+fde4v06+LQpmBQzGYssHmw7fJQb/gatj36TLYHwBKZ5AGmnVIRww9vhl7vIkRKQ5qWlO2c7Zw+Mb7cIVEWeckE= 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=eWBhz2m0; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=K5t8OE34; 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="eWBhz2m0"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="K5t8OE34" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6580HaQd1935496 for ; Mon, 8 Jun 2026 02:30:38 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=IKc5Obhm1v3 /KA4MaSQ32W6Hvld9D5qR9cN80qMH2Ak=; b=eWBhz2m0o4dB3nYeHqRL9JMfo3G /Wq8MjhNV0VpLkdkPjX1kI04Zrf0vL4n0OM0CqINRu6ka+nOQtzQ71uG59PvZg+1 +cZBtUkfxRllUzcKbxJCZhUwMq7OAWnGOVwAS+6ijcXhk8sHKgHGSNTgC3EjxZDY UfOliPtgSg34AYcWEOhBMs61iuWx5nP008FTBFFRKL6eVm5rqJaJ0YEOoqrZd1S/ xhflQXyx6kDrGIJiaRhqhG0uRCcdmWzkDspBNjS5bqRE3C7udDdzRQxdUme8a5WR hFhLZIeAT3ddHuamm2Sc4ev/r5dlOkG5obBM1JBBW0wNqLguGo+hlDYWujA== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4emavf5k67-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 08 Jun 2026 02:30:38 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2c0c20f7581so40901455ad.0 for ; Sun, 07 Jun 2026 19:30:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780885838; x=1781490638; 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; bh=IKc5Obhm1v3/KA4MaSQ32W6Hvld9D5qR9cN80qMH2Ak=; b=K5t8OE34B29tH9uCHbnM6suinHcCqyE8n62KSh70HJdEQiHBPyLa9vkn0C5finBn/r YB8C2n/w7doOzgmrIhDoZcDKcoIojfPdR2uEBstisNAupOsoG/XTTra6cNnw2xa763xR PD/arZWyZy4wfvwFRSpqVpkzOapY9JRsZi/bPJe2ChRl9nBMaz/I2RpNaGCOIqUHaO2F QRXlvlaLqQd4zNQp3IOXo1KcaM1SLKfNMYi/U2SO//YbMaT2m8bZzL5WB8kd63BNSxkq aXhT8u/rz19OmvuKdRngTL9Dw6dZ9t9MZUvvwlnDdd6//x8yagDNGbMS/7q/8ZmmE04b nwWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885838; x=1781490638; 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; bh=IKc5Obhm1v3/KA4MaSQ32W6Hvld9D5qR9cN80qMH2Ak=; b=PhxlhSUzlGAU1FDnlsSzggdPjTUoSuzan3C5KrdO/fnnBSoNNJejho+Tn4MUrRsJxK 8B9CtcI61C8PWIDlmbfu/IpsxuqXBzH/Atifo7H+88X4hvQwyn1MFfMbXZlicWBhu0s9 4DttWikHWYklic2ASgz9h1T6GynCuRsfnI5mUsX/mbgXiDyAu/4iJimvMFdoaAJiWI7s bd59INgSXWXNYFuCpysDeEytcyTBewtgk1z6ry01BhtH4y7IYgUSmcSLDLJfFrxd7jkL jg8fwcc7018E3nU+VMAqDbsSCQre7SVrzb0AHskod9t3tMmC7iHx59EcjA48RllhwoxR wXCg== X-Forwarded-Encrypted: i=1; AFNElJ8BihAP+NiM7HDfz4l2l95s3PK7NCQ8YnrQTzHnhANwkh44e7kyvgaARbygIuzeiNl/iFgNNIB95FR0rWQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6mVhALDQTI9dmshmbRKICLN4ezQO+WelOJDuv+3TivSiKPLyB qfP/Uv0hOebESs7Ko5QKO7aB+0fFoafLEfRWJchV2O4UiqqFOM2dXT23V573YOULybHSZfddBz4 lY5dGk1JzEfoSCLXdVqQUjoMuQXvsFS6Gkm+6q7FAgbTTE/AOOroEQWqBOudZLf5EaG0= X-Gm-Gg: Acq92OGL0M2io5F2mHfkV5f28RlK7k1eVt9EwQw/Q0/iqS7QEjxo80uErY9vXWl/6FF XCevsesEcSVMNVbzoA+Y3tf8DV1m//Z5vS3Om94iDi6hjEv5Ut3vkWB0yl95Vc57/MhiYY8TlkX hRAyl19fnVFCdPKJu9IoB6qOaTLn6JvkY+ZmDdtlwUy/mnla39BXv3XTzUNZ+xHU69Isk+IQF6J SWOEAwgJDVj4ueRuxoXHJt03g4YYPASZYSxwPfLNtUlsVpFUrV7Zj1UgkPENRtuAE4ApGSlOwJB 9PnXBNMmjGBLbgiw3YBEkTdzPX32gJkjNiqTZzLWvihz8wx/hCxFOMll/pM+39TTjaFm1ABDGkI ozIPP/2tWP6NnzDtXavGi92DepRrHE1PzaAyhOcBdosmZi7kK4lOGWQ3tgZem01yPoDpY X-Received: by 2002:a17:903:2348:b0:2c1:ee75:56bb with SMTP id d9443c01a7336-2c1ee755854mr149411715ad.20.1780885837670; Sun, 07 Jun 2026 19:30:37 -0700 (PDT) X-Received: by 2002:a17:903:2348:b0:2c1:ee75:56bb with SMTP id d9443c01a7336-2c1ee755854mr149411295ad.20.1780885837094; Sun, 07 Jun 2026 19:30:37 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c16609e0bbsm162343585ad.50.2026.06.07.19.30.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:30:36 -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 v2 1/3] ASoC: dt-bindings: qcom,q6apm-lpass-dais: Document DAI subnode Date: Mon, 8 Jun 2026 08:00:09 +0530 Message-Id: <20260608023011.942228-2-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260608023011.942228-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260608023011.942228-1-mohammad.rafi.shaik@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=I4JVgtgg c=1 sm=1 tr=0 ts=6a26294e cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=NrbrONOL4QpDeGKfLFoA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-ORIG-GUID: hZkLgAQLo5BbIREMq4J1LSlctISEIE4q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjA4MDAyMCBTYWx0ZWRfXwsc+i7lieskP GdS1O2fTIuCAfluLd6Jz8JqW5Dch3heduwT7Ixc24424uCOdq7bETcxTd+WgtZ0JHMewp39xFw9 j8vFXxBIqWfztpuen6miVGubwhppLKXgCa3sSsHyCOZpcpPr4oNvCFKooYrBIFpUIYgXbthoF7M yhtKFJUadXRw8vX2b8xQnVYomNjzX4xaWPZ3FAV7O7ZHr1vFIdyZ47ymR4KrAPEae9wR+oZFWJr OXWVSCOOqsBAfrurVIP5ErNKFdA1rnqDGOHEuNhOBqh+QwdVuXzAKLXLH+CncEoXxrwMAMU26UZ abBDDENRyQQu+/xzrUmKA+P8z3O0MnJkTOhSDH//PGDxKBQz6rlBQUdF+4m5FkgYRG4JnrLeJI1 EcE17m6Ocy6CHjK38LuUmtX8DulIontoBQ6tbTtBND0gIht6TZ9KmGUU4EVV3Th6Z4UfZJlPQQE IhaEg7mktAMEG87qt6A== X-Proofpoint-GUID: hZkLgAQLo5BbIREMq4J1LSlctISEIE4q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-08_01,2026-06-05_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2606080020 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 Reviewed-by: Krzysztof Kozlowski Tested-by: Neil Armstrong # on SM8650-HDK --- .../bindings/sound/qcom,q6apm-lpass-dais.yaml | 57 +++++++++++++++++++ 1 file changed, 57 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..4c4c73778 100644 --- a/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,q6apm-lpass-dais.yaml @@ -21,6 +21,48 @@ properties: '#sound-dai-cells': const: 1 =20 + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + +# Digital Audio Interfaces +patternProperties: + '^dai@[0-9]+$': + type: object + description: + Q6DSP Digital Audio Interfaces. + + properties: + reg: + maxItems: 1 + description: + Digital Audio Interface ID + + clocks: + minItems: 1 + items: + - description: MI2S master clock + - description: MI2S bit clock + - description: MI2S external bit clock + + clock-names: + minItems: 1 + items: + - const: mclk + - const: bclk + - const: eclk + + dependencies: + clocks: [ clock-names ] + clock-names: [ clocks ] + + required: + - reg + + additionalProperties: false + required: - compatible - '#sound-dai-cells' @@ -29,7 +71,22 @@ unevaluatedProperties: false =20 examples: - | + #include + dais { compatible =3D "qcom,q6apm-lpass-dais"; #sound-dai-cells =3D <1>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + dai@16 { + reg =3D ; + clocks =3D <&q6prmcc LPASS_CLK_ID_MCLK_1 + LPASS_CLK_ATTRIBUTE_COUPLE_NO>, + <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT + LPASS_CLK_ATTRIBUTE_COUPLE_NO>, + <&q6prmcc LPASS_CLK_ID_PRI_MI2S_EBIT + LPASS_CLK_ATTRIBUTE_COUPLE_NO>; + clock-names =3D "mclk", "bclk", "eclk"; + }; }; --=20 2.34.1 From nobody Thu Jun 25 10:20:10 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 BE3CC1E1E04 for ; Mon, 8 Jun 2026 02:30:43 +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=1780885845; cv=none; b=ZI+BNZHr+tIuoGcx1lHCwnWyRMa+IHCtbCuN57K9dweplRKPas/704ADd9kPQGhLYihCiCzgsL01W2PRG8z0KGFN+9uBD16rqDmJ0fpN45zcto5utUiBvoFQZ7yHIpg3uQxUAYqLC0JeALT4q7GkIqGqGXoTz2l3nVh5nQIY37k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885845; c=relaxed/simple; bh=BcXNi1JLPYozmk8/QHvCr0pZ/WjZCh4TPhBSo3DHPGY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IDecH2iJdpU9POeVYj/+Kg/3t+NZTaA4UHJWs/3YLwKfDfdw5/PUy5vEPWamoGT1pfGSQ8b6mZak9NZb9gF6P9BnjsTPuVtt7UlbCpTML1b7mcpcqkvqIxrn2DXRBdkFfaYb0OvRNKD7g5wbZzdVB5lWq7zIaLAU4hDmQsxkhiw= 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=CbFHUSvE; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=IxpF+E5b; 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="CbFHUSvE"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="IxpF+E5b" 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 6580F7YC1577836 for ; Mon, 8 Jun 2026 02:30:43 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=h8Jmd3NB1Lr fDBYuQ2+LtOcZPICs044bAIaMIRNUmTE=; b=CbFHUSvEdSRUcd9hBXDA/LjattO V1RADF6VSrEYCt4zSc7x3HdnfITXqK4mWrT2ZJBQK+kKbDsooUdZnxOzdLkyOq/v DuqF9TEdm/sO+hu+lG63sjAnbiOlQv+dySzg2XdzsL+TS2dYHKtjr6TvyYaEkp2M wn8wfKuiywjDH5tzQprtlV3W6630DHbYjKjLhvZ+p5UaPvSw6OsBM8zENIOsOOOy iO5X0U12UeLMTbJOtl4TukYwcRepUDnyx0bKvbz/1Hq3jCkyLGTmx5BoSCU7Ak6e v/sGlly4c1d1CrjTA1Z7zN8Q2zJN1uebOxhsXXu/pweqjV4HDXW5Ia66IZA== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4embs1da8f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 08 Jun 2026 02:30:42 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c8582b167f7so1933346a12.0 for ; Sun, 07 Jun 2026 19:30:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780885842; x=1781490642; 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; bh=h8Jmd3NB1LrfDBYuQ2+LtOcZPICs044bAIaMIRNUmTE=; b=IxpF+E5bCY2t4Ud8aUBUS9IpVUIgJs9ZN7DHYxlZEgY7lIVvlTGlV01DaHJIqosmHt +ln+9S7gKND2SAgv//DRDx6Qn7II6PUSxOMJlTr/SCJm+ktSFnUauLCF5f12tLLC7UvM mnyFBR9kEZOsWpLdjMTxgSJIlGky5Y3kSRP5XMNgNRmi/SSTNom2vH9wE/MCieX6X7DM e2qHcySobHknGb3qIG+9zCRkEkkYJUzcqxXOOYgGaTDhuIBDiTRZBhBOC/W0xQtdtpLJ GkmiJoBtorseZ83liAlMOwKKpsUj2Mmj3wlYoliF+FJ/Uh5vGTgvo1TrotWoQn7PkqK6 wvbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885842; x=1781490642; 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; bh=h8Jmd3NB1LrfDBYuQ2+LtOcZPICs044bAIaMIRNUmTE=; b=Fiebo3ijttaSw0Tju8PDqF9X1rJPySL4V4l0OGiDxWMuogwDQXLysdO5qSerOkkmEY OanROVDVSChnHtKLl2qQTb0RNIr3El1SJX3dKswfgp8qBh8C3AaTOWKBFjHz/0QYtr7B izKVB4eRcHiDeCHdGahdeEmXQHvePTphdypoRipi2SxxZM4BpDqfMiYw53VOKopz63mp ns/I0ORJA6jsTbsB+zj0EHr5COuP/qEX8r+/UPB41GfBRwBs9HfmVZjUnAWrDaLZMgvp YYWvHbEK0waGBI9D9iuoUl/UHv7GemJvx5vO2q26bLt8rQXtgm1nUqkfiZiZEPWd60qz CMNg== X-Forwarded-Encrypted: i=1; AFNElJ/vMTisAeM39okXequG8iJALYLLCuwwO6vrtHJPn/twC+RjFmHJsPH8fUTmPuigLm8HAi4rOzZ3N9u34P4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0OKWVoXm2DjESxywBz0YcntZ0gBVWVnZP6j3Ob5qRasXXrRAW g8OdYf1OCRUadhWE4G45AurHZrHSOOn8eY+SnAYzUz//GfcxPIW4aUOdeij9jadakFCPkm9MT1c O/Q2gQWceAZQ5nM73isS1QO5wUBW9K95RxmhcqCCBxOX7yhfQZo46DbHSO3zryB4mnbw= X-Gm-Gg: Acq92OFaCoeKfnjfEKsl1mUshaMdsuAi8vv4TPFLQe6yi+ghUcLvbwjQxPCSOs7ZBIx VMq9DkGi846oIxvNcoU5WxeeZsWIakX3TGygtg4UrnVInk59WDuU8zLnhNHDfYJVz3MW6csrVHy qjj8r4gxT42Xft7Fu1GmMcSG1s//oFmhMaA9bcAbRUr/h0j7cRTWIyNCu50khMolvvipkMII0sI hKAF858OPUL3NUJrvtktoqwJiuO+UMjV0WcdWRhLFc4pehUB6ohKcJAbj37v2kxixzZxUYFNH+x LonriPdp34T+TPbvWGJ+T1KLj2vrv+jKZ+KBPCxmz/omcsd7KY50TvOyATVFN63hRPFnGZN4Yrs FQgkeZTG9YgfkfujG33ssxymEIqKoTvJMPPMn/6C2r7zyyUeddvYOOEpJY21SN4lEN2Yq X-Received: by 2002:a05:6a21:685:b0:3aa:c964:3c27 with SMTP id adf61e73a8af0-3b4cd091965mr15956832637.46.1780885842172; Sun, 07 Jun 2026 19:30:42 -0700 (PDT) X-Received: by 2002:a05:6a21:685:b0:3aa:c964:3c27 with SMTP id adf61e73a8af0-3b4cd091965mr15956799637.46.1780885841714; Sun, 07 Jun 2026 19:30:41 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c16609e0bbsm162343585ad.50.2026.06.07.19.30.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:30:41 -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 v2 2/3] ASoC: qcom: q6apm-lpass-dais: Add MI2S clock control Date: Mon, 8 Jun 2026 08:00:10 +0530 Message-Id: <20260608023011.942228-3-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260608023011.942228-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260608023011.942228-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: AW1haW4tMjYwNjA4MDAyMCBTYWx0ZWRfX5A6s3S4Dur4i ryIQ74e3/eIPmEcprXh25S4tbRDNv+YhV+7A3EypFgWTtXnY4tGT5HNiAqYssG77wT2bawMAffL DysBg1WLqhJm4bXDfnobz1BvY5wx9yB8rOUp6uQEHP+pTR+DhR4T5xUzJm5Ue7CBOquuhZBNskM zfEtst4wBt3FSb9Jq8W+vdTQF21/6kZRr+mAsHF4ieGBWy4AdSVUztRDTbW3JXGXn+obQxl2H4S pu4rZe5iMbnhETOZ2xIKLfvDrS8R/ssQ4JBZ41AR+q4aZ7cXVuKVTqsZipHyFs4f1rtKfH+G9bC tInMCx8y1MNHe2dDEQBe0O4s/1NkQPJPrHNtm6wgWy5Llo7WqVysNI/MnjliYV0q6XXiEuEiG5P bngT8gtA2Q/ywJpJ8kLe++IsAmF3s552o9TyU+OX73ANRLg7oq4+JqHz36FZ8PMXJ3Ku8QtHVS5 TpOVtsxxZRZiC9L1gsw== X-Authority-Analysis: v=2.4 cv=CeY4Irrl c=1 sm=1 tr=0 ts=6a262953 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=A-h2Renr4JBikGDhi8kA:9 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: TuzsPZKL45h-vG9ntuMhgHwRcZvZhT-W X-Proofpoint-GUID: TuzsPZKL45h-vG9ntuMhgHwRcZvZhT-W X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-08_01,2026-06-05_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 adultscore=0 priorityscore=1501 spamscore=0 malwarescore=0 phishscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2606080020 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 Signed-off-by: Mohammad Rafi Shaik Tested-by: Neil Armstrong # on SM8650-HDK --- sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 137 +++++++++++++++++++++++- sound/soc/qcom/qdsp6/q6prm.h | 4 + 2 files changed, 139 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..143750afb 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,13 +17,22 @@ #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 int q6dma_set_channel_map(struct snd_soc_dai *dai, @@ -251,6 +262,70 @@ 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); + + if (dai_data->priv[dai->id].mclk_enabled) { + clk_disable_unprepare(dai_data->priv[dai->id].mclk); + dai_data->priv[dai->id].mclk_enabled =3D false; + } + + if (dai_data->priv[dai->id].bclk_enabled) { + clk_disable_unprepare(dai_data->priv[dai->id].bclk); + dai_data->priv[dai->id].bclk_enabled =3D false; + } + + if (dai_data->priv[dai->id].eclk_enabled) { + clk_disable_unprepare(dai_data->priv[dai->id].eclk); + dai_data->priv[dai->id].eclk_enabled =3D false; + } + q6apm_lpass_dai_shutdown(substream, dai); +} + +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; + bool *enabled; + 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: + break; + } + + if (sysclk) { + clk_set_rate(sysclk, freq); + 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 +347,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 +373,59 @@ 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) +{ + struct device_node *node; + int ret; + + for_each_child_of_node(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: + priv =3D &data->priv[id]; + priv->mclk =3D of_clk_get_by_name(node, "mclk"); + if (IS_ERR(priv->mclk)) { + if (PTR_ERR(priv->mclk) =3D=3D -EPROBE_DEFER) + return dev_err_probe(dev, PTR_ERR(priv->mclk), + "unable to get mi2s mclk\n"); + priv->mclk =3D NULL; + } + + priv->bclk =3D of_clk_get_by_name(node, "bclk"); + if (IS_ERR(priv->bclk)) { + if (PTR_ERR(priv->bclk) =3D=3D -EPROBE_DEFER) + return dev_err_probe(dev, PTR_ERR(priv->bclk), + "unable to get mi2s bclk\n"); + priv->bclk =3D NULL; + } + + priv->eclk =3D of_clk_get_by_name(node, "eclk"); + if (IS_ERR(priv->eclk)) { + if (PTR_ERR(priv->eclk) =3D=3D -EPROBE_DEFER) + return dev_err_probe(dev, PTR_ERR(priv->eclk), + "unable to get mi2s eclk\n"); + priv->eclk =3D NULL; + } + break; + default: + break; + } + } + + return 0; +} + static int q6apm_lpass_dai_dev_probe(struct platform_device *pdev) { struct q6dsp_audio_port_dai_driver_config cfg; @@ -304,12 +433,16 @@ static int q6apm_lpass_dai_dev_probe(struct platform_= device *pdev) struct snd_soc_dai_driver *dais; struct device *dev =3D &pdev->dev; int num_dais; + int ret; =20 dai_data =3D devm_kzalloc(dev, sizeof(*dai_data), GFP_KERNEL); if (!dai_data) return -ENOMEM; =20 dev_set_drvdata(dev, dai_data); + ret =3D of_q6apm_parse_dai_data(dev, dai_data); + if (ret) + return ret; =20 memset(&cfg, 0, sizeof(cfg)); cfg.q6i2s_ops =3D &q6i2s_ops; diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h index 6917e70bc..7b751486c 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 Thu Jun 25 10:20:10 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 6621930FC1F for ; Mon, 8 Jun 2026 02:30:48 +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=1780885850; cv=none; b=MJKtsH4+vCQZ4XlRavvJ9wQ0s005Itj02RjLCMe+75X2th2Z5BSyrTrHWF42U/orsOqYZwI1eZpSTSeSIA9TrFhLaHX00riONI6rAyBGdvMsTdMIbW1/KGSNORrajKbEdUQ93g/RJkZnS6DDViYeMMN854hZB+jvIPY6uLANOL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780885850; c=relaxed/simple; bh=3vjtgWyk+0FY/MA781oKU7RzNicZneABHruSOKal6t8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qAsZgY6knvxDHRgyKO5RHi/Wq7Kf24TrJGbhbdfdRy0jM0yeSmZTksMDur1MCRIUcKKsGKVy3UKBQosaT5fMlGcvyvevKfwp/qUbCYkQdTEM9qyzwJIX8DSjfJYOzOGvt0aSkvD8/BxSPLNjiH7EwWl6DFcNqSu25FiMjF4iKK8= 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=lbAHymGR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=PYzacINL; 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="lbAHymGR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="PYzacINL" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6580GZII1991562 for ; Mon, 8 Jun 2026 02:30:47 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=htKsrgkLF1e nw+JTU9KstIh2F7UBTHII9P/kE0A+9Rw=; b=lbAHymGRtQDUmXdxcicg7I1+dcs FXRD/Psgtb4/1h4u+QzWZcP8aRrdj1JBSHzdlplQQaOHW37lxCvHmqkHpnWaDZqT MpfbXXkUgZ6rP2U/nQm0RQScZZ7uzp9s1vPnMVa1upinl+ToIzwK1jE4SdcWwJ3p Katxam2K3d/8YTYhh7GXfupgDFKd0pnc/JPduOCDYlRU3bLCehZJWUlfc3HCgccw mDOqBsLXbiGEL14MHwVTARRF5uXNE6dUl5LdXDkCsztx1PmYXI8Xpj7bJbTA5EB7 1t+f0ZWsKYeGibasO8XzBH3TH9ByXccoXeAvQqiyleBNowW83bVWf4t05Rg== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4em9k3ntgx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 08 Jun 2026 02:30:47 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2c0bfcd629eso50192345ad.2 for ; Sun, 07 Jun 2026 19:30:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780885846; x=1781490646; 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; bh=htKsrgkLF1enw+JTU9KstIh2F7UBTHII9P/kE0A+9Rw=; b=PYzacINLJ/waDA9bZuvEdp2aBnzhbFlocAFpbmSAB9OpgmBk04IWDY+o4DMF5L7Wf1 rAlfcFGBhiMArFqNy2/S4QaItg6FSTWSkgkXYYmdnBIUwnrV82FwT7nsWdiW+jg7/hV7 JdUEIPOsHYsByig4d9TqujBqIb55OIpNd8Bm8Xtsvg+v5G1aPV1qoQ7J4wNlFLoKfD5t jIHbF/sY7dBxRyhnm74eV3Erpsc4YcbbtZlO3thvDcXzc53hGWvqVm3iGyAuChzSYBqw 1PTQ7HzZTzeoVcWCFAZNXl5IiMe+BS9O3vZcqw0bClx9xoEfImsV+zlLa3QHMSKBdAhT EwSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780885846; x=1781490646; 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; bh=htKsrgkLF1enw+JTU9KstIh2F7UBTHII9P/kE0A+9Rw=; b=sBmuQNhdIqMIOvmy20PVsKtiy9ifS4iJv8eb3fp3heTtKP2kGzUvVg9GXKxiQce6Yg 3ApWwAn0pEBXDSMZzkg7r0QaB56ATCu4KW+GPfFYIdmnXLeEvbpda3lh3+SwJHSQGELF RMwZa0O5Dz7h6qsyFy/v/WSeAo+FqYThCdWvD+6o7yC/H2prUr4nDiipg9w/FZ7p+fXl eFCnUyiUC0T2zNIkJmsPbY/AoeQXy9y79bmgrD0mNcbTu/6xWr4bAMV4zD7IoNpwSqKB RV/Bs/ktmOu5OxU38rYtRArv8AcsEImic5O4EjSFZvlFDu5Ij+sm30LxFjrCG+gPLtvF GNmw== X-Forwarded-Encrypted: i=1; AFNElJ8+0S2uAGie0ru+xUYNbER9KeclOq1CidAIkLAYs8vD821R7iw+xi2W8vir6BbIViVY9rJ52ueb4QRm9Xo=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+3OwGbYgXQ3Gmg6F1qdqZt4VDxxaFmIKOxT2sRtBkKJeg70a0 XbTY3AwtIwa4NDbb3z66OMDT8ZiB9Pkrm7qZKK5b8S7YCyIE1nslqkHQ3FBitJtRSw2tV3plz2K Bou9dfYdo7NIktMXSP95nIN/5C/DzvQkIAnPua96RXRbhGxtwwbPVr+TnaSfPbPhiXkrBo0Bu5I 8= X-Gm-Gg: Acq92OGZxLe8Gj6cHL9yDVriJJe+Orsk4m5Cu056QdeWWiopzlSTMlTw7jEpQQgoCcy wvIkCpXApU0bxTtv41gpRct9AgynbC0OnsIgRKbxfFS9CYdco5fuRgC4HIfc+tKDdpiq8f8kSvu 9+mRlXuiUZUr4d7ugtnOBepIl2abvjTPnh1cvLNEj2+puwcroxmgYReAPDBDXo68JN/sE4Dq9LM 7n524JoVQI5tsLT4a8/L45aE6Fwktiy/J5NsjnsbrDyrSJqyNTIrAAMQsjWJEhIV9yDSyt9X1YJ aKnEirniOhvySKXLx4FzxpCHzNgWH8FZ7CVD8vxPWNWxslTyxzYXzGIxAI88Q9vPiFnLrC4xzes 4k2Q2Ktl6iEXkFdzIbvStGXFtLiws2lgjYf3pvHur0oP2gomesyGmMynBgUhG3c5kWJKp X-Received: by 2002:a17:903:1a06:b0:2bf:379b:53d2 with SMTP id d9443c01a7336-2c1e7e866dcmr156806335ad.15.1780885846373; Sun, 07 Jun 2026 19:30:46 -0700 (PDT) X-Received: by 2002:a17:903:1a06:b0:2bf:379b:53d2 with SMTP id d9443c01a7336-2c1e7e866dcmr156805855ad.15.1780885845922; Sun, 07 Jun 2026 19:30:45 -0700 (PDT) Received: from hu-mohs-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c16609e0bbsm162343585ad.50.2026.06.07.19.30.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 19:30:45 -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 Subject: [PATCH v2 3/3] ASoC: qcom: sc8280xp: ASoC: qcom: sc8280xp: enhance machine driver for board-specific config Date: Mon, 8 Jun 2026 08:00:11 +0530 Message-Id: <20260608023011.942228-4-mohammad.rafi.shaik@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260608023011.942228-1-mohammad.rafi.shaik@oss.qualcomm.com> References: <20260608023011.942228-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: AW1haW4tMjYwNjA4MDAyMCBTYWx0ZWRfXx7jW1IWuF1M0 Qzc01j2gISPrGRQ9OySlKQPNZfyLyWmU6R+x1Z01nWI23SARdYgfyn4MNjo17HNmAqwWx0DYKYW +05zfau6pC5gzvFFBS8RdUqvE08oauIGq8TGc3gWto+4+RWL23f1dqwgEOWTX9fF7kPtXOtPHrh 1XJmGN5fLfFbg9RATsYJ6sNUA9iAJDhO0J2HvC9+71pBbQZ6QA6f9XgebP6bUm5S1BWnIKPJuob sRmhS9XALpA1aAbqe2Q0rPbeRbS8OwVEiY32Eksrgz7PVr1rKBvOGzBlQN2wR6Rru8z3Dpx46yz Fxus5pF5NhZuvAuwcxMwCQiaC+1W2LjZp4sckOC4wjv4v0XuzVsq/+JKYLN5Q/vGeoQPee7dCh5 3oWJLnpzbzJFPqFuCvT2RKsZ716SRVB4bzZbJ0xJf326UlO98xKTpJOdBrTMqhztrwJR+d5IRRh YYVZjcYLI3oJMxfnPKg== X-Proofpoint-ORIG-GUID: N0NduQOoXzeK525zEsL_fJoq3O-j21M8 X-Proofpoint-GUID: N0NduQOoXzeK525zEsL_fJoq3O-j21M8 X-Authority-Analysis: v=2.4 cv=TIB1jVla c=1 sm=1 tr=0 ts=6a262957 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=9H_U430U70S0im2cdw4A:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-08_01,2026-06-05_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 priorityscore=1501 bulkscore=0 malwarescore=0 suspectscore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2606080020 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. Signed-off-by: Mohammad Rafi Shaik Tested-by: Neil Armstrong # on SM8650-HDK --- sound/soc/qcom/sc8280xp.c | 213 ++++++++++++++++++++++++++++++++++---- 1 file changed, 195 insertions(+), 18 deletions(-) diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c index 7925aa3f6..1f3afc6d0 100644 --- a/sound/soc/qcom/sc8280xp.c +++ b/sound/soc/qcom/sc8280xp.c @@ -12,17 +12,77 @@ #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; +}; + 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]; + 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 SNDRV_PCM_RATE_11025: + case SNDRV_PCM_RATE_44100: + case SNDRV_PCM_RATE_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 +92,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: /* @@ -96,6 +152,47 @@ 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); + + 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); + + if (data->snd_soc_common_priv->codec_dai_fmt) + snd_soc_dai_set_fmt(codec_dai, + data->snd_soc_common_priv->codec_dai_fmt); + + if (data->snd_soc_common_priv->mi2s_mclk_enable) + snd_soc_dai_set_sysclk(cpu_dai, + LPAIF_MI2S_MCLK, mclk_freq, + SND_SOC_CLOCK_IN); + + if (data->snd_soc_common_priv->mi2s_bclk_enable) + snd_soc_dai_set_sysclk(cpu_dai, + LPAIF_MI2S_BCLK, bclk_freq, + SND_SOC_CLOCK_IN); + + if (data->snd_soc_common_priv->codec_sysclk_set) + snd_soc_dai_set_sysclk(cpu_dai, + 0, mclk_freq, + SND_SOC_CLOCK_IN); + 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 +214,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,37 +243,116 @@ 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 (struct snd_soc_common *)of_device_get_matc= h_data(dev); + if (!data->snd_soc_common_priv) + return -ENOMEM; + + 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 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), +}; + +static 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 struct snd_soc_common qcs615_priv_data =3D { + .driver_name =3D "qcs615", + .dapm_widgets =3D sc8280xp_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(sc8280xp_dapm_widgets), + .mi2s_mclk_enable =3D true, +}; + +static 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), +}; + +static 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), +}; + +static 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 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), +}; + +static 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), +}; + +static 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), +}; + +static 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), +}; + +static 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), +}; + static const struct of_device_id snd_sc8280xp_dt_match[] =3D { - {.compatible =3D "qcom,kaanapali-sndcard", "kaanapali"}, - {.compatible =3D "qcom,qcm6490-idp-sndcard", "qcm6490"}, - {.compatible =3D "qcom,qcs615-sndcard", "qcs615"}, - {.compatible =3D "qcom,qcs6490-rb3gen2-sndcard", "qcs6490"}, - {.compatible =3D "qcom,qcs8275-sndcard", "qcs8300"}, - {.compatible =3D "qcom,qcs9075-sndcard", "sa8775p"}, - {.compatible =3D "qcom,qcs9100-sndcard", "sa8775p"}, - {.compatible =3D "qcom,sc8280xp-sndcard", "sc8280xp"}, - {.compatible =3D "qcom,sm8450-sndcard", "sm8450"}, - {.compatible =3D "qcom,sm8550-sndcard", "sm8550"}, - {.compatible =3D "qcom,sm8650-sndcard", "sm8650"}, - {.compatible =3D "qcom,sm8750-sndcard", "sm8750"}, + {.compatible =3D "qcom,kaanapali-sndcard", .data =3D &kaanapali_priv_data= }, + {.compatible =3D "qcom,qcm6490-idp-sndcard", .data =3D &qcm6490_priv_data= }, + {.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