From nobody Sat Jul 25 22:32:27 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 A94DC3AB293; Sun, 12 Jul 2026 13:41:38 +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=1783863700; cv=none; b=XdbLkEuETSDThVPdvGRgqgid9zagBCt6N8nKibauiIxnywteGSxQ+ZuejVS4+3uVmG5lHr2cQ38pViE1aRzMZ5GJ26Xv+dljH4cDE8rWcX5/uNgMCKOcY/4Wh/rl2FaOFfhZfh2t32ftac3MCpf10L+S+2mBQ1DAN/nV4e8sMUU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863700; c=relaxed/simple; bh=btH5Z6BTLtvpOPq2RMIVob604TcPR2CBB48N91K3fCQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=m147aXK2pLCgYcS8LxgztwrvuksaVd8CX8ptnZlVIbxaFvWcyiicsPIbHdoecfpksQQlXVVcRt+oDMGl+WIEU61ujAHZ/YIGFV7LU2fg2PMXHg5ZzX0/YRqhgUuewxssrDjwEtDTpwerpumU+ONO9aGoWsH91RRE1jHcXaH+C6o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=AIUfeETL; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="AIUfeETL" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66CDZSd32731259; Sun, 12 Jul 2026 13:41:18 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=+5PJeaKDgre Yj/QeWtVXAlIXcWIplJjnnEV2rCFQlj8=; b=AIUfeETLyBrsvy52fCAve0dqP3N rjswY+FjiE5iYvE+WKz3pyLrAYB65T/G7Ppzzt6+UlIqQ+1xB/tTqAppBKasLREi 9zYLZukZDcxyVcq9tchY4WuriNpf5yY7nHC9vETiIdIn15+ZdYlkqDC8z/ZvvWtY bxg1elpEe+i7lfaqRRgwZ0veq8+0johOCSIFk6QvTCo4tKasg5qQO11UvNpmOVJo o5S8BijWLEzuACRHRDsxWswUG8zR5Vear3s8Od420V8vOPeadC5DKmUoL7WBPx3U E6e/kwjAPYEtZnAlHpCd3SZVbsCPcUYovUT9vHBmLGFWhU2T8AMURp1L57w== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbebr2s8k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:17 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfD0c026840; Sun, 12 Jul 2026 13:41:13 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf7c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfDQ2026809; Sun, 12 Jul 2026 13:41:13 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfDbP026799 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 4540961D; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla Subject: [PATCH v4 1/7] ASoC: qcom: qdsp6: add topology-driven Audio IF support Date: Sun, 12 Jul 2026 19:11:04 +0530 Message-Id: <20260712134110.3306763-2-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX0fBHMj5yblOr KxZIpjMrLrk6+8laCrqZdBsLiaKqK1ZjN+MmIHM6OfC+kc/Ehja1qwN0+dTkOB2QKUJN3/hv8XC l76APSbjY+O8PjqVEMyf3lNR2xLYllM= X-Authority-Analysis: v=2.4 cv=OK8XGyaB c=1 sm=1 tr=0 ts=6a53997e cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=Chi9EtqzsJgtiY9FReMA:9 X-Proofpoint-GUID: LyxK-1I39IVzGjbYl1k9_5ZKmETZl3SN X-Proofpoint-ORIG-GUID: LyxK-1I39IVzGjbYl1k9_5ZKmETZl3SN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfXxToKjE4RJ8U7 x1WrRQ80fIm695pTYUkBL9fc8IupNsKaxQKPO/+gly/NU64s8TfFrcjF9bZqcazRBgWNcIeEkfO 2K9i/HJ6a9Zte6nmWD2LBesef2hn1p3IsicSG1sjoT3h82/9hSgpGghUA3lLE0dVoLreYF2wgQD 4YluP2dBFCEtLosb22izyqskFbS3Q13grqFAuDi/sbF6TJZc7eaTn83Z8gzKuVo9fo9VxyJPcdf aW/zXo/2AvSSQMywkZuX9UwSMlvEF31J5mFplKm9wgIen0g+dYnoCDxiWARo2JxUTOvqQrcvLdm zr+OxZ0LAf9Ist6FeFPRlI1KWFfkhBThmx/FS8yy2lFxHXWSAp+oSoftY9Pa/4RuGrRVJ6Cz9Yo A8V/VEg056FuG5n4XeB52kfd71aq9QudaTJLWKItcqqAPAfskEB8p7BMcPoBogn32n1NJaXFhNk 1W81n1AsTJvQJ8VALng== 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 phishscore=0 spamscore=0 adultscore=0 clxscore=1015 impostorscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add topology parsing and media-format programming for Audio IF source and sink modules. Add the Audio IF module IDs, the required topology tokens, and a dedicated topology loader that stores the parsed interface configuration in the AudioReach module state. Also add the Audio IF media-format path that sends the interface configuration, hardware endpoint media format, and frame-duration parameters for Audio IF modules. This keeps the serial-interface configuration topology-driven while still allowing the machine driver to provide runtime slot and media format settings. The same Audio IF path can then be reused for TDM, PCM, and I2S style backends. The new UAPI tokens (AR_TKN_U16_MODULE_SYNC_SRC=3D262 through AR_TKN_U8_MODULE_INV_EXT_BIT_CLK=3D276) are added, together with the value defines used by the sync source, sync mode, data delay, interface mode, bit clock type, and polarity tokens. MODULE_ID_AUDIO_IF_SINK (0x0700117C) and MODULE_ID_AUDIO_IF_SOURCE (0x0700117D) are introduced in this patch. This Module is validated on Hawi and Shikra platforms. Signed-off-by: Prasad Kumpatla --- include/uapi/sound/snd_ar_tokens.h | 89 ++++++++++++++++++++++++ sound/soc/qcom/qdsp6/audioreach.c | 97 ++++++++++++++++++++++++++ sound/soc/qcom/qdsp6/audioreach.h | 81 ++++++++++++++++++++++ sound/soc/qcom/qdsp6/topology.c | 105 +++++++++++++++++++++++++++++ 4 files changed, 372 insertions(+) diff --git a/include/uapi/sound/snd_ar_tokens.h b/include/uapi/sound/snd_ar= _tokens.h index 6b8102eaa..bda65311c 100644 --- a/include/uapi/sound/snd_ar_tokens.h +++ b/include/uapi/sound/snd_ar_tokens.h @@ -168,6 +168,58 @@ enum ar_event_types { * LOG_WAIT =3D 0, * LOG_IMMEDIATELY =3D 1 * + * %AR_TKN_U16_MODULE_SYNC_SRC: Frame sync source + * AR_AUDIO_IF_SYNC_SRC_EXTERNAL =3D 0, + * AR_AUDIO_IF_SYNC_SRC_INTERNAL =3D 1 + * + * %AR_TKN_U16_MODULE_CTRL_DATA_OUT_ENABLE: Enable data-out tri-state cont= rol + * AR_AUDIO_IF_CTRL_DATA_OE_DISABLE =3D 0, + * AR_AUDIO_IF_CTRL_DATA_OE_ENABLE =3D 1 + * + * %AR_TKN_U32_MODULE_SLOT_MASK: Active TDM slot bitmask + * + * %AR_TKN_U16_MODULE_NSLOTS_PER_FRAME: Number of slots per TDM frame + * + * %AR_TKN_U16_MODULE_SLOT_WIDTH: Slot width in bits (16 or 32) + * + * %AR_TKN_U16_MODULE_SYNC_MODE: Frame sync mode + * AR_AUDIO_IF_FRAME_SYNC_MODE_SHORT =3D 0, + * AR_AUDIO_IF_FRAME_SYNC_MODE_ONE_SLOT =3D 1, + * AR_AUDIO_IF_FRAME_SYNC_MODE_LONG =3D 2 + * + * %AR_TKN_U16_MODULE_CTRL_INVERT_SYNC_PULSE: Invert frame sync pulse pola= rity + * AR_AUDIO_IF_SYNC_NORMAL =3D 0, + * AR_AUDIO_IF_SYNC_INVERTED =3D 1 + * + * %AR_TKN_U16_MODULE_CTRL_SYNC_DATA_DELAY: Data delay relative to frame s= ync + * AR_AUDIO_IF_DATA_DELAY_NONE =3D 0, + * AR_AUDIO_IF_DATA_DELAY_1_CYCLE =3D 1, + * AR_AUDIO_IF_DATA_DELAY_2_CYCLE =3D 2 + * + * %AR_TKN_U16_MODULE_INTF_MODE: Audio IF interface mode + * AR_AUDIO_IF_INTF_MODE_TDM =3D 0, + * AR_AUDIO_IF_INTF_MODE_PCM =3D 1, + * AR_AUDIO_IF_INTF_MODE_I2S =3D 2 + * + * %AR_TKN_U16_MODULE_QAIF_TYPE: QAIF hardware port type index + * + * %AR_TKN_U32_MODULE_ACTIVE_LANE_MASK: Active lane bitmask for multi-lane + * + * %AR_TKN_U32_MODULE_FRAME_SYNC_RATE: Frame sync rate in Hz + * + * %AR_TKN_U16_MODULE_BIT_CLK_TYPE: Bit clock type + * AR_AUDIO_IF_BIT_CLK_INTERNAL =3D 0, + * AR_AUDIO_IF_BIT_CLK_EXTERNAL =3D 1, + * AR_AUDIO_IF_BIT_CLK_SKIP =3D 2 + * + * %AR_TKN_U8_MODULE_INV_INT_BIT_CLK: Invert internal bit clock + * AR_AUDIO_IF_CLK_NORMAL =3D 0, + * AR_AUDIO_IF_CLK_INVERTED =3D 1 + * + * %AR_TKN_U8_MODULE_INV_EXT_BIT_CLK: Invert external bit clock + * AR_AUDIO_IF_CLK_NORMAL =3D 0, + * AR_AUDIO_IF_CLK_INVERTED =3D 1 + * * %AR_TKN_DAI_INDEX: dai index * */ @@ -240,6 +292,43 @@ enum ar_event_types { #define AR_TKN_U32_MODULE_LOG_TAP_POINT_ID 260 #define AR_TKN_U32_MODULE_LOG_MODE 261 =20 +#define AR_TKN_U16_MODULE_SYNC_SRC 262 +#define AR_TKN_U16_MODULE_CTRL_DATA_OUT_ENABLE 263 +#define AR_TKN_U32_MODULE_SLOT_MASK 264 +#define AR_TKN_U16_MODULE_NSLOTS_PER_FRAME 265 +#define AR_TKN_U16_MODULE_SLOT_WIDTH 266 +#define AR_TKN_U16_MODULE_SYNC_MODE 267 +#define AR_TKN_U16_MODULE_CTRL_INVERT_SYNC_PULSE 268 +#define AR_TKN_U16_MODULE_CTRL_SYNC_DATA_DELAY 269 +#define AR_TKN_U16_MODULE_INTF_MODE 270 +#define AR_TKN_U16_MODULE_QAIF_TYPE 271 +#define AR_TKN_U32_MODULE_ACTIVE_LANE_MASK 272 +#define AR_TKN_U32_MODULE_FRAME_SYNC_RATE 273 +#define AR_TKN_U16_MODULE_BIT_CLK_TYPE 274 +#define AR_TKN_U8_MODULE_INV_INT_BIT_CLK 275 +#define AR_TKN_U8_MODULE_INV_EXT_BIT_CLK 276 + +#define AR_AUDIO_IF_SYNC_SRC_EXTERNAL 0 +#define AR_AUDIO_IF_SYNC_SRC_INTERNAL 1 +#define AR_AUDIO_IF_CTRL_DATA_OE_DISABLE 0 +#define AR_AUDIO_IF_CTRL_DATA_OE_ENABLE 1 +#define AR_AUDIO_IF_INTF_MODE_TDM 0 +#define AR_AUDIO_IF_INTF_MODE_PCM 1 +#define AR_AUDIO_IF_INTF_MODE_I2S 2 +#define AR_AUDIO_IF_FRAME_SYNC_MODE_SHORT 0 +#define AR_AUDIO_IF_FRAME_SYNC_MODE_ONE_SLOT 1 +#define AR_AUDIO_IF_FRAME_SYNC_MODE_LONG 2 +#define AR_AUDIO_IF_SYNC_NORMAL 0 +#define AR_AUDIO_IF_SYNC_INVERTED 1 +#define AR_AUDIO_IF_DATA_DELAY_NONE 0 +#define AR_AUDIO_IF_DATA_DELAY_1_CYCLE 1 +#define AR_AUDIO_IF_DATA_DELAY_2_CYCLE 2 +#define AR_AUDIO_IF_BIT_CLK_INTERNAL 0 +#define AR_AUDIO_IF_BIT_CLK_EXTERNAL 1 +#define AR_AUDIO_IF_BIT_CLK_SKIP 2 +#define AR_AUDIO_IF_CLK_NORMAL 0 +#define AR_AUDIO_IF_CLK_INVERTED 1 + #define SND_SOC_AR_TPLG_MODULE_CFG_TYPE 0x01001006 struct audioreach_module_priv_data { __le32 size; /* size in bytes of the array, including all elements */ diff --git a/sound/soc/qcom/qdsp6/audioreach.c b/sound/soc/qcom/qdsp6/audio= reach.c index e6e9eb2e8..62140ce8e 100644 --- a/sound/soc/qcom/qdsp6/audioreach.c +++ b/sound/soc/qcom/qdsp6/audioreach.c @@ -152,6 +152,13 @@ struct apm_i2s_module_intf_cfg { =20 #define APM_I2S_INTF_CFG_PSIZE ALIGN(sizeof(struct apm_i2s_module_intf_cfg= ), 8) =20 +struct apm_audio_if_module_intf_cfg { + struct apm_module_param_data param_data; + struct param_id_audio_if_intf_cfg cfg; +} __packed; + +#define APM_AUDIO_IF_INTF_CFG_PSIZE ALIGN(sizeof(struct apm_audio_if_modul= e_intf_cfg), 8) + struct apm_module_hw_ep_mf_cfg { struct apm_module_param_data param_data; struct param_id_hw_ep_mf mf; @@ -168,6 +175,13 @@ struct apm_module_frame_size_factor_cfg { =20 #define APM_FS_CFG_PSIZE ALIGN(sizeof(struct apm_module_frame_size_factor_= cfg), 8) =20 +struct apm_module_hw_ep_frame_duration_cfg { + struct apm_module_param_data param_data; + struct param_id_hw_ep_frame_duration frame_duration; +} __packed; + +#define APM_HW_EP_FRAME_DURATION_PSIZE ALIGN(sizeof(struct apm_module_hw_e= p_frame_duration_cfg), 8) + struct apm_module_hw_ep_power_mode_cfg { struct apm_module_param_data param_data; struct param_id_hw_ep_power_mode_cfg power_mode; @@ -1042,6 +1056,85 @@ static int audioreach_i2s_set_media_format(struct q6= apm_graph *graph, return q6apm_send_cmd_sync(graph->apm, pkt, 0); } =20 +static int audioreach_audio_if_set_media_format(struct q6apm_graph *graph, + const struct audioreach_module *module, + const struct audioreach_module_config *cfg) +{ + struct apm_module_hw_ep_frame_duration_cfg *fd_cfg; + struct apm_module_param_data *param_data; + struct apm_audio_if_module_intf_cfg *intf_cfg; + struct apm_module_hw_ep_mf_cfg *hw_cfg; + int ic_sz =3D APM_AUDIO_IF_INTF_CFG_PSIZE; + int ep_sz =3D APM_HW_EP_CFG_PSIZE; + int fd_sz =3D APM_HW_EP_FRAME_DURATION_PSIZE; + int size =3D ic_sz + ep_sz + fd_sz; + /* + * A zero machine override means use the topology default; zero is not + * a valid override for these TDM slot fields. + */ + u32 slot_mask =3D cfg->slot_mask ? cfg->slot_mask : module->slot_mask; + u16 nslots_per_frame =3D cfg->nslots_per_frame ? + (u16)cfg->nslots_per_frame : module->nslots_per_frame; + u16 slot_width =3D cfg->slot_width ? (u16)cfg->slot_width : module->slot_= width; + void *p; + + struct gpr_pkt *pkt __free(kfree) =3D audioreach_alloc_apm_cmd_pkt(size, = APM_CMD_SET_CFG, 0); + if (IS_ERR(pkt)) + return PTR_ERR(pkt); + + p =3D (void *)pkt + GPR_HDR_SIZE + APM_CMD_HDR_SIZE; + intf_cfg =3D p; + + param_data =3D &intf_cfg->param_data; + param_data->module_instance_id =3D module->instance_id; + param_data->error_code =3D 0; + param_data->param_id =3D PARAM_ID_AUDIO_IF_INTF_CFG; + param_data->param_size =3D ic_sz - APM_MODULE_PARAM_DATA_SIZE; + intf_cfg->cfg.qaif_type =3D module->qaif_type; + intf_cfg->cfg.intf_idx =3D (u16)module->hw_interface_idx; + intf_cfg->cfg.intf_mode =3D module->intf_mode; + intf_cfg->cfg.ctrl_data_out_enable =3D module->ctrl_data_out_enable; + intf_cfg->cfg.active_slot_mask =3D slot_mask; + intf_cfg->cfg.nslots_per_frame =3D nslots_per_frame; + intf_cfg->cfg.slot_width =3D slot_width; + intf_cfg->cfg.active_lane_mask =3D module->active_lane_mask; + intf_cfg->cfg.frame_sync_rate =3D module->frame_sync_rate; + intf_cfg->cfg.frame_sync_src =3D module->sync_src; + intf_cfg->cfg.frame_sync_mode =3D module->sync_mode; + intf_cfg->cfg.invert_frame_sync_pulse =3D module->ctrl_invert_sync_pulse; + intf_cfg->cfg.frame_sync_data_delay =3D module->ctrl_sync_data_delay; + intf_cfg->cfg.bit_clk_type =3D module->bit_clk_type; + intf_cfg->cfg.inv_int_bit_clk =3D module->inv_int_bit_clk; + intf_cfg->cfg.inv_ext_bit_clk =3D module->inv_ext_bit_clk; + + p +=3D ic_sz; + hw_cfg =3D p; + param_data =3D &hw_cfg->param_data; + param_data->module_instance_id =3D module->instance_id; + param_data->error_code =3D 0; + param_data->param_id =3D PARAM_ID_HW_EP_MF_CFG; + param_data->param_size =3D ep_sz - APM_MODULE_PARAM_DATA_SIZE; + + hw_cfg->mf.sample_rate =3D cfg->sample_rate; + hw_cfg->mf.bit_width =3D cfg->bit_width; + hw_cfg->mf.num_channels =3D cfg->num_channels; + hw_cfg->mf.data_format =3D module->data_format; + + p +=3D ep_sz; + fd_cfg =3D p; + param_data =3D &fd_cfg->param_data; + param_data->module_instance_id =3D module->instance_id; + param_data->error_code =3D 0; + param_data->param_id =3D PARAM_ID_HW_EP_FRAME_DURATION; + param_data->param_size =3D fd_sz - APM_MODULE_PARAM_DATA_SIZE; + fd_cfg->frame_duration.frame_duration_in_us =3D AUDIO_IF_FRAME_DURATION_U= S; + fd_cfg->frame_duration.allow_frame_duration_normalization =3D 1; + fd_cfg->frame_duration.min_normalized_frame_dur_us =3D 1; + fd_cfg->frame_duration.max_normalized_frame_dur_us =3D 100000; + + return q6apm_send_cmd_sync(graph->apm, pkt, 0); +} + static int audioreach_logging_set_media_format(struct q6apm_graph *graph, const struct audioreach_module *module) { @@ -1411,6 +1504,10 @@ int audioreach_set_media_format(struct q6apm_graph *= graph, if (!rc) rc =3D audioreach_module_enable(graph, module, true); break; + case MODULE_ID_AUDIO_IF_SOURCE: + case MODULE_ID_AUDIO_IF_SINK: + rc =3D audioreach_audio_if_set_media_format(graph, module, cfg); + break; =20 default: rc =3D 0; diff --git a/sound/soc/qcom/qdsp6/audioreach.h b/sound/soc/qcom/qdsp6/audio= reach.h index 62a2fd79b..d57ba4e6a 100644 --- a/sound/soc/qcom/qdsp6/audioreach.h +++ b/sound/soc/qcom/qdsp6/audioreach.h @@ -36,6 +36,8 @@ struct q6apm_graph; #define MODULE_ID_SPEAKER_PROTECTION 0x070010E2 #define MODULE_ID_SPEAKER_PROTECTION_VI 0x070010E3 #define MODULE_ID_OPUS_DEC 0x07001174 +#define MODULE_ID_AUDIO_IF_SINK 0x0700117C +#define MODULE_ID_AUDIO_IF_SOURCE 0x0700117D =20 #define APM_CMD_GET_SPF_STATE 0x01001021 #define APM_CMD_RSP_GET_SPF_STATE 0x02001007 @@ -544,6 +546,65 @@ struct param_id_i2s_intf_cfg { #define PORT_ID_I2S_OUPUT 1 #define I2S_STACK_SIZE 2048 =20 +#define PARAM_ID_AUDIO_IF_INTF_CFG 0x08001B11 + +#define AUDIO_IF_INTF_MODE_TDM AR_AUDIO_IF_INTF_MODE_TDM +#define AUDIO_IF_INTF_MODE_PCM AR_AUDIO_IF_INTF_MODE_PCM +#define AUDIO_IF_INTF_MODE_I2S AR_AUDIO_IF_INTF_MODE_I2S + +/* + * struct param_id_audio_if_intf_cfg - Audio interface configuration + * @qaif_type: Audio interface type (e.g. QAIF, QAIF_VA) + * @intf_idx: Interface instance index + * @intf_mode: Interface operating mode (TDM/PCM/I2S) + * @ctrl_data_out_enable: Enable sharing of data-out signal with other mas= ters + * @active_slot_mask: Bitmask indicating active slots + * @nslots_per_frame: Number of slots per audio frame + * @slot_width: Width of each slot in bits + * @active_lane_mask: Bitmask of active data lanes + * @frame_sync_rate: Frame sync rate in Hz + * @frame_sync_src: Frame sync source selection + * @frame_sync_mode: Frame sync mode configuration + * @invert_frame_sync_pulse: Invert frame sync polarity when set + * @frame_sync_data_delay: Data delay from frame sync in bit clocks + * @bit_clk_type: Bit clock type (internal / external) + * @inv_int_bit_clk: Invert internal bit clock when set + * @inv_ext_bit_clk: Invert external bit clock when set + * + * This structure defines configuration parameters for the Qualcomm + * Audio Interface (QAIF) block. It is used to program interface + * characteristics such as slot configuration, clocking and frame + * synchronization behaviour. + */ +struct param_id_audio_if_intf_cfg { + u16 qaif_type; + u16 intf_idx; + u16 intf_mode; + u16 ctrl_data_out_enable; + u32 active_slot_mask; + u16 nslots_per_frame; + u16 slot_width; + u32 active_lane_mask; + u32 frame_sync_rate; + u16 frame_sync_src; + u16 frame_sync_mode; + u16 invert_frame_sync_pulse; + u16 frame_sync_data_delay; + u16 bit_clk_type; + u8 inv_int_bit_clk; + u8 inv_ext_bit_clk; +} __packed; + +#define PARAM_ID_HW_EP_FRAME_DURATION 0x08001B2F +#define AUDIO_IF_FRAME_DURATION_US 1000 + +struct param_id_hw_ep_frame_duration { + u32 frame_duration_in_us; + u32 allow_frame_duration_normalization; + u32 min_normalized_frame_dur_us; + u32 max_normalized_frame_dur_us; +} __packed; + #define PARAM_ID_DISPLAY_PORT_INTF_CFG 0x08001154 =20 struct param_id_display_port_intf_cfg { @@ -877,6 +938,23 @@ struct audioreach_module { uint32_t data_format; uint32_t hw_interface_type; =20 + /* Audio IF module (TDM/PCM/I2S) */ + u32 slot_mask; + u32 active_lane_mask; + u32 frame_sync_rate; + u16 qaif_type; + u16 sync_src; + u16 ctrl_data_out_enable; + u16 nslots_per_frame; + u16 slot_width; + u16 intf_mode; + u16 sync_mode; + u16 ctrl_invert_sync_pulse; + u16 ctrl_sync_data_delay; + u16 bit_clk_type; + u8 inv_int_bit_clk; + u8 inv_ext_bit_clk; + /* PCM module specific */ uint32_t interleave_type; =20 @@ -907,6 +985,9 @@ struct audioreach_module_config { u32 channel_allocation; u32 sd_line_mask; int fmt; + u32 slot_mask; + u16 nslots_per_frame; + u16 slot_width; struct snd_codec codec; u8 channel_map[AR_PCM_MAX_NUM_CHANNEL]; }; diff --git a/sound/soc/qcom/qdsp6/topology.c b/sound/soc/qcom/qdsp6/topolog= y.c index 1f69fba6d..3dd0a5c29 100644 --- a/sound/soc/qcom/qdsp6/topology.c +++ b/sound/soc/qcom/qdsp6/topology.c @@ -753,6 +753,105 @@ static int audioreach_widget_i2s_module_load(struct a= udioreach_module *mod, return 0; } =20 +static int audioreach_widget_audio_if_module_load(struct audioreach_module= *mod, + const struct snd_soc_tplg_vendor_array *mod_array) +{ + const struct snd_soc_tplg_vendor_value_elem *mod_elem; + int tkn_count =3D 0; + u32 val; + + mod_elem =3D mod_array->value; + + while (tkn_count < le32_to_cpu(mod_array->num_elems)) { + val =3D le32_to_cpu(mod_elem->value); + switch (le32_to_cpu(mod_elem->token)) { + case AR_TKN_U32_MODULE_HW_IF_IDX: + if (val > U16_MAX) + return -EINVAL; + mod->hw_interface_idx =3D val; + break; + case AR_TKN_U32_MODULE_FMT_DATA: + mod->data_format =3D val; + break; + case AR_TKN_U16_MODULE_SYNC_SRC: + if (val > U16_MAX) + return -EINVAL; + mod->sync_src =3D (u16)val; + break; + case AR_TKN_U16_MODULE_CTRL_DATA_OUT_ENABLE: + if (val > U16_MAX) + return -EINVAL; + mod->ctrl_data_out_enable =3D (u16)val; + break; + case AR_TKN_U32_MODULE_SLOT_MASK: + mod->slot_mask =3D val; + break; + case AR_TKN_U16_MODULE_NSLOTS_PER_FRAME: + if (val > U16_MAX) + return -EINVAL; + mod->nslots_per_frame =3D (u16)val; + break; + case AR_TKN_U16_MODULE_SLOT_WIDTH: + if (val > U16_MAX) + return -EINVAL; + mod->slot_width =3D (u16)val; + break; + case AR_TKN_U16_MODULE_INTF_MODE: + if (val > U16_MAX) + return -EINVAL; + mod->intf_mode =3D (u16)val; + break; + case AR_TKN_U16_MODULE_SYNC_MODE: + if (val > U16_MAX) + return -EINVAL; + mod->sync_mode =3D (u16)val; + break; + case AR_TKN_U16_MODULE_CTRL_INVERT_SYNC_PULSE: + if (val > U16_MAX) + return -EINVAL; + mod->ctrl_invert_sync_pulse =3D (u16)val; + break; + case AR_TKN_U16_MODULE_CTRL_SYNC_DATA_DELAY: + if (val > U16_MAX) + return -EINVAL; + mod->ctrl_sync_data_delay =3D (u16)val; + break; + case AR_TKN_U16_MODULE_QAIF_TYPE: + if (val > U16_MAX) + return -EINVAL; + mod->qaif_type =3D (u16)val; + break; + case AR_TKN_U32_MODULE_ACTIVE_LANE_MASK: + mod->active_lane_mask =3D val; + break; + case AR_TKN_U32_MODULE_FRAME_SYNC_RATE: + mod->frame_sync_rate =3D val; + break; + case AR_TKN_U16_MODULE_BIT_CLK_TYPE: + if (val > U16_MAX) + return -EINVAL; + mod->bit_clk_type =3D (u16)val; + break; + case AR_TKN_U8_MODULE_INV_INT_BIT_CLK: + if (val > U8_MAX) + return -EINVAL; + mod->inv_int_bit_clk =3D (u8)val; + break; + case AR_TKN_U8_MODULE_INV_EXT_BIT_CLK: + if (val > U8_MAX) + return -EINVAL; + mod->inv_ext_bit_clk =3D (u8)val; + break; + default: + break; + } + tkn_count++; + mod_elem++; + } + + return 0; +} + static int audioreach_widget_dp_module_load(struct audioreach_module *mod, const struct snd_soc_tplg_vendor_array *mod_array) { @@ -806,6 +905,12 @@ static int audioreach_widget_load_buffer(struct snd_so= c_component *component, case MODULE_ID_I2S_SOURCE: audioreach_widget_i2s_module_load(mod, mod_array); break; + case MODULE_ID_AUDIO_IF_SINK: + case MODULE_ID_AUDIO_IF_SOURCE: + ret =3D audioreach_widget_audio_if_module_load(mod, mod_array); + if (ret) + return ret; + break; case MODULE_ID_DISPLAY_PORT_SINK: audioreach_widget_dp_module_load(mod, mod_array); break; --=20 2.34.1 From nobody Sat Jul 25 22:32:27 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 E2ED33AD50A; Sun, 12 Jul 2026 13:41:47 +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=1783863711; cv=none; b=aB1aMb32Ni0tmI0/YXMer8HKoMZ3cWyLu+U9kPPDunu3Z1iOrGGIUUO1psdQsaHF7P8DJAalDx0hyyWfrNET8CRlpOZ1DLyE4I+mfpM8YsHxW3fMCPww/+5mKTOO8HlbPNuhsUgLng5jvbcUYIGVWhMs55B2lW1VPB1hp86u++A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863711; c=relaxed/simple; bh=gpSrJ+49DntFq6cEInh5ND9FX6UlqacnyJz+8Uvofb8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OmcmE0XLcgtwkkFnYoRhkgp/wBK3ch4ntY5+iRA0JkSfkApMaNS3+Any1ivMwd0UHxbHvzeQTD66apS2KfVIDOX38QWWPfQ2ijnoiyYzHeOBXQoB42PqDO20fbDpKOATXQO+oZDOLSYnydQa3ouV6dOLFvNixGHWvP0pMS9oh/E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=FkLaasD0; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="FkLaasD0" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66CDZfYl2563886; Sun, 12 Jul 2026 13:41:18 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=iDKkLa5n7+6 OtAp72rvXccs0N0QYv7p5WrnBRRGdGJE=; b=FkLaasD0kc0RKtTTG05p5dpXW9s f8uU8vx1QfiKPNPtoSERdAeUcABBg11Q8DSH0ifC34BjChhhB9tpzxw5a9lvmnnd hwvZdTtrkQ9CRKH/3PIJP9IGkE6G9XND3Z6F4fqkWRtg7Qp0hQlp1C2xFp+TMpdE eRDuPSV6zh2gfa74DnwS9GRnmSt5JemetJr1v1/IX0DfMU7KKZj5MhqqIfNYXpt6 I5WDQj5CJ0h063lW8Fbq/hw3QiYVTGGBSiTQizRgFxnzR09/YghEKiqhxIGL6wlH VvvPQ4a4LJ9+zCyhaIgYOJtEncMdrWrH0DLHNEtpXQ4uMTj/10Hs4qGvttw== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbf482qkc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:18 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfD4X026833; Sun, 12 Jul 2026 13:41:13 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf77-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfDGn026807; Sun, 12 Jul 2026 13:41:13 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfD9e026802 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 4911063E; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla Subject: [PATCH v4 2/7] ASoC: qcom: q6apm-lpass-dais: add TDM DAI operations Date: Sun, 12 Jul 2026 19:11:05 +0530 Message-Id: <20260712134110.3306763-3-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX4DC52EVvN9q1 d1FcPdEDid0iySsMj55sv4eciYQCSROGw9o4r0BNZUPPFjp1/dmOkIWFS4s7QIIka9BLaXAcfRv tYFvhyHy2m+OVBfBV6KbD5uULPLt69w= X-Authority-Analysis: v=2.4 cv=OsJ/DS/t c=1 sm=1 tr=0 ts=6a53997e cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=ZMHsmkTgFhVY9WPaUOcA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX8SMNuRLMHZK6 Y8EydonLL5RYQoz7yUYd85Tsn1MDEHxHi5IejEo4HOnjoyF+52isgw5q5KUXw1PMzJ2PizGhJQF SUN1gOH5ynMZgZFuxbByH6mu8yde7pdB8mICTjcFy8FX8NFy1DTVEPopA8jZNs+G7RB7V6JVke+ CXkqT2E7ZWIrdeJtSAI9nCqnaOg/aqSdwnxGro86zpC6elKzlkeRF6tVIuPLbdJqqMliY2bNysO JJ09A5BcfScRrD26Y0Y8YzdXxwT13IebCnFVPwVFQzh5cxFG0rgE+omWez8l36E6ZinlSsQKkOo 18xLpvug67CFqXjNXW8MjDX9g0vePhkeKz6smdcU8tSwgYEmVWsmFGPBIOzibOAhwRq5fopNASL p5kbiwczxWz//AqnhG6/Io56kjYsF+JUrOnWA2rH/krovutXzi+0qnRgq2fIkFAMeHQyt5oqNXu v+T6ZpQHjHax3pT+1+A== X-Proofpoint-GUID: JKoiYuF3VSfKm_UCeyiiKKBxnS8l65gF X-Proofpoint-ORIG-GUID: JKoiYuF3VSfKm_UCeyiiKKBxnS8l65gF 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 clxscore=1015 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add TDM DAI operations to q6apm-lpass-dais so AudioReach TDM backends can be configured through the normal ASoC hw_params and DAI setup flow. The TDM set_tdm_slot() callback validates the supported slot width and slot count, stores the active slot mask in the AudioReach module configuration, and leaves existing DMA, I2S and HDMI paths unchanged. Reuse the existing LPASS child-clock handling for TDM nodes as well as MI2S nodes, since TDM backends also request optional backend clocks through the machine driver set_sysclk() path. Signed-off-by: Prasad Kumpatla --- sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c b/sound/soc/qcom/qdsp6= /q6apm-lpass-dais.c index 5743586ff..672189625 100644 --- a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c +++ b/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c @@ -372,6 +372,50 @@ static int q6i2s_set_fmt(struct snd_soc_dai *dai, unsi= gned int fmt) return 0; } =20 +static int q6tdm_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mas= k, + unsigned int rx_mask, int slots, int slot_width) +{ + struct q6apm_lpass_dai_data *dai_data =3D dev_get_drvdata(dai->dev); + struct audioreach_module_config *cfg =3D &dai_data->module_config[dai->id= ]; + unsigned int cap_mask; + + if (slot_width !=3D 16 && slot_width !=3D 32) { + dev_err(dai->dev, "%s: invalid slot_width %d\n", __func__, slot_width); + return -EINVAL; + } + + switch (slots) { + case 2: + cap_mask =3D 0x03; + break; + case 4: + cap_mask =3D 0x0f; + break; + case 8: + cap_mask =3D 0xff; + break; + case 16: + cap_mask =3D 0xffff; + break; + default: + dev_err(dai->dev, "%s: invalid slots %d\n", __func__, slots); + return -EINVAL; + } + + switch (dai->id) { + case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7: + cfg->nslots_per_frame =3D slots; + cfg->slot_width =3D slot_width; + cfg->slot_mask =3D ((dai->id & 0x1) ? tx_mask : rx_mask) & cap_mask; + break; + default: + dev_err(dai->dev, "%s: invalid dai id 0x%x\n", __func__, dai->id); + return -EINVAL; + } + + return 0; +} + static const struct snd_soc_dai_ops q6dma_ops =3D { .prepare =3D q6apm_lpass_dai_prepare, .startup =3D q6apm_lpass_dai_startup, @@ -401,6 +445,17 @@ static const struct snd_soc_dai_ops q6hdmi_ops =3D { .trigger =3D q6apm_lpass_dai_trigger, }; =20 +static const struct snd_soc_dai_ops q6tdm_ops =3D { + .prepare =3D q6apm_lpass_dai_prepare, + .startup =3D q6apm_lpass_dai_startup, + .shutdown =3D q6i2s_lpass_dai_shutdown, + .set_tdm_slot =3D q6tdm_set_tdm_slot, + .hw_params =3D q6dma_hw_params, + .set_fmt =3D q6i2s_set_fmt, + .set_sysclk =3D q6i2s_set_sysclk, + .trigger =3D q6apm_lpass_dai_trigger, +}; + static const struct snd_soc_component_driver q6apm_lpass_dai_component =3D= { .name =3D "q6apm-be-dai-component", .of_xlate_dai_name =3D q6dsp_audio_ports_of_xlate_dai_name, @@ -429,6 +484,7 @@ static int of_q6apm_parse_dai_data(struct device *dev, case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX: case QUINARY_MI2S_RX ... QUINARY_MI2S_TX: case SENARY_MI2S_RX ... SENARY_MI2S_TX: + case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7: priv =3D &data->priv[id]; priv->mclk =3D of_clk_get_by_name(node, "mclk"); if (IS_ERR(priv->mclk)) { @@ -490,6 +546,7 @@ static int q6apm_lpass_dai_dev_probe(struct platform_de= vice *pdev) cfg.q6i2s_ops =3D &q6i2s_ops; cfg.q6dma_ops =3D &q6dma_ops; cfg.q6hdmi_ops =3D &q6hdmi_ops; + cfg.q6tdm_ops =3D &q6tdm_ops; dais =3D q6dsp_audio_ports_set_config(dev, &cfg, &num_dais); =20 ret =3D devm_snd_soc_register_component(dev, &q6apm_lpass_dai_component, = dais, num_dais); --=20 2.34.1 From nobody Sat Jul 25 22:32:27 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 4DDB63A4F5B; Sun, 12 Jul 2026 13:41:38 +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=1783863699; cv=none; b=UZpmoCtwh7eLczI2EJrRtKM/bGHcaOV1CLSAMRnbcEtRn/w4Mbi7kn2amwKlaW+Emdg/znb1mP1xrfoJCIafYb4vIzeDiBUa68rHWY9eok7stjamODlLf9FgCBGax8lz62Cu4HclRkUCNNMkA+BI17Q4lwZFe2HelE5BBkdCvR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863699; c=relaxed/simple; bh=i/aLhILHarIsWdtVRO/80QlFRlvp3gJQWU4vgOb9Phk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CRRhwpK2wPeUTEyULHO4GmBO1RVaShdBIiqONNpGWhzMh+XVIHYBPhpU1WskYVognVCb/7ML3fdAEoKitgUv5SruHbio1IWkKOTSl5yr+gf15Fx6xK+JZzGLby5E2l62Gv02OTVzS6gOGkrFuP88iwoXsRKepIC3JpBFGNQoDvc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=KdwuGz4e; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="KdwuGz4e" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66CDZihe2489946; Sun, 12 Jul 2026 13:41:18 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=3AgzqjWjU1l hyu0Oxj8ZA9LZrgwgCHD/SL9XbhePANo=; b=KdwuGz4eiwULqSruvOu2qCafBaS TkmF6MjBzqbPavrEXawvHNtP888TfTylO5VcWvGeKH35j68YNGy2HwfgucRtUrmy q/Pk0wEigX81hSSqYfYtmsl4yKPV9eYIqokvfAyYxqkGV5Ufmxq6bLJe4mm/g5Pk 2HdWqDRpIaC5sBfd/3rV2ICb2IFYzCSifQR3mjQ2vN0GIAyesQC1V4w2N2wq4L+i Mq63HVxDrHXcRbCkQtLjxHvrJyW27a971Y+iAdFPlgLbDjrnPbARqOp1kBBdJHXa h8J5rf2rc6adTVRPTmwIoNSFJOcuMYfmHVlfsTJadpBamjJh9Qx42IaSZjw== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbf0gjs6a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:17 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfDn0026838; Sun, 12 Jul 2026 13:41:13 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf78-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfDcH026808; Sun, 12 Jul 2026 13:41:13 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfDZ4026803 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 4D7A263F; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla , Krzysztof Kozlowski Subject: [PATCH v4 3/7] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: add Audio IF clocks Date: Sun, 12 Jul 2026 19:11:06 +0530 Message-Id: <20260712134110.3306763-4-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Authority-Analysis: v=2.4 cv=Nq3htcdJ c=1 sm=1 tr=0 ts=6a53997d cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=Z2x2jAe23Y4aVj-ete4A:9 X-Proofpoint-ORIG-GUID: KbHgAF_oPqnucf38HvvFKRFj2iZxwMkc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX21C53wVrYE0x 7Vj8U1wIqkiR1OI6e0Vtlxm9GtnEutBCsiQG233UZCFu7Y4oxsaY5g/d2SQnxd7c+vsjv32dTCz X9/T4EB8DiXrF1SnHJtmclNjSd/36Uw2nRKMaJugIAcICh/v2V9LDGhqV9fQeFOhj30XcWtfZJP 1NWTdo8YiVgI1xH4/x6IrLV9RXCna5DDxcqEZq6nBUrsurBUvwDQLAkyRp3qMp4D6fIdzkfIk6b J9Tapsc2lGL0FKmOaAuQuK7YfCkE0mUjJ5zSmS4XoLTqnr6ZIs5j80j3jil9ZemkJwHSG9H7gzd gBzpir5TBNKX7tfZ83IgYdonJOsfB4uMXLATyoUjS8V0Lmq8D2a4Q3q8Er28qwrfnLQCK+LyJhE XCfpTF70eTi1CgASF8diZhgeQwHC6SF/wFp+1PnwyvAJwuCvyoyTkQT/YMDuGfJX5JNEH0cS4jh 82ufYqxddDidnceVk2A== X-Proofpoint-GUID: KbHgAF_oPqnucf38HvvFKRFj2iZxwMkc X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX/NjIvBzasSOZ LlbnouBGBLAvCLSBYbAerLiulfRiB5+lNdSKjAk2l2pVoAwTMkm3Svx5Ia3gBUDLeQHbKXCdoYZ +xGEkbIQ1tfxrfP1YZej2J1r039OR9Y= 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add the LPASS Audio IF clock IDs used by newer backend interfaces. Platforms using Audio IF module backends request the interface bit clocks through q6prm. Add the Audio IF IBIT and EBIT IDs to the binding header so these clocks can be referenced from device trees. Acked-by: Krzysztof Kozlowski Signed-off-by: Prasad Kumpatla Reviewed-by: Srinivas Kandagatla --- .../sound/qcom,q6dsp-lpass-ports.h | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h b/include/d= t-bindings/sound/qcom,q6dsp-lpass-ports.h index 45850f2d4..a3aea029c 100644 --- a/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h +++ b/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h @@ -233,6 +233,35 @@ /* Clock ID for RX CORE MCLK2 2X MCLK */ #define LPASS_CLK_ID_RX_CORE_MCLK2_2X_MCLK 70 =20 +#define LPASS_CLK_ID_INTF0_IBIT 71 +#define LPASS_CLK_ID_INTF0_EBIT 72 +#define LPASS_CLK_ID_INTF1_IBIT 73 +#define LPASS_CLK_ID_INTF1_EBIT 74 +#define LPASS_CLK_ID_INTF2_IBIT 75 +#define LPASS_CLK_ID_INTF2_EBIT 76 +#define LPASS_CLK_ID_INTF3_IBIT 77 +#define LPASS_CLK_ID_INTF3_EBIT 78 +#define LPASS_CLK_ID_INTF4_IBIT 79 +#define LPASS_CLK_ID_INTF4_EBIT 80 +#define LPASS_CLK_ID_INTF5_IBIT 81 +#define LPASS_CLK_ID_INTF5_EBIT 82 +#define LPASS_CLK_ID_INTF6_IBIT 83 +#define LPASS_CLK_ID_INTF6_EBIT 84 +#define LPASS_CLK_ID_INTF7_IBIT 85 +#define LPASS_CLK_ID_INTF7_EBIT 86 +#define LPASS_CLK_ID_INTF8_IBIT 87 +#define LPASS_CLK_ID_INTF8_EBIT 88 +#define LPASS_CLK_ID_INTF9_IBIT 89 +#define LPASS_CLK_ID_INTF9_EBIT 90 +#define LPASS_CLK_ID_INTF10_IBIT 91 +#define LPASS_CLK_ID_INTF10_EBIT 92 +#define LPASS_CLK_ID_INTF11_IBIT 93 +#define LPASS_CLK_ID_INTF11_EBIT 94 +#define LPASS_CLK_ID_INTF12_IBIT 95 +#define LPASS_CLK_ID_INTF12_EBIT 96 +#define LPASS_CLK_ID_VA_INTF0_IBIT 97 +#define LPASS_CLK_ID_VA_INTF0_EBIT 98 + #define LPASS_HW_AVTIMER_VOTE 101 #define LPASS_HW_MACRO_VOTE 102 #define LPASS_HW_DCODEC_VOTE 103 --=20 2.34.1 From nobody Sat Jul 25 22:32:27 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 06CD53ACEF2; Sun, 12 Jul 2026 13:41:38 +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=1783863700; cv=none; b=SPCyZG+PCaUSefR+U4rrdn702QbUC68GnyN5AKClPbV0bpzv04/KITXBbxt6d/Aq5hkcgqLcpedO7perO4W38gAe9yQwuc41vvScZMtx4MZ9lN8Lk/FnuuMPYQUT+ikvT1BfC48uK7VXh1WiBAF5QmUUwU4j4YnSpNXHioYBYZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863700; c=relaxed/simple; bh=QpBY+y0b0HJjwBLCrnPAaOkn3k+z4+2hw11P851wttU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hE2+hbe9Q9NjpCs8KNPcE6jMqDZtTjvTiKp/khI+B6ftqSI/lQ3Zjl+Jn1VMWkn6/k4VfwnhL3V2rvbyWvfMuWX7bpUWyqpIZ0RVMYrdFKFlLwE2z6Tfp7HJ5AtYdqqE9LNT29m+gfCv3uMcP/deTmEi2cgffPXxYFDh0UJj13k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=eqxk+vEY; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="eqxk+vEY" 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 66CDZjra2749530; Sun, 12 Jul 2026 13:41:18 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=rFFLEIDy89j AwffX1xzL+8ZbklcG+tzawzSU0LwgtQ0=; b=eqxk+vEYUADg+2ENMhEkdsuM3cW UG0bN1HSK7VUauNf8JWxtaIWqHAJ2jAHnjaltgIrfAV6G84+VI9XuIfx2jr7t88c /945mrhd+Ti9wZlcGwukWvWMER+88WY18A2RMaT7He5l5vAk1P4m+zGMPslK/5ya oFbsn1wxuk/DowzqZvjX8sm3yk4NaKcBGaR5+Ot8bJUBm7euHAboReHQlKrx5ndE 6pCEAM9SVavKA11PfP+DTjP2frNsdps5wF9VcfRZ9JNeNpeLGs+efeBE+DSkpegu ZauwUhbdgLh286nSDZDbLUWsYYGpgedQsuSdp0uHnyOZ0r0wBbALFZBfDUg== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbe8vatfx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:17 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfD0b026840; Sun, 12 Jul 2026 13:41:13 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf7a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfDBc026810; Sun, 12 Jul 2026 13:41:13 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfDnd026801 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:13 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 51E30640; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla Subject: [PATCH v4 4/7] ASoC: qcom: qdsp6: q6prm: add Audio IF clock IDs Date: Sun, 12 Jul 2026 19:11:07 +0530 Message-Id: <20260712134110.3306763-5-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-ORIG-GUID: NNIx_pdWLXoEoE9sOJrqP3HPjG-uJOzS X-Proofpoint-GUID: NNIx_pdWLXoEoE9sOJrqP3HPjG-uJOzS X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX5zp5qkoqaa0h /bxm/tKWIwPZod+WGb2vXcHRmkNPkz56JZcGBmiVmaCMLDdqo+T+fVMiQ5GHtuVHafFJxx1PHuM 01J4B/V3SsvkvLgvjM7YM2s07W/P6c4= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX7p7Lg9R8y1lV sB+q/3SkX6sm8I7Qc9UPIPN8aKHhABthFLD5zky7EuqolWuytErNjVYNGtc+OX5raHfpz4+kWEi oZbsd/izsZ2vefvTy4vlXg3sN+Rb+/S7g3D/1ip8d61+OcV3BbLhN78pFOvQeFuxV5jEx4AK1dI UUcPbYFyTGy+c3llmtP7YTfle4wgCB47RdcEOuyW2O34GMn35/IKClVRmCWQoF7KhSdXHIWJFDC LfFzFrCNrWtaPPXpxCAUBOFVNfQ9ZDPwPWAp3Qapi8IGrw+bpri8JzA+HjLb75zo6JCmIZYP4kH ANFdP91r2UOs4t5UXaazm8xMU8BUg/3rzEdToL5YGnBbucEtQaLNl/EXD1xa3LeatvA2AFbRiov OaD6b1RNa0A9ROWiVC2mnHSSrtPQpXiVgoWzoe5rJkq4UV8dxN0HVRTL8w4yzxaWJ6lpj0wX9h7 w9c3sk3DADgyCvbkVEw== X-Authority-Analysis: v=2.4 cv=WONPmHsR c=1 sm=1 tr=0 ts=6a53997e cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=CMnRxhekojnJuyglMZYA:9 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 phishscore=0 clxscore=1015 malwarescore=0 bulkscore=0 priorityscore=1501 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add the q6prm clock table entries and internal DSP clock IDs for LPASS Audio IF backend clocks. The public binding IDs map to q6prm DSP clock IDs starting at 0x500 for Audio IF0 IBIT/EBIT. Add the internal definitions and register all Audio IF IBIT and EBIT clocks so machine drivers can request them through the APM clock controller. Signed-off-by: Prasad Kumpatla Reviewed-by: Srinivas Kandagatla --- sound/soc/qcom/qdsp6/q6prm-clocks.c | 28 ++++++++++++++++++++++++++++ sound/soc/qcom/qdsp6/q6prm.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/sound/soc/qcom/qdsp6/q6prm-clocks.c b/sound/soc/qcom/qdsp6/q6p= rm-clocks.c index 4c574b48a..38354ca8b 100644 --- a/sound/soc/qcom/qdsp6/q6prm-clocks.c +++ b/sound/soc/qcom/qdsp6/q6prm-clocks.c @@ -59,6 +59,34 @@ static const struct q6dsp_clk_init q6prm_clks[] =3D { Q6PRM_CLK(LPASS_CLK_ID_WSA2_CORE_TX_MCLK), Q6PRM_CLK(LPASS_CLK_ID_WSA2_CORE_TX_2X_MCLK), Q6PRM_CLK(LPASS_CLK_ID_RX_CORE_MCLK2_2X_MCLK), + Q6PRM_CLK(LPASS_CLK_ID_INTF0_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF0_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF1_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF1_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF2_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF2_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF3_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF3_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF4_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF4_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF5_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF5_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF6_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF6_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF7_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF7_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF8_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF8_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF9_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF9_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF10_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF10_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF11_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF11_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF12_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_INTF12_EBIT), + Q6PRM_CLK(LPASS_CLK_ID_VA_INTF0_IBIT), + Q6PRM_CLK(LPASS_CLK_ID_VA_INTF0_EBIT), Q6DSP_VOTE_CLK(LPASS_HW_MACRO_VOTE, Q6PRM_HW_CORE_ID_LPASS, "LPASS_HW_MACRO"), Q6DSP_VOTE_CLK(LPASS_HW_DCODEC_VOTE, Q6PRM_HW_CORE_ID_DCODEC, diff --git a/sound/soc/qcom/qdsp6/q6prm.h b/sound/soc/qcom/qdsp6/q6prm.h index bbbe6d368..1593f6bd4 100644 --- a/sound/soc/qcom/qdsp6/q6prm.h +++ b/sound/soc/qcom/qdsp6/q6prm.h @@ -87,6 +87,35 @@ /* Clock ID for RX CORE MCLK2 2X MCLK */ #define Q6PRM_LPASS_CLK_ID_RX_CORE_MCLK2_2X_MCLK 0x318 =20 +#define Q6PRM_LPASS_CLK_ID_INTF0_IBIT 0x500 +#define Q6PRM_LPASS_CLK_ID_INTF0_EBIT 0x501 +#define Q6PRM_LPASS_CLK_ID_INTF1_IBIT 0x502 +#define Q6PRM_LPASS_CLK_ID_INTF1_EBIT 0x503 +#define Q6PRM_LPASS_CLK_ID_INTF2_IBIT 0x504 +#define Q6PRM_LPASS_CLK_ID_INTF2_EBIT 0x505 +#define Q6PRM_LPASS_CLK_ID_INTF3_IBIT 0x506 +#define Q6PRM_LPASS_CLK_ID_INTF3_EBIT 0x507 +#define Q6PRM_LPASS_CLK_ID_INTF4_IBIT 0x508 +#define Q6PRM_LPASS_CLK_ID_INTF4_EBIT 0x509 +#define Q6PRM_LPASS_CLK_ID_INTF5_IBIT 0x50A +#define Q6PRM_LPASS_CLK_ID_INTF5_EBIT 0x50B +#define Q6PRM_LPASS_CLK_ID_INTF6_IBIT 0x50C +#define Q6PRM_LPASS_CLK_ID_INTF6_EBIT 0x50D +#define Q6PRM_LPASS_CLK_ID_INTF7_IBIT 0x50E +#define Q6PRM_LPASS_CLK_ID_INTF7_EBIT 0x50F +#define Q6PRM_LPASS_CLK_ID_INTF8_IBIT 0x510 +#define Q6PRM_LPASS_CLK_ID_INTF8_EBIT 0x511 +#define Q6PRM_LPASS_CLK_ID_INTF9_IBIT 0x512 +#define Q6PRM_LPASS_CLK_ID_INTF9_EBIT 0x513 +#define Q6PRM_LPASS_CLK_ID_INTF10_IBIT 0x514 +#define Q6PRM_LPASS_CLK_ID_INTF10_EBIT 0x515 +#define Q6PRM_LPASS_CLK_ID_INTF11_IBIT 0x516 +#define Q6PRM_LPASS_CLK_ID_INTF11_EBIT 0x517 +#define Q6PRM_LPASS_CLK_ID_INTF12_IBIT 0x518 +#define Q6PRM_LPASS_CLK_ID_INTF12_EBIT 0x519 +#define Q6PRM_LPASS_CLK_ID_VA_INTF0_IBIT 0x550 +#define Q6PRM_LPASS_CLK_ID_VA_INTF0_EBIT 0x551 + #define Q6PRM_LPASS_CLK_SRC_INTERNAL 1 #define Q6PRM_LPASS_CLK_ROOT_DEFAULT 0 #define Q6PRM_HW_CORE_ID_LPASS 1 --=20 2.34.1 From nobody Sat Jul 25 22:32:27 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 49E113AFB12; Sun, 12 Jul 2026 13:41:42 +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=1783863709; cv=none; b=cO7/0yQntyox2o8GTrsIikYTMDa9A+YMzZW/h/aj+21aQ8TNwooncJIWUZ8s3h8tiIFWshyjj2Bih1S+lJ3cBEAsFtmXsoSi29ha3NfZYvdAgyhjnRPY09n8R0lF/k6T/0kqaTVl0YA/oe1T390BwrnFWgPPhxh4Lkp7zbMQ99g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863709; c=relaxed/simple; bh=9YcqKDMtOkMk2/jgBVSKrXKHVXz9lKXFnzWkvgP70Lw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TgxHitg5n/1RamnNxd52trvmh7uBjVsqH/y54+8UsecebvSL3IOMMGmfIDAWUDVNKesAAzw+iEQIJdJczzTaG3zMy1A3dvjXsbIpK6HQMSmU5jcVrETBZe5CGAzg4DamW8QKrpxNcGX2YnHwC5z4MzR6MXd7/+x7vn3+JBv+jYA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=SgHEGYWG; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="SgHEGYWG" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66CDa1bM2490556; Sun, 12 Jul 2026 13:41:18 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=HLZr4A0rfGN W53uUCmKYTEBEV+TAatjKV4uMYtAZWj0=; b=SgHEGYWGmC82Y6kVu0FaEbtFh2U 8sS81u6/CURWtYie5b9j6kgVI3u1NhHiqQPXijrhzFpebsEmjYMlEXY/hDbiibNg DCD3Pz5V/sadSjba4aPtbSItHLCw8kGp87ePiqxPs5TBvL0n2xZAVkNbj8mlvK/9 fZjzq5lhqbPT4aP9UGVGcypzPnAVFguNQ4WuZEgqFqmnh+jRmCwGVYxFWRKbGShJ PMkMIhM2OOuWkVjq6Xm+6ammwY8Hboue0x687T+p0gprJ7fg4n4DumNc00zcp/iO /jB4oCKHlOf/WTO7xabM3l/QqX1u+6weF4wOwQUkm+ehE5ZRFCUmXFEWQ4Q== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbf0gjs6c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:18 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfFQ3026901; Sun, 12 Jul 2026 13:41:15 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf82-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:14 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfENW026885; Sun, 12 Jul 2026 13:41:14 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfEbl026874 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:14 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 56201641; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla Subject: [PATCH v4 5/7] Asoc: dt-bindings: qcom,sm8250: Add TDM slot properties Date: Sun, 12 Jul 2026 19:11:08 +0530 Message-Id: <20260712134110.3306763-6-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Authority-Analysis: v=2.4 cv=Nq3htcdJ c=1 sm=1 tr=0 ts=6a53997e cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=Rfk8f6ugPP8LbJp4NhwA:9 X-Proofpoint-ORIG-GUID: R5l_HL7aSKkBg_YYLN48n3oJTzPNzbDM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX0OMLelMY81uN IXODVgnBWNFYye6MLRvfISm2phWoIBH0lYezo7XEO1O0BC96gqtyjdDiSU/klDnBEiec85S4pgh hDnGAqwgsBR0KWOWLsavwrGl0AXs8YUXkmi7TqEdQlRn9tp0EQQABEXG4ZERXKwLnn90+w/RcSo dNaKFxbrtpsIPYaxAgwahhh1yPBtLzn6brFjHKIc/t5wjiPbLaZQMCVF9j0kBKHwstAQkqr5Ss6 fVP7d59vPilKkNepHVnIc4remEvjxxZ9+aHUM2rQ9VGwETJoP8JJ5BqKfiuoAZGrMj/9fiLH5Tr +rGUGul5PhX9xyqnMG4lPZqb50pTKmDnOlpG6f/Mgrg9mgxJaXKvlFIFkhcUMdomd9ib5fcB/1H QFuTW9BDg98YRAhiXa293ICAw8lZayURuFSoL9GPS0Mb9yzqp2q1NM21K/ONNOu4hnOXcBws2WN 3I8FuX9YiTs3JxXR8Sw== X-Proofpoint-GUID: R5l_HL7aSKkBg_YYLN48n3oJTzPNzbDM X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX82HWoLiQdyUs Xlc1qC7l6VzwwhBmU6tHj75Ti0pKb20gEE3FezkOAsIjKp6kqoR9hzejB/ocdOdVwCB+UM9RE5b 67uT3RUbdtC2svTof3/ibsy17cpcpGM= 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add standard TDM slot properties in CPU and codec endpoint nodes. Some audio backends operate in TDM mode and require the slot configuration to be described in Devicetree. The common TDM binding defines dai-tdm-slot-num, dai-tdm-slot-width, dai-tdm-slot-tx-mask and dai-tdm-slot-rx-mask for this purpose. Permit these standard properties in endpoint nodes so TDM-capable links can describe their slot configuration using the common binding. Signed-off-by: Prasad Kumpatla Reviewed-by: Krzysztof Kozlowski --- .../devicetree/bindings/sound/qcom,sm8250.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml b/Doc= umentation/devicetree/bindings/sound/qcom,sm8250.yaml index dae440eca..28cf9289a 100644 --- a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml @@ -85,12 +85,20 @@ patternProperties: cpu: description: Holds subnode which indicates cpu dai. type: object + $ref: tdm-slot.yaml# + additionalProperties: false =20 properties: sound-dai: maxItems: 1 =20 + dai-tdm-slot-num: true + dai-tdm-slot-width: true + + patternProperties: + '^dai-tdm-slot-[rt]x-mask$': true + platform: description: Holds subnode which indicates platform dai. type: object @@ -103,6 +111,8 @@ patternProperties: codec: description: Holds subnode which indicates codec dai. type: object + $ref: tdm-slot.yaml# + additionalProperties: false =20 properties: @@ -110,6 +120,12 @@ patternProperties: minItems: 1 maxItems: 8 =20 + dai-tdm-slot-num: true + dai-tdm-slot-width: true + + patternProperties: + '^dai-tdm-slot-[rt]x-mask$': true + required: - link-name - cpu --=20 2.34.1 From nobody Sat Jul 25 22:32:27 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 474B43AFCE5; Sun, 12 Jul 2026 13:41:40 +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=1783863702; cv=none; b=pP2A39kRQd5cHgCHGIDHg2uvAF/JSJyoURfYXIojP/slbzp7N7Ek6jHpqj+GWNmaRWabZpHik2iUPKoIF7ozDcIQXFVJXYCPdTs5y/ufbMJHDkub+ia5pFjcSEC9wyOCUjyr8BCI9eMX4UPMGl80EQg8KESMvZZ+PYpOWHMWp20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863702; c=relaxed/simple; bh=+A9kndqttoYHGEqgZAw0wNBCAuiAWMiF0HYejYCyznw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mtkntTPHqpvyidrs98ZAPfFqFylP/MX7wev9LUOctTm/LwgRkPRyfFAtszs67I6rmb4+vEPGVGI30Vi/H085+63L7tU0R27GvR/GeomzoJZVLVb/+YzfgzIn4Z2B4wASJJTkDj9ndSZZDhbtw2+GGBgF3HrJIf9TuxAU+w4kZtg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=LsmdFV72; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="LsmdFV72" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66CDZPhH2489122; Sun, 12 Jul 2026 13:41:18 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=eppLnrn5n4C M2aKURuDbpv/VvLQNWXyxRiAS5zb65cU=; b=LsmdFV72uCPcElvjm06xRG54b6u uVPOf3uSef8nBK77x1IThqzPQtaBrWzrymIkGoKNffo4dOaqdhfNUyR6SEZ+GMoT dkG9V0sDgGq5V5eTye+moKH2j2cKH94gPqZQ48zV/0a/GEB9tXYZBS6toG5sWJzL 3cfAtfxh+x/rSQE+AZ2Ir6yjHEI4wvJ9KJTAt/C1zJWP8LGDU+zLXivxgz4fzJJ7 IxW8oPheVaGnr7ZsuELrtjp9eAkW2vFTRy3t1YcI4I/ufekIHqT2UaLCntan4CQM kpiHyw0eZIDJnGbk+S0cr23h4n+KIunNhjgJTqX/hYCh2mISTJ8m/Hl/WJQ== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbf0gjs6b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:18 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfFmh026902; Sun, 12 Jul 2026 13:41:15 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf83-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:14 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfDGp026807; Sun, 12 Jul 2026 13:41:14 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfEMw026873 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:14 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 5A81B642; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla Subject: [PATCH v4 6/7] ASoC: qcom: common: add DAI-node TDM slot helpers Date: Sun, 12 Jul 2026 19:11:09 +0530 Message-Id: <20260712134110.3306763-7-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Authority-Analysis: v=2.4 cv=Nq3htcdJ c=1 sm=1 tr=0 ts=6a53997e cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=QQzHM_gvdhGi4T2-EgIA:9 X-Proofpoint-ORIG-GUID: BP3Fd7jopWT7G4BEoGz6oRAnobxH6m0U X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfXxODNPRJehi+u mZECTiffbi3gE18n6X/RGawxBwe1GIBppaTNt/59x/RbKCSLg29M7SvBzlfq6mqlBbA3aq+pn6F eg0a3Kioym2DOq9iAdT4UULX6eIKrB2icLQ1I6zsNkMWuogOUAXwT+6VLFUCsHhyJ0Xo25gO1/w Ic+r86GRsorvBO5AcdsnMvdGH0gCenApd8nLJpfJCcLm1G0em6p2Q2oMSnefAuz0BWzhQ2jhAby QH06nX5PnN1OzJNem0Yk2DKNPV+hFsUrkmXrUkqSGds/WloazpGv9ZXgHsMUpOr3SyensuuuK7A G9J21NlWL7yU/JmfLxPUqrWZbZchOISCn5ZvoB/GW/BxRhfdoa42e/nmeYUrCvqeK1yb1wgy/47 xa+LjWFY0uVJLAuDPtI09276titkNybOmh+9N2OU9jf7b40iqQzHmdJYZ8sxMus3HTVFdEOTILL kZzNVyvfdBWb5zRP6aw== X-Proofpoint-GUID: BP3Fd7jopWT7G4BEoGz6oRAnobxH6m0U X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX8MmuR7RqtTUR UTH8/6LRgTfc6Nbg8Y6ZQ6u7zBF+7wggK4oUdF89EYCJDVn2HXfueEvBhYVz9zszcti/OVja06s miyI5Wd5vhn5pU7UW6sj0YG1CvnEB0M= 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add common helpers to parse standard dai-tdm-slot-* properties from the CPU and codec child nodes of a backend DAI link and apply the result to the active DAIs. QCOM machine drivers already use qcom_snd_parse_of() to build links from DT, but they lacked a shared helper to translate endpoint TDM properties into snd_soc_dai_set_tdm_slot() calls. Boards therefore had to carry ad hoc parsing or rely on non-standard DT properties. The helpers parse endpoint masks, validate the shared slot count and slot width, and program CPU and codec DAIs with the resulting slot configuration. A cfg-based apply helper is provided for callers that already parsed the DT data and want to avoid a second DT traversal. Signed-off-by: Prasad Kumpatla --- sound/soc/qcom/common.c | 165 ++++++++++++++++++++++++++++++++++++++++ sound/soc/qcom/common.h | 14 ++++ 2 files changed, 179 insertions(+) diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c index edc461169..08949b2c4 100644 --- a/sound/soc/qcom/common.c +++ b/sound/soc/qcom/common.c @@ -23,6 +23,171 @@ static const struct snd_soc_dapm_widget qcom_jack_snd_w= idgets[] =3D { SND_SOC_DAPM_SPK("DP7 Jack", NULL), }; =20 +static struct device_node *qcom_snd_get_link_node(struct snd_soc_pcm_runti= me *rtd) +{ + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_soc_card *card =3D rtd->card; + struct device_node *np; + struct device_node *cpu_np; + struct of_phandle_args args; + int ret; + + if (!card->dev || !card->dev->of_node) + return NULL; + + for_each_available_child_of_node(card->dev->of_node, np) { + cpu_np =3D of_get_child_by_name(np, "cpu"); + if (!cpu_np) + continue; + + ret =3D of_parse_phandle_with_args(cpu_np, "sound-dai", "#sound-dai-cell= s", 0, + &args); + of_node_put(cpu_np); + if (ret) + continue; + + if (args.np =3D=3D rtd->dai_link->cpus[0].of_node && + args.args_count =3D=3D 1 && args.args[0] =3D=3D cpu_dai->id) { + of_node_put(args.np); + return np; + } + + of_node_put(args.np); + } + + return NULL; +} + +static int qcom_snd_parse_tdm_slot(struct device_node *np, + struct qcom_snd_tdm_slot_cfg *cfg) +{ + memset(cfg, 0, sizeof(*cfg)); + + return snd_soc_of_parse_tdm_slot(np, &cfg->tx_mask, &cfg->rx_mask, + &cfg->slots, &cfg->slot_width); +} + +static int qcom_snd_normalize_tdm_slots(struct qcom_snd_tdm_slot_cfg *cpu_= cfg, + struct qcom_snd_tdm_slot_cfg *codec_cfg) +{ + unsigned int slots; + unsigned int slot_width; + + if (cpu_cfg->slots && codec_cfg->slots && cpu_cfg->slots !=3D codec_cfg->= slots) + return -EINVAL; + + if (cpu_cfg->slot_width && codec_cfg->slot_width && + cpu_cfg->slot_width !=3D codec_cfg->slot_width) + return -EINVAL; + + slots =3D cpu_cfg->slots ?: codec_cfg->slots; + if (!slots) + return 0; + + slot_width =3D cpu_cfg->slot_width ?: codec_cfg->slot_width; + if (!slot_width) + return -EINVAL; + + cpu_cfg->slots =3D slots; + codec_cfg->slots =3D slots; + cpu_cfg->slot_width =3D slot_width; + codec_cfg->slot_width =3D slot_width; + + return 0; +} + +static int qcom_snd_parse_dai_tdm_slots(struct snd_soc_pcm_runtime *rtd, + struct qcom_snd_tdm_slot_cfg *cpu_cfg, + struct qcom_snd_tdm_slot_cfg *codec_cfg) +{ + struct device_node *link_np; + struct device_node *cpu_np =3D NULL; + struct device_node *codec_np =3D NULL; + int ret; + + link_np =3D qcom_snd_get_link_node(rtd); + if (!link_np) + return -EINVAL; + + cpu_np =3D of_get_child_by_name(link_np, "cpu"); + codec_np =3D of_get_child_by_name(link_np, "codec"); + if (!cpu_np || !codec_np) { + ret =3D -EINVAL; + goto out; + } + + ret =3D qcom_snd_parse_tdm_slot(cpu_np, cpu_cfg); + if (ret) + goto out; + + ret =3D qcom_snd_parse_tdm_slot(codec_np, codec_cfg); +out: + of_node_put(codec_np); + of_node_put(cpu_np); + of_node_put(link_np); + + return ret; +} + +int qcom_snd_get_dai_tdm_slots(struct snd_soc_pcm_runtime *rtd, + struct qcom_snd_tdm_slot_cfg *cpu_cfg, + struct qcom_snd_tdm_slot_cfg *codec_cfg) +{ + int ret; + + ret =3D qcom_snd_parse_dai_tdm_slots(rtd, cpu_cfg, codec_cfg); + if (ret) + return ret; + + return qcom_snd_normalize_tdm_slots(cpu_cfg, codec_cfg); +} +EXPORT_SYMBOL_GPL(qcom_snd_get_dai_tdm_slots); + +int qcom_snd_apply_dai_tdm_slots_cfg(struct snd_soc_pcm_runtime *rtd, + const struct qcom_snd_tdm_slot_cfg *cpu_cfg, + const struct qcom_snd_tdm_slot_cfg *codec_cfg) +{ + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai *codec_dai; + int i; + int ret; + + if (!cpu_cfg->slots) + return 0; + + ret =3D snd_soc_dai_set_tdm_slot(cpu_dai, cpu_cfg->tx_mask, cpu_cfg->rx_m= ask, + cpu_cfg->slots, cpu_cfg->slot_width); + if (ret) + return ret; + + for_each_rtd_codec_dais(rtd, i, codec_dai) { + ret =3D snd_soc_dai_set_tdm_slot(codec_dai, + codec_cfg->tx_mask, + codec_cfg->rx_mask, + codec_cfg->slots, + codec_cfg->slot_width); + if (ret) + return ret; + } + + return 0; +} +EXPORT_SYMBOL_GPL(qcom_snd_apply_dai_tdm_slots_cfg); + +int qcom_snd_apply_dai_tdm_slots(struct snd_soc_pcm_runtime *rtd) +{ + struct qcom_snd_tdm_slot_cfg cpu_cfg; + struct qcom_snd_tdm_slot_cfg codec_cfg; + int ret; + + ret =3D qcom_snd_get_dai_tdm_slots(rtd, &cpu_cfg, &codec_cfg); + if (ret) + return ret =3D=3D -EINVAL ? 0 : ret; + + return qcom_snd_apply_dai_tdm_slots_cfg(rtd, &cpu_cfg, &codec_cfg); +} +EXPORT_SYMBOL_GPL(qcom_snd_apply_dai_tdm_slots); + int qcom_snd_parse_of(struct snd_soc_card *card) { struct device *dev =3D card->dev; diff --git a/sound/soc/qcom/common.h b/sound/soc/qcom/common.h index ee6662885..02b24caec 100644 --- a/sound/soc/qcom/common.h +++ b/sound/soc/qcom/common.h @@ -9,7 +9,21 @@ =20 #define LPASS_MAX_PORT (SENARY_MI2S_TX + 1) =20 +struct qcom_snd_tdm_slot_cfg { + unsigned int tx_mask; + unsigned int rx_mask; + unsigned int slots; + unsigned int slot_width; +}; + int qcom_snd_parse_of(struct snd_soc_card *card); +int qcom_snd_get_dai_tdm_slots(struct snd_soc_pcm_runtime *rtd, + struct qcom_snd_tdm_slot_cfg *cpu_cfg, + struct qcom_snd_tdm_slot_cfg *codec_cfg); +int qcom_snd_apply_dai_tdm_slots_cfg(struct snd_soc_pcm_runtime *rtd, + const struct qcom_snd_tdm_slot_cfg *cpu_cfg, + const struct qcom_snd_tdm_slot_cfg *codec_cfg); +int qcom_snd_apply_dai_tdm_slots(struct snd_soc_pcm_runtime *rtd); int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd, struct snd_soc_jack *jack, bool *jack_setup); int qcom_snd_dp_jack_setup(struct snd_soc_pcm_runtime *rtd, --=20 2.34.1 From nobody Sat Jul 25 22:32:27 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 BCA2A3ACEF1; Sun, 12 Jul 2026 13:41:47 +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=1783863713; cv=none; b=qxCjGwu1TSeDSR1xpwDNDxZe7VVv8Fl4O12KdzDvr8iqcuChxqc67Erb+CgaenQJo/EHLk4oUSMOruJIQPRF6731g0CVedEFo0++mVR2IN07IjskNaEvH0OdkdRXyAVptgZxio/dbJzML/dX+EzWfZ3elolNfP4J9R3Gn/lzh0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783863713; c=relaxed/simple; bh=UYBNO8PavWcYBGXaonqN9ioCqieUh61c17kcrThmSlk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mq4w6kLPZl+XuoM4TXe9FOdwHNyScyNwx+Gn7lD24W0AlgcvWrV2RfaFtIpConYU24OweYy4ZVLFStGBXXSXY1YJiyiBq8ydGdRsJm34gxiTwZpgeXgQ2kf0ZJraI3i9IFG+l9mCwqHMPlLN70UuVk49yFg8PHNYhSIq4Z3Ku0g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=HeYZJy1k; 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=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="HeYZJy1k" 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 66CDZkD22603868; Sun, 12 Jul 2026 13:41:18 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=vGhrYne7bvA ZPZFxOkACDJ//NrqboTe4Nyn/d81StMM=; b=HeYZJy1kpsFHm93x4to0VT7k/nL WIk+0GxMWuIcePOGnx/Y+rTeeYdfT5e0gqlYOu8Jt0ufWXlhuZsZnWgTpXRAsza6 Keik9sCRc9EyhczUXP3WQxrTfSsJWkya1psQ6bF+JE4l8eN3zelaJ2IZJUXrE1Iu el+GlS7fMLMLi/Ips2d8b8SOxrhjrwKSVnxD4QNJcVpFqz+5gKSP02T7Kx3SNnDg WpOdi+F3qPWSx7avKYHl6KP7caHHJv6nGwn/R1C+q9urhAElKWZnqWS4S3SjF/bM pZ0l/X9LIxw6ZrwgZaXq4uAGWK+9C63V/+tpIyJxJ66XJR/Ub/649ITX02A== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbekcjt9p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:17 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.7/8.18.1.7) with ESMTP id 66CDfFS2026903; Sun, 12 Jul 2026 13:41:15 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4fbewhmf81-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:14 +0000 (GMT) Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 66CDfEk1026884; Sun, 12 Jul 2026 13:41:14 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-pkumpatl-hyd.qualcomm.com [10.147.245.204]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 66CDfEoW026875 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 12 Jul 2026 13:41:14 +0000 (GMT) Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 3914174) id 5F0C3643; Sun, 12 Jul 2026 19:11:12 +0530 (+0530) From: Prasad Kumpatla To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prasad Kumpatla Subject: [PATCH v4 7/7] ASoC: qcom: sc8280xp: add TDM hw_params support Date: Sun, 12 Jul 2026 19:11:10 +0530 Message-Id: <20260712134110.3306763-8-prasad.kumpatla@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260712134110.3306763-1-prasad.kumpatla@oss.qualcomm.com> References: <20260712134110.3306763-1-prasad.kumpatla@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-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfX7FP8ATl4dv35 PMEgPU9tkj32GI1YOkbmGw1kH4USnu6M3KI6GNaq9PZo5guwj19vV/uJA8dVy4f3g4Hh4zD2ya4 5h0Pi47sp2lrK4+dWpkQYGMlRckGs5SxMIxwliAUSNMYvwau1Jnh3dRU57od4kqeZymVdsdVtJ8 8br2qV8ZEwOKA4talsimICePHTXQj1/HqQ7VL/qZoieeDNOPhh+L+6sptnCG55yVisZ7zz8qCxb NcdzSsSMtK04PkyR8qnK15tC5Oa+ZeU6orXDpo1ZAur437i+ij4Z6nkRY9b4qLD1T72upxZ6jTC qnLJyNtMjuqOw7NsUGRWHLgb3YWjy86G6thOFq9NZDfAHz6iNlfdBKvEZw+wKy0pnUpfOKULY0A YIiH7CN/G5k4kcRV3LEH+zEeQup/cuuEKvqrcGGflo/hntkTaiWlHdmeNsEuTud9VUZ5wQXqC76 Wya/SqM+ejfoJ8d3sAQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEyMDE0MyBTYWx0ZWRfXwyqgcj5V3bUV vX/JDt8n6Wc5/ydx3zbXPqJvh0p0EzYh+dsVIyXFdGphxCAmHeaYzNkwrHsNrc2Qb0KCAjLq12y T2wygTGB7Ds6cB0InvBNnF9Ay/f04/Y= X-Proofpoint-GUID: xhq4KUIqqJH7Jpw2m80ar2sqjOR_jqT- X-Authority-Analysis: v=2.4 cv=XNsAjwhE c=1 sm=1 tr=0 ts=6a53997e cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=QTpijNGdYiuWC2p250EA:9 X-Proofpoint-ORIG-GUID: xhq4KUIqqJH7Jpw2m80ar2sqjOR_jqT- 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-12_05,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 adultscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 phishscore=0 spamscore=0 impostorscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607120143 Content-Type: text/plain; charset="utf-8" Add TDM backend handling to the sc8280xp machine driver. Use the common QCOM DAI-node TDM helper to parse the standard DAI TDM slot properties from backend CPU and codec endpoints. Reuse the parsed configuration when programming DAIs so hw_params does not need a second DT traversal. Derive the LPASS backend bit clock from the runtime TDM parameters and request it through the backend child-clock path using LPAIF_MI2S_BCLK. Program codec sysclk in hw_params so codec PLL setup happens before the stream is triggered. Signed-off-by: Prasad Kumpatla --- sound/soc/qcom/sc8280xp.c | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/sound/soc/qcom/sc8280xp.c b/sound/soc/qcom/sc8280xp.c index eea571de9..728300a57 100644 --- a/sound/soc/qcom/sc8280xp.c +++ b/sound/soc/qcom/sc8280xp.c @@ -84,6 +84,64 @@ static inline int sc8280xp_get_bclk_freq(struct snd_pcm_= hw_params *params) snd_pcm_format_width(params_format(params))); } =20 +static int sc8280xp_tdm_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 sc8280xp_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai *codec_dai; + struct qcom_snd_tdm_slot_cfg cpu_cfg; + struct qcom_snd_tdm_slot_cfg codec_cfg; + unsigned int bclk_freq; + int ret; + int i; + + ret =3D qcom_snd_get_dai_tdm_slots(rtd, &cpu_cfg, &codec_cfg); + if (ret) + return ret =3D=3D -EINVAL ? 0 : ret; + + if (!cpu_cfg.slots) + return 0; + + ret =3D snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_BP_FP); + if (ret) + return ret; + + ret =3D qcom_snd_apply_dai_tdm_slots_cfg(rtd, &cpu_cfg, &codec_cfg); + if (ret) + return ret; + + bclk_freq =3D snd_soc_tdm_params_to_bclk(params, cpu_cfg.slot_width, + cpu_cfg.slots, 1); + if (!bclk_freq) + return -EINVAL; + + 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_IN); + if (ret) { + dev_err(rtd->dev, "%s: failed to set cpu sysclk: %d\n", + __func__, ret); + return ret; + } + } + + if (data->snd_soc_common_priv->codec_sysclk_set) { + for_each_rtd_codec_dais(rtd, i, codec_dai) { + ret =3D snd_soc_dai_set_sysclk(codec_dai, 0, bclk_freq, + SND_SOC_CLOCK_IN); + if (ret) { + dev_err(rtd->dev, "%s: failed to set codec sysclk on %s: %d\n", + __func__, codec_dai->name, ret); + return ret; + } + } + } + + return 0; +} + static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd) { struct sc8280xp_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); @@ -206,6 +264,8 @@ static int sc8280xp_snd_hw_params(struct snd_pcm_substr= eam *substream, return ret; } break; + case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7: + return sc8280xp_tdm_hw_params(substream, params); default: break; } --=20 2.34.1