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:
Liam Girdwood 2017-07-06 16:39:29 +01:00
parent 9b241ae555
commit b8c9db4f6b
6 changed files with 547 additions and 0 deletions

24
topology/sof/pipe-dai.m4 Normal file
View File

@ -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)
]
}

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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)
}
}

75
topology/sof/pipe-tone.m4 Normal file
View File

@ -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)

38
topology/sof/tokens.m4 Normal file
View File

@ -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"
}