Skip to content

Commit 36ad9bf

Browse files
Srinivas-Kandagatlabroonie
authored andcommitted
ASoC: qdsp6: audioreach: add topology support
Add ASoC topology support in audioreach Signed-off-by: Srinivas Kandagatla <[email protected]> Reviewed-by: Pierre-Louis Bossart <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent cf989b6 commit 36ad9bf

File tree

6 files changed

+1327
-2
lines changed

6 files changed

+1327
-2
lines changed

include/uapi/sound/snd_ar_tokens.h

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2+
3+
#ifndef __SND_AR_TOKENS_H__
4+
#define __SND_AR_TOKENS_H__
5+
6+
#define APM_SUB_GRAPH_PERF_MODE_LOW_POWER 0x1
7+
#define APM_SUB_GRAPH_PERF_MODE_LOW_LATENCY 0x2
8+
9+
#define APM_SUB_GRAPH_DIRECTION_TX 0x1
10+
#define APM_SUB_GRAPH_DIRECTION_RX 0x2
11+
12+
/** Scenario ID Audio Playback */
13+
#define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK 0x1
14+
/* Scenario ID Audio Record */
15+
#define APM_SUB_GRAPH_SID_AUDIO_RECORD 0x2
16+
/* Scenario ID Voice call. */
17+
#define APM_SUB_GRAPH_SID_VOICE_CALL 0x3
18+
19+
/* container capability ID Pre/Post Processing (PP) */
20+
#define APM_CONTAINER_CAP_ID_PP 0x1
21+
/* container capability ID Compression/Decompression (CD) */
22+
#define APM_CONTAINER_CAP_ID_CD 0x2
23+
/* container capability ID End Point(EP) */
24+
#define APM_CONTAINER_CAP_ID_EP 0x3
25+
/* container capability ID Offload (OLC) */
26+
#define APM_CONTAINER_CAP_ID_OLC 0x4
27+
28+
/* container graph position Stream */
29+
#define APM_CONT_GRAPH_POS_STREAM 0x1
30+
/* container graph position Per Stream Per Device*/
31+
#define APM_CONT_GRAPH_POS_PER_STR_PER_DEV 0x2
32+
/* container graph position Stream-Device */
33+
#define APM_CONT_GRAPH_POS_STR_DEV 0x3
34+
/* container graph position Global Device */
35+
#define APM_CONT_GRAPH_POS_GLOBAL_DEV 0x4
36+
37+
#define APM_PROC_DOMAIN_ID_MDSP 0x1
38+
#define APM_PROC_DOMAIN_ID_ADSP 0x2
39+
#define APM_PROC_DOMAIN_ID_SDSP 0x4
40+
#define APM_PROC_DOMAIN_ID_CDSP 0x5
41+
42+
#define PCM_INTERLEAVED 1
43+
#define PCM_DEINTERLEAVED_PACKED 2
44+
#define PCM_DEINTERLEAVED_UNPACKED 3
45+
#define AR_I2S_WS_SRC_EXTERNAL 0
46+
#define AR_I2S_WS_SRC_INTERNAL 1
47+
48+
enum ar_event_types {
49+
AR_EVENT_NONE = 0,
50+
AR_PGA_DAPM_EVENT
51+
};
52+
53+
/*
54+
* Kcontrol IDs
55+
*/
56+
#define SND_SOC_AR_TPLG_FE_BE_GRAPH_CTL_MIX 256
57+
#define SND_SOC_AR_TPLG_VOL_CTL 257
58+
59+
/**
60+
* %AR_TKN_U32_SUB_GRAPH_INSTANCE_ID: Sub Graph Instance Id
61+
*
62+
* %AR_TKN_U32_SUB_GRAPH_PERF_MODE: Performance mode of subgraph
63+
* APM_SUB_GRAPH_PERF_MODE_LOW_POWER = 1,
64+
* APM_SUB_GRAPH_PERF_MODE_LOW_LATENCY = 2
65+
*
66+
* %AR_TKN_U32_SUB_GRAPH_DIRECTION: Direction of subgraph
67+
* APM_SUB_GRAPH_DIRECTION_TX = 1,
68+
* APM_SUB_GRAPH_DIRECTION_RX = 2
69+
*
70+
* %AR_TKN_U32_SUB_GRAPH_SCENARIO_ID: Scenario ID for subgraph
71+
* APM_SUB_GRAPH_SID_AUDIO_PLAYBACK = 1,
72+
* APM_SUB_GRAPH_SID_AUDIO_RECORD = 2,
73+
* APM_SUB_GRAPH_SID_VOICE_CALL = 3
74+
*
75+
* %AR_TKN_U32_CONTAINER_INSTANCE_ID: Container Instance ID
76+
*
77+
* %AR_TKN_U32_CONTAINER_CAPABILITY_ID: Container capability ID
78+
* APM_CONTAINER_CAP_ID_PP = 1,
79+
* APM_CONTAINER_CAP_ID_CD = 2,
80+
* APM_CONTAINER_CAP_ID_EP = 3,
81+
* APM_CONTAINER_CAP_ID_OLC = 4
82+
*
83+
* %AR_TKN_U32_CONTAINER_STACK_SIZE: Stack size in the container.
84+
*
85+
* %AR_TKN_U32_CONTAINER_GRAPH_POS: Graph Position
86+
* APM_CONT_GRAPH_POS_STREAM = 1,
87+
* APM_CONT_GRAPH_POS_PER_STR_PER_DEV = 2,
88+
* APM_CONT_GRAPH_POS_STR_DEV = 3,
89+
* APM_CONT_GRAPH_POS_GLOBAL_DEV = 4
90+
*
91+
* %AR_TKN_U32_CONTAINER_PROC_DOMAIN: Processor domain of container
92+
* APM_PROC_DOMAIN_ID_MDSP = 1,
93+
* APM_PROC_DOMAIN_ID_ADSP = 2,
94+
* APM_PROC_DOMAIN_ID_SDSP = 4,
95+
* APM_PROC_DOMAIN_ID_CDSP = 5
96+
*
97+
* %AR_TKN_U32_MODULE_ID: Module ID
98+
*
99+
* %AR_TKN_U32_MODULE_INSTANCE_ID: Module Instance ID.
100+
*
101+
* %AR_TKN_U32_MODULE_MAX_IP_PORTS: Module maximum input ports
102+
*
103+
* %AR_TKN_U32_MODULE_MAX_OP_PORTS: Module maximum output ports.
104+
*
105+
* %AR_TKN_U32_MODULE_IN_PORTS: Number of in ports
106+
*
107+
* %AR_TKN_U32_MODULE_OUT_PORTS: Number of out ports.
108+
*
109+
* %AR_TKN_U32_MODULE_SRC_OP_PORT_ID: Source module output port ID
110+
*
111+
* %AR_TKN_U32_MODULE_DST_IN_PORT_ID: Destination module input port ID
112+
*
113+
* %AR_TKN_U32_MODULE_HW_IF_IDX: Interface index types for I2S/LPAIF
114+
*
115+
* %AR_TKN_U32_MODULE_HW_IF_TYPE: Interface type
116+
* LPAIF = 0,
117+
* LPAIF_RXTX = 1,
118+
* LPAIF_WSA = 2,
119+
* LPAIF_VA = 3,
120+
* LPAIF_AXI = 4
121+
*
122+
* %AR_TKN_U32_MODULE_FMT_INTERLEAVE: PCM Interleaving
123+
* PCM_INTERLEAVED = 1,
124+
* PCM_DEINTERLEAVED_PACKED = 2,
125+
* PCM_DEINTERLEAVED_UNPACKED = 3
126+
*
127+
* %AR_TKN_U32_MODULE_FMT_DATA: data format
128+
* FIXED POINT = 1,
129+
* IEC60958 PACKETIZED = 3,
130+
* IEC60958 PACKETIZED NON LINEAR = 8,
131+
* COMPR OVER PCM PACKETIZED = 7,
132+
* IEC61937 PACKETIZED = 2,
133+
* GENERIC COMPRESSED = 5
134+
*
135+
* %AR_TKN_U32_MODULE_FMT_SAMPLE_RATE: sample rate
136+
*
137+
* %AR_TKN_U32_MODULE_FMT_BIT_DEPTH: bit depth
138+
*
139+
* %AR_TKN_U32_MODULE_SD_LINE_IDX: I2S serial data line idx
140+
* I2S_SD0 = 1,
141+
* I2S_SD1 = 2,
142+
* I2S_SD2 = 3,
143+
* I2S_SD3 = 4,
144+
* I2S_QUAD01 = 5,
145+
* I2S_QUAD23 = 6,
146+
* I2S_6CHS = 7,
147+
* I2S_8CHS = 8
148+
*
149+
* %AR_TKN_U32_MODULE_WS_SRC: Word Select Source
150+
* AR_I2S_WS_SRC_EXTERNAL = 0,
151+
* AR_I2S_WS_SRC_INTERNAL = 1,
152+
*
153+
* %AR_TKN_U32_MODULE_FRAME_SZ_FACTOR: Frame size factor
154+
*
155+
* %AR_TKN_U32_MODULE_LOG_CODE: Log Module Code
156+
*
157+
* %AR_TKN_U32_MODULE_LOG_TAP_POINT_ID: logging tap point of this module
158+
*
159+
* %AR_TKN_U32_MODULE_LOG_MODE: logging mode
160+
* LOG_WAIT = 0,
161+
* LOG_IMMEDIATELY = 1
162+
*
163+
* %AR_TKN_DAI_INDEX: dai index
164+
*
165+
*/
166+
167+
/* DAI Tokens */
168+
#define AR_TKN_DAI_INDEX 1
169+
/* SUB GRAPH Tokens */
170+
#define AR_TKN_U32_SUB_GRAPH_INSTANCE_ID 2
171+
#define AR_TKN_U32_SUB_GRAPH_PERF_MODE 3
172+
#define AR_TKN_U32_SUB_GRAPH_DIRECTION 4
173+
#define AR_TKN_U32_SUB_GRAPH_SCENARIO_ID 5
174+
175+
/* Container Tokens */
176+
#define AR_TKN_U32_CONTAINER_INSTANCE_ID 100
177+
#define AR_TKN_U32_CONTAINER_CAPABILITY_ID 101
178+
#define AR_TKN_U32_CONTAINER_STACK_SIZE 102
179+
#define AR_TKN_U32_CONTAINER_GRAPH_POS 103
180+
#define AR_TKN_U32_CONTAINER_PROC_DOMAIN 104
181+
182+
/* Module Tokens */
183+
#define AR_TKN_U32_MODULE_ID 200
184+
#define AR_TKN_U32_MODULE_INSTANCE_ID 201
185+
#define AR_TKN_U32_MODULE_MAX_IP_PORTS 202
186+
#define AR_TKN_U32_MODULE_MAX_OP_PORTS 203
187+
#define AR_TKN_U32_MODULE_IN_PORTS 204
188+
#define AR_TKN_U32_MODULE_OUT_PORTS 205
189+
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID 206
190+
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID 207
191+
#define AR_TKN_U32_MODULE_SRC_INSTANCE_ID 208
192+
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID 209
193+
194+
195+
#define AR_TKN_U32_MODULE_HW_IF_IDX 250
196+
#define AR_TKN_U32_MODULE_HW_IF_TYPE 251
197+
#define AR_TKN_U32_MODULE_FMT_INTERLEAVE 252
198+
#define AR_TKN_U32_MODULE_FMT_DATA 253
199+
#define AR_TKN_U32_MODULE_FMT_SAMPLE_RATE 254
200+
#define AR_TKN_U32_MODULE_FMT_BIT_DEPTH 255
201+
#define AR_TKN_U32_MODULE_SD_LINE_IDX 256
202+
#define AR_TKN_U32_MODULE_WS_SRC 257
203+
#define AR_TKN_U32_MODULE_FRAME_SZ_FACTOR 258
204+
#define AR_TKN_U32_MODULE_LOG_CODE 259
205+
#define AR_TKN_U32_MODULE_LOG_TAP_POINT_ID 260
206+
#define AR_TKN_U32_MODULE_LOG_MODE 261
207+
208+
#endif /* __SND_AR_TOKENS_H__ */

sound/soc/qcom/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ config SND_SOC_QDSP6
101101
select SND_SOC_QDSP6_ROUTING
102102
select SND_SOC_QDSP6_ASM
103103
select SND_SOC_QDSP6_ASM_DAI
104+
select SND_SOC_TOPOLOGY
104105
select SND_SOC_QDSP6_APM
105106
help
106107
To add support for MSM QDSP6 Soc Audio.

sound/soc/qcom/qdsp6/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SPDX-License-Identifier: GPL-2.0-only
22
snd-q6dsp-common-objs := q6dsp-common.o q6dsp-lpass-ports.o q6dsp-lpass-clocks.o
3-
snd-q6apm-objs := q6apm.o audioreach.o
3+
snd-q6apm-objs := q6apm.o audioreach.o topology.o
44

55
obj-$(CONFIG_SND_SOC_QDSP6_COMMON) += snd-q6dsp-common.o
66
obj-$(CONFIG_SND_SOC_QDSP6_CORE) += q6core.o

sound/soc/qcom/qdsp6/audioreach.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,9 @@ void *audioreach_alloc_pkt(int payload_size, uint32_t opcode,
693693
void *audioreach_alloc_graph_pkt(struct q6apm *apm,
694694
struct list_head *sg_list,
695695
int graph_id);
696+
/* Topology specific */
697+
int audioreach_tplg_init(struct snd_soc_component *component);
698+
696699
/* Module specific */
697700
void audioreach_graph_free_buf(struct q6apm_graph *graph);
698701
int audioreach_map_memory_regions(struct q6apm_graph *graph,

sound/soc/qcom/qdsp6/q6apm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ EXPORT_SYMBOL_GPL(q6apm_graph_flush);
694694

695695
static int q6apm_audio_probe(struct snd_soc_component *component)
696696
{
697-
return 0;
697+
return audioreach_tplg_init(component);
698698
}
699699

700700
static void q6apm_audio_remove(struct snd_soc_component *component)

0 commit comments

Comments
 (0)