summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-08-04 17:32:24 +0100
committerMark Brown <broonie@kernel.org>2026-08-04 17:32:24 +0100
commit685e462ce9c262e3f55df43127805ec2d3fd7621 (patch)
tree11d90676e83a1e3aa63094c58a5f64b4dbd8486c /include
parent4afd4ac3642a8ff73af331079b0fc0b0ccd0a3df (diff)
parenta689ee3b2fcd342333eceb94c65ba808a66f96fd (diff)
ASoC: qcom: add AudioReach TDM backend support
Prasad Kumpatla <prasad.kumpatla@oss.qualcomm.com> says: Add AudioReach support for LPASS Audio IF based TDM backends and wire it up for the sc8280xp machine driver. The series first adds topology-driven Audio IF source/sink handling so the DSP interface parameters can be described by topology while runtime media format and slot configuration still come from the machine driver. It then adds TDM DAI operations for q6apm-lpass-dais, exposes the Audio IF clock IDs through the q6dsp-lpass-ports binding and q6prm clock tables, and introduces common QCOM helpers for parsing standard dai-tdm-slot-* properties from backend CPU and codec endpoints. Finally, sc8280xp uses the common helpers during hw_params to program CPU and codec TDM slots, derive the backend bit clock from the active PCM parameters, and request the CPU and codec clocks before the stream is started. Link: https://patch.msgid.link/20260804070307.117119-1-prasad.kumpatla@oss.qualcomm.com
Diffstat (limited to 'include')
-rw-r--r--include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h29
-rw-r--r--include/uapi/sound/snd_ar_tokens.h93
2 files changed, 122 insertions, 0 deletions
diff --git a/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h b/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
index ca84952c3884..2e879a3c09ae 100644
--- a/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
+++ b/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
@@ -237,6 +237,35 @@
/* Clock ID for RX CORE MCLK2 2X MCLK */
#define LPASS_CLK_ID_RX_CORE_MCLK2_2X_MCLK 70
+#define LAPSS_CLK_ID_QAIF_IF0_IBIT 71
+#define LAPSS_CLK_ID_QAIF_IF0_EBIT 72
+#define LAPSS_CLK_ID_QAIF_IF1_IBIT 73
+#define LAPSS_CLK_ID_QAIF_IF1_EBIT 74
+#define LAPSS_CLK_ID_QAIF_IF2_IBIT 75
+#define LAPSS_CLK_ID_QAIF_IF2_EBIT 76
+#define LAPSS_CLK_ID_QAIF_IF3_IBIT 77
+#define LAPSS_CLK_ID_QAIF_IF3_EBIT 78
+#define LAPSS_CLK_ID_QAIF_IF4_IBIT 79
+#define LAPSS_CLK_ID_QAIF_IF4_EBIT 80
+#define LAPSS_CLK_ID_QAIF_IF5_IBIT 81
+#define LAPSS_CLK_ID_QAIF_IF5_EBIT 82
+#define LAPSS_CLK_ID_QAIF_IF6_IBIT 83
+#define LAPSS_CLK_ID_QAIF_IF6_EBIT 84
+#define LAPSS_CLK_ID_QAIF_IF7_IBIT 85
+#define LAPSS_CLK_ID_QAIF_IF7_EBIT 86
+#define LAPSS_CLK_ID_QAIF_IF8_IBIT 87
+#define LAPSS_CLK_ID_QAIF_IF8_EBIT 88
+#define LAPSS_CLK_ID_QAIF_IF9_IBIT 89
+#define LAPSS_CLK_ID_QAIF_IF9_EBIT 90
+#define LAPSS_CLK_ID_QAIF_IF10_IBIT 91
+#define LAPSS_CLK_ID_QAIF_IF10_EBIT 92
+#define LAPSS_CLK_ID_QAIF_IF11_IBIT 93
+#define LAPSS_CLK_ID_QAIF_IF11_EBIT 94
+#define LAPSS_CLK_ID_QAIF_IF12_IBIT 95
+#define LAPSS_CLK_ID_QAIF_IF12_EBIT 96
+#define LAPSS_CLK_ID_VA_QAIF_IF0_IBIT 97
+#define LAPSS_CLK_ID_VA_QAIF_IF0_EBIT 98
+
#define LPASS_HW_AVTIMER_VOTE 101
#define LPASS_HW_MACRO_VOTE 102
#define LPASS_HW_DCODEC_VOTE 103
diff --git a/include/uapi/sound/snd_ar_tokens.h b/include/uapi/sound/snd_ar_tokens.h
index 6b8102eaa121..1700e3f5cb64 100644
--- a/include/uapi/sound/snd_ar_tokens.h
+++ b/include/uapi/sound/snd_ar_tokens.h
@@ -168,6 +168,60 @@ enum ar_event_types {
* LOG_WAIT = 0,
* LOG_IMMEDIATELY = 1
*
+ * %AR_TKN_U16_MODULE_SYNC_SRC: Frame sync source
+ * AR_AUDIO_IF_SYNC_SRC_EXTERNAL = 0,
+ * AR_AUDIO_IF_SYNC_SRC_INTERNAL = 1
+ *
+ * %AR_TKN_U16_MODULE_CTRL_DATA_OUT_ENABLE: Enable data-out tri-state control
+ * AR_AUDIO_IF_CTRL_DATA_OE_DISABLE = 0,
+ * AR_AUDIO_IF_CTRL_DATA_OE_ENABLE = 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 = 0,
+ * AR_AUDIO_IF_FRAME_SYNC_MODE_ONE_SLOT = 1,
+ * AR_AUDIO_IF_FRAME_SYNC_MODE_LONG = 2
+ *
+ * %AR_TKN_U16_MODULE_CTRL_INVERT_SYNC_PULSE: Invert frame sync pulse polarity
+ * AR_AUDIO_IF_SYNC_NORMAL = 0,
+ * AR_AUDIO_IF_SYNC_INVERTED = 1
+ *
+ * %AR_TKN_U16_MODULE_CTRL_SYNC_DATA_DELAY: Data delay relative to frame sync
+ * AR_AUDIO_IF_DATA_DELAY_NONE = 0,
+ * AR_AUDIO_IF_DATA_DELAY_1_CYCLE = 1,
+ * AR_AUDIO_IF_DATA_DELAY_2_CYCLE = 2
+ *
+ * %AR_TKN_U16_MODULE_INTF_MODE: Audio IF interface mode
+ * AR_AUDIO_IF_INTF_MODE_TDM = 0,
+ * AR_AUDIO_IF_INTF_MODE_PCM = 1,
+ * AR_AUDIO_IF_INTF_MODE_I2S = 2
+ *
+ * %AR_TKN_U16_MODULE_QAIF_TYPE: QAIF hardware port type index
+ * AR_AUDIO_IF_QAIF = 0,
+ * AR_AUDIO_IF_QAIF_VA = 1
+ *
+ * %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 = 0,
+ * AR_AUDIO_IF_BIT_CLK_EXTERNAL = 1,
+ * AR_AUDIO_IF_BIT_CLK_SKIP = 2
+ *
+ * %AR_TKN_U8_MODULE_INV_INT_BIT_CLK: Invert internal bit clock
+ * AR_AUDIO_IF_CLK_NORMAL = 0,
+ * AR_AUDIO_IF_CLK_INVERTED = 1
+ *
+ * %AR_TKN_U8_MODULE_INV_EXT_BIT_CLK: Invert external bit clock
+ * AR_AUDIO_IF_CLK_NORMAL = 0,
+ * AR_AUDIO_IF_CLK_INVERTED = 1
+ *
* %AR_TKN_DAI_INDEX: dai index
*
*/
@@ -240,6 +294,45 @@ enum ar_event_types {
#define AR_TKN_U32_MODULE_LOG_TAP_POINT_ID 260
#define AR_TKN_U32_MODULE_LOG_MODE 261
+#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_QAIF 0
+#define AR_AUDIO_IF_QAIF_VA 1
+#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 */