topology: Add initial SOF topology pipeline definitions
Add pipeline and token definitions to allow creation of SOF topology files. The files define standard pipelines and tokens that can be reused to build machine specific topology files. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
This commit is contained in:
parent
9b241ae555
commit
b8c9db4f6b
|
@ -0,0 +1,24 @@
|
|||
# DAI connector
|
||||
|
||||
# Include topology builder
|
||||
include(`local.m4')
|
||||
|
||||
#
|
||||
# DAI definitions
|
||||
#
|
||||
W_DAI_OUT(DAI_SNAME, dai0p_plat_conf)
|
||||
W_DAI_IN(DAI_SNAME, dai0c_plat_conf)
|
||||
|
||||
#D_DAI(0, 1, 1)
|
||||
|
||||
#
|
||||
# Graph connections to pipelines
|
||||
|
||||
SectionGraph.STR(DAI_NAME) {
|
||||
index "0"
|
||||
|
||||
lines [
|
||||
dapm(N_DAI_IN, OUT_BUF)
|
||||
dapm(IN_BUF, N_DAI_OUT)
|
||||
]
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
# Low Latency Pipeline and PCM
|
||||
#
|
||||
# Pipeline Endpoints for connection are :-
|
||||
#
|
||||
# host PCM_C <--B5-- volume(0C) <--B4-- source DAI0
|
||||
|
||||
# Include topology builder
|
||||
include(`local.m4')
|
||||
|
||||
#
|
||||
# Controls
|
||||
#
|
||||
|
||||
SectionControlMixer.STR(PCM PCM_ID Capture Volume) {
|
||||
|
||||
# control belongs to this index group
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# Channel register and shift for Front Left/Right
|
||||
channel."FL" {
|
||||
reg "0"
|
||||
shift "0"
|
||||
}
|
||||
channel."FR" {
|
||||
reg "0"
|
||||
shift "1"
|
||||
}
|
||||
|
||||
# control uses bespoke driver get/put/info ID 0
|
||||
ops."ctl" {
|
||||
info "volsw"
|
||||
get "256"
|
||||
put "256"
|
||||
}
|
||||
|
||||
# TLV 40 steps from -90dB to +20dB for 3dB
|
||||
max "40"
|
||||
invert "false"
|
||||
tlv "vtlv_m90s3"
|
||||
}
|
||||
|
||||
#
|
||||
# Components and Buffers
|
||||
#
|
||||
|
||||
W_PCM_CAPTURE(Low Latency Capture)
|
||||
W_PGA(Capture Volume)
|
||||
W_BUFFER(0, BUF_INT_SIZE)
|
||||
W_BUFFER(1, BUF_PCM_SIZE)
|
||||
|
||||
#
|
||||
# Pipeline Graph
|
||||
#
|
||||
# host PCM <--B1-- volume( <--B0-- source DAI0
|
||||
|
||||
SectionGraph."pipe-ll-capture-PIPELINE_ID" {
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
lines [
|
||||
dapm(N_PCM, N_BUFFER(1))
|
||||
dapm(N_BUFFER(1), N_PGA(Capture Volume))
|
||||
dapm(N_PGA(Capture Volume), N_BUFFER(0))
|
||||
]
|
||||
}
|
||||
|
||||
#
|
||||
# Pipeline Configuration.
|
||||
#
|
||||
|
||||
W_PIPELINE(N_PGA(Capture Volume), SCHEDULE_DEADLINE, pipe_ll_schedule_plat)
|
||||
|
||||
#
|
||||
# PCM Configuration
|
||||
#
|
||||
|
||||
SectionPCMCapabilities.STR(Low Latency Capture PCM_ID) {
|
||||
|
||||
formats "S24_LE,S16_LE"
|
||||
rate_min "48000"
|
||||
rate_max "48000"
|
||||
channels_min "2"
|
||||
channels_max "4"
|
||||
periods_min "2"
|
||||
periods_max "4"
|
||||
period_size_min "192"
|
||||
period_size_max "16384"
|
||||
buffer_size_min "384"
|
||||
buffer_size_max "65536"
|
||||
}
|
||||
|
||||
# PCM Low Latency Capture
|
||||
SectionPCM.STR(PCM PCM_ID) {
|
||||
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# used for binding to the PCM
|
||||
id STR(PCM_ID)
|
||||
|
||||
dai.STR(Low Latency Capture PCM_ID) {
|
||||
id STR(PCM_ID)
|
||||
}
|
||||
|
||||
pcm."capture" {
|
||||
|
||||
capabilities STR(Low Latency Capture PCM_ID)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
# Low Latency Pipeline
|
||||
#
|
||||
# Low Latency Playback PCM mixed into single sink pipe.
|
||||
# Low latency Capture PCM.
|
||||
#
|
||||
# Pipeline Endpoints for connection are :-
|
||||
#
|
||||
# LL Playback Mixer (Mixer)
|
||||
# LL Capture Volume B4 (DAI buffer)
|
||||
# LL Playback Volume B3 (DAI buffer)
|
||||
#
|
||||
#
|
||||
# host PCM_P --B0--> volume(0P) --B1--+
|
||||
# |--ll mixer(M) --B2--> volume(LL) ---B3--> sink DAI0
|
||||
# pipeline n+1 >---+
|
||||
# |
|
||||
# pipeline n+2 >---+
|
||||
# |
|
||||
# pipeline n+3 >---+ .....etc....more pipes can be mixed here
|
||||
#
|
||||
|
||||
# Include topology builder
|
||||
include(`local.m4')
|
||||
|
||||
#
|
||||
# Controls
|
||||
#
|
||||
|
||||
SectionControlMixer.STR(PCM PCM_ID Playback Volume) {
|
||||
|
||||
# control belongs to this index group
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# Channel register and shift for Front Left/Right
|
||||
channel."FL" {
|
||||
reg "0"
|
||||
shift "0"
|
||||
}
|
||||
channel."FR" {
|
||||
reg "0"
|
||||
shift "1"
|
||||
}
|
||||
|
||||
# control uses bespoke driver get/put/info ID 0
|
||||
ops."ctl" {
|
||||
info "volsw"
|
||||
get "256"
|
||||
put "256"
|
||||
}
|
||||
|
||||
# TLV 32 steps from -90dB to +6dB for 3dB
|
||||
max "32"
|
||||
invert "false"
|
||||
tlv "vtlv_m90s3"
|
||||
}
|
||||
|
||||
SectionControlMixer.STR(Master Playback Volume) {
|
||||
|
||||
# control belongs to this index group
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# Channel register and shift for Front Left/Right
|
||||
channel."FL" {
|
||||
reg "1"
|
||||
shift "0"
|
||||
}
|
||||
channel."FR" {
|
||||
reg "1"
|
||||
shift "1"
|
||||
}
|
||||
|
||||
# control uses bespoke driver get/put/info ID 0
|
||||
ops."ctl" {
|
||||
info "volsw"
|
||||
get "256"
|
||||
put "256"
|
||||
}
|
||||
|
||||
# TLV 32 steps from -90dB to +6dB for 3dB
|
||||
max "32"
|
||||
invert "false"
|
||||
tlv "vtlv_m90s3"
|
||||
}
|
||||
|
||||
#
|
||||
# Components and Buffers
|
||||
#
|
||||
|
||||
W_PCM_PLAYBACK(Low Latency Playback)
|
||||
W_PGA(Playback Volume)
|
||||
W_PGA(Mixer Volume)
|
||||
W_MIXER(0)
|
||||
W_BUFFER(0, BUF_PCM_SIZE)
|
||||
W_BUFFER(1, BUF_INT_SIZE)
|
||||
W_BUFFER(2, BUF_INT_SIZE)
|
||||
W_BUFFER(3, BUF_INT_SIZE)
|
||||
|
||||
#
|
||||
# Pipeline Graph
|
||||
#
|
||||
# host PCM_P --B0--> volume(0P) --B1--+
|
||||
# |--ll mixer(M) --B2--> volume(LL) ---B3--> sink DAI0
|
||||
# pipeline n+1 >---+
|
||||
# |
|
||||
# pipeline n+2 >---+
|
||||
# |
|
||||
# pipeline n+3 >---+ .....etc....more pipes can be mixed here
|
||||
#
|
||||
|
||||
SectionGraph."pipe-ll-playback-PIPELINE_ID" {
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
lines [
|
||||
dapm(N_BUFFER(0), N_PCM)
|
||||
dapm(N_PGA(Playback Volume), N_BUFFER(0))
|
||||
dapm(N_BUFFER(1), N_PGA(Playback Volume))
|
||||
dapm(N_MIXER(0), N_BUFFER(1))
|
||||
dapm(N_BUFFER(2), N_MIXER(0))
|
||||
dapm(N_PGA(Mixer Volume), N_BUFFER(2))
|
||||
dapm(N_BUFFER(3), N_PGA(Mixer Volume))
|
||||
]
|
||||
}
|
||||
|
||||
#
|
||||
# Pipeline Configuration.
|
||||
#
|
||||
|
||||
W_PIPELINE(N_PGA(Mixer Volume), SCHEDULE_DEADLINE, pipe_ll_schedule_plat)
|
||||
|
||||
#
|
||||
# PCM Configuration
|
||||
#
|
||||
|
||||
# PCM capabilities supported by FW
|
||||
SectionPCMCapabilities.STR(Low Latency Playback PCM_ID) {
|
||||
|
||||
formats "S24_LE,S16_LE"
|
||||
rate_min "48000"
|
||||
rate_max "48000"
|
||||
channels_min "2"
|
||||
channels_max "2"
|
||||
periods_min "2"
|
||||
periods_max "4"
|
||||
period_size_min "192"
|
||||
period_size_max "16384"
|
||||
buffer_size_min "384"
|
||||
buffer_size_max "65536"
|
||||
}
|
||||
|
||||
# PCM Low Latency Playback
|
||||
SectionPCM.STR(PCM PCM_ID) {
|
||||
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# used for binding to the PCM
|
||||
id STR(PCM_ID)
|
||||
|
||||
dai.STR(Low Latency Playback PCM_ID) {
|
||||
id STR(PCM_ID)
|
||||
}
|
||||
|
||||
# Playback and Capture Configuration
|
||||
pcm."playback" {
|
||||
|
||||
capabilities STR(Low Latency Playback PCM_ID)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
# Low Power PCM Media Pipeline
|
||||
#
|
||||
# Low power PCM media playback with SRC and volume.
|
||||
#
|
||||
# Pipeline Endpoints for connection are :-
|
||||
#
|
||||
# host PCM_P --B0--> volume(0P) --B1--> SRC -- B2 --> Endpoint Pipeline
|
||||
#
|
||||
|
||||
# Include topology builder
|
||||
include(`local.m4')
|
||||
|
||||
#
|
||||
# Controls
|
||||
#
|
||||
|
||||
SectionControlMixer.STR(PCM PCM_ID Playback Volume) {
|
||||
|
||||
# control belongs to this index group
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# Channel register and shift for Front Left/Right
|
||||
channel."FL" {
|
||||
reg "1"
|
||||
shift "0"
|
||||
}
|
||||
channel."FR" {
|
||||
reg "1"
|
||||
shift "1"
|
||||
}
|
||||
|
||||
# control uses bespoke driver get/put/info ID 0
|
||||
ops."ctl" {
|
||||
info "volsw"
|
||||
get "256"
|
||||
put "256"
|
||||
}
|
||||
|
||||
# TLV 32 steps from -90dB to +6dB for 3dB
|
||||
max "32"
|
||||
invert "false"
|
||||
tlv "vtlv_m90s3"
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# SRC Configuration
|
||||
#
|
||||
|
||||
SectionVendorTuples."media_src_tokens" {
|
||||
tokens "sof_src_tokens"
|
||||
|
||||
tuples."word" {
|
||||
SOF_TKN_SRC_RATE_IN 16000
|
||||
SOF_TKN_SRC_RATE_IN 44100
|
||||
SOF_TKN_SRC_RATE_OUT 48000
|
||||
}
|
||||
}
|
||||
|
||||
SectionData."media_src_conf" {
|
||||
tuples "media_src_tokens"
|
||||
}
|
||||
|
||||
#
|
||||
# Components and Buffers
|
||||
#
|
||||
|
||||
W_PCM_PLAYBACK(Media Playback)
|
||||
W_PGA(Playback Volume)
|
||||
W_SRC(0, media_src_conf)
|
||||
W_BUFFER(0, BUF_PCM_SIZE)
|
||||
W_BUFFER(1, BUF_INT_SIZE)
|
||||
W_BUFFER(2, BUF_INT_SIZE)
|
||||
|
||||
#
|
||||
# Pipeline Graph
|
||||
#
|
||||
# PCM --B0--> volume --B1--> SRC --> B2 --> Endpoint Pipeline
|
||||
#
|
||||
|
||||
SectionGraph."pipe-media-PIPELINE_ID" {
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
lines [
|
||||
dapm(N_BUFFER(0), Media Playback PCM_ID)
|
||||
dapm(N_PGA(Playback Volume), N_BUFFER(0))
|
||||
dapm(N_BUFFER(1), N_PGA(Playback Volume))
|
||||
dapm(N_SRC(0), N_BUFFER(1))
|
||||
dapm(N_BUFFER(2), N_SRC(0))
|
||||
]
|
||||
}
|
||||
|
||||
#
|
||||
# Pipeline Configuration.
|
||||
#
|
||||
|
||||
W_PIPELINE(N_SRC(0), SCHEDULE_DEADLINE, pipe_media_schedule_plat)
|
||||
|
||||
#
|
||||
# PCM Configuration
|
||||
#
|
||||
|
||||
# PCM capabilities supported by FW
|
||||
|
||||
SectionPCMCapabilities.STR(Media Playback PCM_ID) {
|
||||
formats "S24_LE,S16_LE"
|
||||
rate_min "8000"
|
||||
rate_max "192000"
|
||||
channels_min "2"
|
||||
channels_max "2"
|
||||
periods_min "2"
|
||||
periods_max "32"
|
||||
period_size_min "4096"
|
||||
period_size_max "262144"
|
||||
buffer_size_min "8192"
|
||||
buffer_size_max "8388608"
|
||||
}
|
||||
|
||||
# PCM Low Latency Playback and Capture
|
||||
SectionPCM.STR(PCM PCM_ID) {
|
||||
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# used for binding to the PCM
|
||||
id STR(PCM_ID)
|
||||
|
||||
dai.STR(Media Playback PCM_ID) {
|
||||
id STR(PCM_ID)
|
||||
}
|
||||
|
||||
# Playback and Capture Configuration
|
||||
pcm."playback" {
|
||||
|
||||
capabilities STR(Media Playback PCM_ID)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
# Tone Generator
|
||||
#
|
||||
# Multi Frequency Tone Generator.
|
||||
#
|
||||
# Pipeline Endpoints for connection are :-
|
||||
#
|
||||
# Tone --B0--> volume --B1--> Endpoint Pipeline
|
||||
#
|
||||
|
||||
# Include topology builder
|
||||
include(`local.m4')
|
||||
|
||||
#
|
||||
# Controls
|
||||
#
|
||||
|
||||
SectionControlMixer.STR(Tone Volume PIPELINE_ID) {
|
||||
|
||||
# control belongs to this index group
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
# Channel register and shift for Front Left/Right
|
||||
channel."FL" {
|
||||
reg "1"
|
||||
shift "0"
|
||||
}
|
||||
channel."FR" {
|
||||
reg "1"
|
||||
shift "1"
|
||||
}
|
||||
|
||||
# control uses bespoke driver get/put/info ID 0
|
||||
ops."ctl" {
|
||||
info "volsw"
|
||||
get "256"
|
||||
put "256"
|
||||
}
|
||||
|
||||
# TLV 32 steps from -90dB to +6dB for 3dB
|
||||
max "32"
|
||||
invert "false"
|
||||
tlv "vtlv_m90s3"
|
||||
}
|
||||
|
||||
#
|
||||
# Components and Buffers
|
||||
#
|
||||
|
||||
W_TONE(0)
|
||||
W_PGA(Tone Volume)
|
||||
W_BUFFER(0, BUF_INT_SIZE)
|
||||
W_BUFFER(1, BUF_INT_SIZE)
|
||||
|
||||
|
||||
#
|
||||
# Pipeline Graph
|
||||
#
|
||||
# Tone --B0--> volume --B1--> Endpoint Pipeline
|
||||
#
|
||||
|
||||
SectionGraph."pipe-tone-PIPELINE_ID" {
|
||||
index STR(PIPELINE_ID)
|
||||
|
||||
lines [
|
||||
dapm(N_BUFFER(0), N_TONE(0))
|
||||
dapm(N_PGA(Tone Volume), N_BUFFER(0))
|
||||
dapm(N_BUFFER(1), N_PGA(Tone Volume))
|
||||
]
|
||||
}
|
||||
|
||||
#
|
||||
# Pipeline Configuration.
|
||||
#
|
||||
|
||||
W_PIPELINE(N_TONE(0), SCHEDULE_DEADLINE, pipe_tone_schedule_plat)
|
|
@ -0,0 +1,38 @@
|
|||
|
||||
#
|
||||
# SOF Tokens for differentiation.
|
||||
#
|
||||
# Differentiation can be done at the platform and machine level.
|
||||
#
|
||||
# Tokens are GUIDs
|
||||
|
||||
# TODO: pre-process this with UAPI headers GNU cpp.
|
||||
|
||||
|
||||
SectionVendorTokens."sof_buffer_tokens" {
|
||||
SOF_TKN_BUF_SIZE "100"
|
||||
SOF_TKN_BUF_PRELOAD "101"
|
||||
}
|
||||
|
||||
SectionVendorTokens."sof_dai_tokens" {
|
||||
SOF_TKN_DAI_DMAC "151"
|
||||
SOF_TKN_DAI_DMAC_CHAN "152"
|
||||
SOF_TKN_DAI_DMAC_CONFIG "153"
|
||||
}
|
||||
|
||||
SectionVendorTokens."sof_sched_tokens" {
|
||||
SOF_TKN_SCHED_DEADLINE "200"
|
||||
SOF_TKN_SCHED_PRIORITY "201"
|
||||
SOF_TKN_SCHED_MIPS "202"
|
||||
SOF_TKN_SCHED_CORE "203"
|
||||
}
|
||||
|
||||
SectionVendorTokens."sof_volume_tokens" {
|
||||
SOF_TKN_VOLUME_RAMP_STEP_TYPE "250"
|
||||
SOF_TKN_VOLUME_RAMP_STEP_MS "251"
|
||||
}
|
||||
|
||||
SectionVendorTokens."sof_src_tokens" {
|
||||
SOF_TKN_SRC_RATE_IN "300"
|
||||
SOF_TKN_SRC_RATE_OUT "301"
|
||||
}
|
Loading…
Reference in New Issue