mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
ASoC: qdsp6: audioreach: add topology support
Add ASoC topology support in audioreach Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20211026111655.1702-14-srinivas.kandagatla@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
committed by
Mark Brown
parent
cf989b68fc
commit
36ad9bf1d9
208
include/uapi/sound/snd_ar_tokens.h
Normal file
208
include/uapi/sound/snd_ar_tokens.h
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||||
|
|
||||||
|
#ifndef __SND_AR_TOKENS_H__
|
||||||
|
#define __SND_AR_TOKENS_H__
|
||||||
|
|
||||||
|
#define APM_SUB_GRAPH_PERF_MODE_LOW_POWER 0x1
|
||||||
|
#define APM_SUB_GRAPH_PERF_MODE_LOW_LATENCY 0x2
|
||||||
|
|
||||||
|
#define APM_SUB_GRAPH_DIRECTION_TX 0x1
|
||||||
|
#define APM_SUB_GRAPH_DIRECTION_RX 0x2
|
||||||
|
|
||||||
|
/** Scenario ID Audio Playback */
|
||||||
|
#define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK 0x1
|
||||||
|
/* Scenario ID Audio Record */
|
||||||
|
#define APM_SUB_GRAPH_SID_AUDIO_RECORD 0x2
|
||||||
|
/* Scenario ID Voice call. */
|
||||||
|
#define APM_SUB_GRAPH_SID_VOICE_CALL 0x3
|
||||||
|
|
||||||
|
/* container capability ID Pre/Post Processing (PP) */
|
||||||
|
#define APM_CONTAINER_CAP_ID_PP 0x1
|
||||||
|
/* container capability ID Compression/Decompression (CD) */
|
||||||
|
#define APM_CONTAINER_CAP_ID_CD 0x2
|
||||||
|
/* container capability ID End Point(EP) */
|
||||||
|
#define APM_CONTAINER_CAP_ID_EP 0x3
|
||||||
|
/* container capability ID Offload (OLC) */
|
||||||
|
#define APM_CONTAINER_CAP_ID_OLC 0x4
|
||||||
|
|
||||||
|
/* container graph position Stream */
|
||||||
|
#define APM_CONT_GRAPH_POS_STREAM 0x1
|
||||||
|
/* container graph position Per Stream Per Device*/
|
||||||
|
#define APM_CONT_GRAPH_POS_PER_STR_PER_DEV 0x2
|
||||||
|
/* container graph position Stream-Device */
|
||||||
|
#define APM_CONT_GRAPH_POS_STR_DEV 0x3
|
||||||
|
/* container graph position Global Device */
|
||||||
|
#define APM_CONT_GRAPH_POS_GLOBAL_DEV 0x4
|
||||||
|
|
||||||
|
#define APM_PROC_DOMAIN_ID_MDSP 0x1
|
||||||
|
#define APM_PROC_DOMAIN_ID_ADSP 0x2
|
||||||
|
#define APM_PROC_DOMAIN_ID_SDSP 0x4
|
||||||
|
#define APM_PROC_DOMAIN_ID_CDSP 0x5
|
||||||
|
|
||||||
|
#define PCM_INTERLEAVED 1
|
||||||
|
#define PCM_DEINTERLEAVED_PACKED 2
|
||||||
|
#define PCM_DEINTERLEAVED_UNPACKED 3
|
||||||
|
#define AR_I2S_WS_SRC_EXTERNAL 0
|
||||||
|
#define AR_I2S_WS_SRC_INTERNAL 1
|
||||||
|
|
||||||
|
enum ar_event_types {
|
||||||
|
AR_EVENT_NONE = 0,
|
||||||
|
AR_PGA_DAPM_EVENT
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Kcontrol IDs
|
||||||
|
*/
|
||||||
|
#define SND_SOC_AR_TPLG_FE_BE_GRAPH_CTL_MIX 256
|
||||||
|
#define SND_SOC_AR_TPLG_VOL_CTL 257
|
||||||
|
|
||||||
|
/**
|
||||||
|
* %AR_TKN_U32_SUB_GRAPH_INSTANCE_ID: Sub Graph Instance Id
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_SUB_GRAPH_PERF_MODE: Performance mode of subgraph
|
||||||
|
* APM_SUB_GRAPH_PERF_MODE_LOW_POWER = 1,
|
||||||
|
* APM_SUB_GRAPH_PERF_MODE_LOW_LATENCY = 2
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_SUB_GRAPH_DIRECTION: Direction of subgraph
|
||||||
|
* APM_SUB_GRAPH_DIRECTION_TX = 1,
|
||||||
|
* APM_SUB_GRAPH_DIRECTION_RX = 2
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_SUB_GRAPH_SCENARIO_ID: Scenario ID for subgraph
|
||||||
|
* APM_SUB_GRAPH_SID_AUDIO_PLAYBACK = 1,
|
||||||
|
* APM_SUB_GRAPH_SID_AUDIO_RECORD = 2,
|
||||||
|
* APM_SUB_GRAPH_SID_VOICE_CALL = 3
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_CONTAINER_INSTANCE_ID: Container Instance ID
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_CONTAINER_CAPABILITY_ID: Container capability ID
|
||||||
|
* APM_CONTAINER_CAP_ID_PP = 1,
|
||||||
|
* APM_CONTAINER_CAP_ID_CD = 2,
|
||||||
|
* APM_CONTAINER_CAP_ID_EP = 3,
|
||||||
|
* APM_CONTAINER_CAP_ID_OLC = 4
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_CONTAINER_STACK_SIZE: Stack size in the container.
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_CONTAINER_GRAPH_POS: Graph Position
|
||||||
|
* APM_CONT_GRAPH_POS_STREAM = 1,
|
||||||
|
* APM_CONT_GRAPH_POS_PER_STR_PER_DEV = 2,
|
||||||
|
* APM_CONT_GRAPH_POS_STR_DEV = 3,
|
||||||
|
* APM_CONT_GRAPH_POS_GLOBAL_DEV = 4
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_CONTAINER_PROC_DOMAIN: Processor domain of container
|
||||||
|
* APM_PROC_DOMAIN_ID_MDSP = 1,
|
||||||
|
* APM_PROC_DOMAIN_ID_ADSP = 2,
|
||||||
|
* APM_PROC_DOMAIN_ID_SDSP = 4,
|
||||||
|
* APM_PROC_DOMAIN_ID_CDSP = 5
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_ID: Module ID
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_INSTANCE_ID: Module Instance ID.
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_MAX_IP_PORTS: Module maximum input ports
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_MAX_OP_PORTS: Module maximum output ports.
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_IN_PORTS: Number of in ports
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_OUT_PORTS: Number of out ports.
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_SRC_OP_PORT_ID: Source module output port ID
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_DST_IN_PORT_ID: Destination module input port ID
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_HW_IF_IDX: Interface index types for I2S/LPAIF
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_HW_IF_TYPE: Interface type
|
||||||
|
* LPAIF = 0,
|
||||||
|
* LPAIF_RXTX = 1,
|
||||||
|
* LPAIF_WSA = 2,
|
||||||
|
* LPAIF_VA = 3,
|
||||||
|
* LPAIF_AXI = 4
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_FMT_INTERLEAVE: PCM Interleaving
|
||||||
|
* PCM_INTERLEAVED = 1,
|
||||||
|
* PCM_DEINTERLEAVED_PACKED = 2,
|
||||||
|
* PCM_DEINTERLEAVED_UNPACKED = 3
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_FMT_DATA: data format
|
||||||
|
* FIXED POINT = 1,
|
||||||
|
* IEC60958 PACKETIZED = 3,
|
||||||
|
* IEC60958 PACKETIZED NON LINEAR = 8,
|
||||||
|
* COMPR OVER PCM PACKETIZED = 7,
|
||||||
|
* IEC61937 PACKETIZED = 2,
|
||||||
|
* GENERIC COMPRESSED = 5
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_FMT_SAMPLE_RATE: sample rate
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_FMT_BIT_DEPTH: bit depth
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_SD_LINE_IDX: I2S serial data line idx
|
||||||
|
* I2S_SD0 = 1,
|
||||||
|
* I2S_SD1 = 2,
|
||||||
|
* I2S_SD2 = 3,
|
||||||
|
* I2S_SD3 = 4,
|
||||||
|
* I2S_QUAD01 = 5,
|
||||||
|
* I2S_QUAD23 = 6,
|
||||||
|
* I2S_6CHS = 7,
|
||||||
|
* I2S_8CHS = 8
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_WS_SRC: Word Select Source
|
||||||
|
* AR_I2S_WS_SRC_EXTERNAL = 0,
|
||||||
|
* AR_I2S_WS_SRC_INTERNAL = 1,
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_FRAME_SZ_FACTOR: Frame size factor
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_LOG_CODE: Log Module Code
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_LOG_TAP_POINT_ID: logging tap point of this module
|
||||||
|
*
|
||||||
|
* %AR_TKN_U32_MODULE_LOG_MODE: logging mode
|
||||||
|
* LOG_WAIT = 0,
|
||||||
|
* LOG_IMMEDIATELY = 1
|
||||||
|
*
|
||||||
|
* %AR_TKN_DAI_INDEX: dai index
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DAI Tokens */
|
||||||
|
#define AR_TKN_DAI_INDEX 1
|
||||||
|
/* SUB GRAPH Tokens */
|
||||||
|
#define AR_TKN_U32_SUB_GRAPH_INSTANCE_ID 2
|
||||||
|
#define AR_TKN_U32_SUB_GRAPH_PERF_MODE 3
|
||||||
|
#define AR_TKN_U32_SUB_GRAPH_DIRECTION 4
|
||||||
|
#define AR_TKN_U32_SUB_GRAPH_SCENARIO_ID 5
|
||||||
|
|
||||||
|
/* Container Tokens */
|
||||||
|
#define AR_TKN_U32_CONTAINER_INSTANCE_ID 100
|
||||||
|
#define AR_TKN_U32_CONTAINER_CAPABILITY_ID 101
|
||||||
|
#define AR_TKN_U32_CONTAINER_STACK_SIZE 102
|
||||||
|
#define AR_TKN_U32_CONTAINER_GRAPH_POS 103
|
||||||
|
#define AR_TKN_U32_CONTAINER_PROC_DOMAIN 104
|
||||||
|
|
||||||
|
/* Module Tokens */
|
||||||
|
#define AR_TKN_U32_MODULE_ID 200
|
||||||
|
#define AR_TKN_U32_MODULE_INSTANCE_ID 201
|
||||||
|
#define AR_TKN_U32_MODULE_MAX_IP_PORTS 202
|
||||||
|
#define AR_TKN_U32_MODULE_MAX_OP_PORTS 203
|
||||||
|
#define AR_TKN_U32_MODULE_IN_PORTS 204
|
||||||
|
#define AR_TKN_U32_MODULE_OUT_PORTS 205
|
||||||
|
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID 206
|
||||||
|
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID 207
|
||||||
|
#define AR_TKN_U32_MODULE_SRC_INSTANCE_ID 208
|
||||||
|
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID 209
|
||||||
|
|
||||||
|
|
||||||
|
#define AR_TKN_U32_MODULE_HW_IF_IDX 250
|
||||||
|
#define AR_TKN_U32_MODULE_HW_IF_TYPE 251
|
||||||
|
#define AR_TKN_U32_MODULE_FMT_INTERLEAVE 252
|
||||||
|
#define AR_TKN_U32_MODULE_FMT_DATA 253
|
||||||
|
#define AR_TKN_U32_MODULE_FMT_SAMPLE_RATE 254
|
||||||
|
#define AR_TKN_U32_MODULE_FMT_BIT_DEPTH 255
|
||||||
|
#define AR_TKN_U32_MODULE_SD_LINE_IDX 256
|
||||||
|
#define AR_TKN_U32_MODULE_WS_SRC 257
|
||||||
|
#define AR_TKN_U32_MODULE_FRAME_SZ_FACTOR 258
|
||||||
|
#define AR_TKN_U32_MODULE_LOG_CODE 259
|
||||||
|
#define AR_TKN_U32_MODULE_LOG_TAP_POINT_ID 260
|
||||||
|
#define AR_TKN_U32_MODULE_LOG_MODE 261
|
||||||
|
|
||||||
|
#endif /* __SND_AR_TOKENS_H__ */
|
||||||
@@ -101,6 +101,7 @@ config SND_SOC_QDSP6
|
|||||||
select SND_SOC_QDSP6_ROUTING
|
select SND_SOC_QDSP6_ROUTING
|
||||||
select SND_SOC_QDSP6_ASM
|
select SND_SOC_QDSP6_ASM
|
||||||
select SND_SOC_QDSP6_ASM_DAI
|
select SND_SOC_QDSP6_ASM_DAI
|
||||||
|
select SND_SOC_TOPOLOGY
|
||||||
select SND_SOC_QDSP6_APM
|
select SND_SOC_QDSP6_APM
|
||||||
help
|
help
|
||||||
To add support for MSM QDSP6 Soc Audio.
|
To add support for MSM QDSP6 Soc Audio.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
snd-q6dsp-common-objs := q6dsp-common.o q6dsp-lpass-ports.o q6dsp-lpass-clocks.o
|
snd-q6dsp-common-objs := q6dsp-common.o q6dsp-lpass-ports.o q6dsp-lpass-clocks.o
|
||||||
snd-q6apm-objs := q6apm.o audioreach.o
|
snd-q6apm-objs := q6apm.o audioreach.o topology.o
|
||||||
|
|
||||||
obj-$(CONFIG_SND_SOC_QDSP6_COMMON) += snd-q6dsp-common.o
|
obj-$(CONFIG_SND_SOC_QDSP6_COMMON) += snd-q6dsp-common.o
|
||||||
obj-$(CONFIG_SND_SOC_QDSP6_CORE) += q6core.o
|
obj-$(CONFIG_SND_SOC_QDSP6_CORE) += q6core.o
|
||||||
|
|||||||
@@ -693,6 +693,9 @@ void *audioreach_alloc_pkt(int payload_size, uint32_t opcode,
|
|||||||
void *audioreach_alloc_graph_pkt(struct q6apm *apm,
|
void *audioreach_alloc_graph_pkt(struct q6apm *apm,
|
||||||
struct list_head *sg_list,
|
struct list_head *sg_list,
|
||||||
int graph_id);
|
int graph_id);
|
||||||
|
/* Topology specific */
|
||||||
|
int audioreach_tplg_init(struct snd_soc_component *component);
|
||||||
|
|
||||||
/* Module specific */
|
/* Module specific */
|
||||||
void audioreach_graph_free_buf(struct q6apm_graph *graph);
|
void audioreach_graph_free_buf(struct q6apm_graph *graph);
|
||||||
int audioreach_map_memory_regions(struct q6apm_graph *graph,
|
int audioreach_map_memory_regions(struct q6apm_graph *graph,
|
||||||
|
|||||||
@@ -694,7 +694,7 @@ EXPORT_SYMBOL_GPL(q6apm_graph_flush);
|
|||||||
|
|
||||||
static int q6apm_audio_probe(struct snd_soc_component *component)
|
static int q6apm_audio_probe(struct snd_soc_component *component)
|
||||||
{
|
{
|
||||||
return 0;
|
return audioreach_tplg_init(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void q6apm_audio_remove(struct snd_soc_component *component)
|
static void q6apm_audio_remove(struct snd_soc_component *component)
|
||||||
|
|||||||
1113
sound/soc/qcom/qdsp6/topology.c
Normal file
1113
sound/soc/qcom/qdsp6/topology.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user