Skip to content

Commit c4dca55

Browse files
macchianabonislawski
authored andcommitted
topology1: sof-adl-rt1019-rt5682: enable DTS playback support
Create a dts demux pipeline for Speaker playback and echoRef. Headphone dts playback can reuse the existing pipeline. Signed-off-by: Mac Chiang <mac.chiang@intel.com>
1 parent d9499cf commit c4dca55

File tree

3 files changed

+139
-2
lines changed

3 files changed

+139
-2
lines changed

tools/topology/topology1/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ set(TPLGS
172172
"sof-tgl-max98357a-rt5682\;sof-adl-rt5682\;-DNO_AMP\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DDYNAMIC=1"
173173
"sof-tgl-max98357a-rt5682\;sof-adl-rt1019-rt5682\;-DCODEC=RT1019\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DAMP_SSP=1\;-DSPK_MIC_PERIOD_US=10000\;-DBT_OFFLOAD\;-DDYNAMIC=1"
174174
"sof-tgl-max98357a-rt5682\;sof-adl-rt1019-rt5682-waves\;-DCODEC=RT1019\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DAMP_SSP=1\;-DWAVES\;-DBT_OFFLOAD"
175+
"sof-tgl-max98357a-rt5682\;sof-adl-rt1019-rt5682-dts\;-DCODEC=RT1019\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DAMP_SSP=1\;-DDTS=`DTS'\;-DBT_OFFLOAD"
175176
"sof-tgl-max98357a-rt5682\;sof-adl-cs35l41\;-DCODEC=CS35L41\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_ssp_amp\;-DAMP_SSP=1\;-DBT_OFFLOAD\;-DNO_HEADPHONE\;-DDYNAMIC=1"
176177
"sof-tgl-max98357a-rt5682\;sof-adl-cs35l41-waves\;-DCODEC=CS35L41\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_ssp_amp\;-DAMP_SSP=1\;-DBT_OFFLOAD\;-DNO_HEADPHONE\;-DWAVES\;-DNOHOTWORD\;-DNO16KDMIC"
177178
"sof-tgl-max98357a-rt5682\;sof-adl-cs35l41-google-aec-waves\;-DCODEC=CS35L41\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_ssp_amp\;-DAMP_SSP=1\;-DBT_OFFLOAD\;-DNO_HEADPHONE\;-DGOOGLE_RTC_AUDIO_PROCESSING\;-DWAVES\;-DNOHOTWORD\;-DNO16KDMIC\;-DSPK_MIC_PERIOD_US=10000"

tools/topology/topology1/sof-tgl-max98357a-rt5682.m4

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ PIPELINE_PCM_ADD(
223223
sof/pipe-demux-eq-iir-playback.m4),
224224
ifdef(`WAVES', sof/pipe-waves-codec-demux-playback.m4,
225225
ifdef(`DRC_EQ', sof/pipe-drc-eq-volume-demux-playback.m4,
226-
sof/pipe-volume-demux-playback.m4))),
226+
ifdef(`DTS', sof/pipe-eq-iir-dts-codec-demux-playback.m4,
227+
sof/pipe-volume-demux-playback.m4)))),
227228
1, 0, ifdef(`4CH_PASSTHROUGH', `4', `2'), s32le,
228229
SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE,
229230
48000, 48000, 48000)
@@ -237,7 +238,8 @@ ifdef(`WAVES', `ifdef(`WAVES_SPK_ONLY', `', `define(`WAVES_HEADPHONE')')', `')
237238
# Schedule 48 frames per 1000us deadline with priority 0 on core 0
238239
define(`ENDPOINT_NAME', `Headphones')
239240
PIPELINE_PCM_ADD(
240-
ifdef(`WAVES_HEADPHONE', sof/pipe-waves-codec-playback.m4, sof/pipe-volume-playback.m4),
241+
ifdef(`WAVES_HEADPHONE', sof/pipe-waves-codec-playback.m4,
242+
ifdef(`DTS', sof/pipe-eq-iir-dts-codec-playback.m4, sof/pipe-volume-playback.m4)),
241243
2, 1, 2, s32le,
242244
1000, 0, 0,
243245
48000, 48000, 48000)
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Demux Volume Pipeline with DTS codec and PCM
2+
#
3+
# Pipeline Endpoints for connection are :-
4+
#
5+
# Playback Demux
6+
# B3 (DAI buffer)
7+
8+
#
9+
# host PCM_P --> B0 --> EQ 0 --> B1 --> DTS codec --> B2 --> Demux --> B3 --> sink DAI0
10+
# |
11+
# pipeline --> DAI
12+
13+
# Include topology builder
14+
include(`utils.m4')
15+
include(`buffer.m4')
16+
include(`pcm.m4')
17+
include(`dai.m4')
18+
include(`pipeline.m4')
19+
include(`codec_adapter.m4')
20+
include(`bytecontrol.m4')
21+
include(`eq_iir.m4')
22+
include(`muxdemux.m4')
23+
24+
#
25+
# Controls
26+
#
27+
28+
#
29+
# DTS Codec
30+
#
31+
32+
include(`dts_codec_adapter.m4')
33+
34+
#
35+
# IIR EQ
36+
#
37+
define(DEF_EQIIR_COEF, concat(`eqiir_coef_', PIPELINE_ID))
38+
define(DEF_EQIIR_PRIV, concat(`eqiir_priv_', PIPELINE_ID))
39+
40+
# define filter. eq_iir_coef_flat.m4 is set by default
41+
ifdef(`PIPELINE_FILTER1', , `define(PIPELINE_FILTER1, eq_iir_coef_flat.m4)')
42+
include(PIPELINE_FILTER1)
43+
44+
# EQ Bytes control with max value of 255
45+
C_CONTROLBYTES(DEF_EQIIR_COEF, PIPELINE_ID,
46+
CONTROLBYTES_OPS(bytes, 258 binds the mixer control to bytes get/put handlers, 258, 258),
47+
CONTROLBYTES_EXTOPS(258 binds the mixer control to bytes get/put handlers, 258, 258),
48+
, , ,
49+
CONTROLBYTES_MAX(, 2048),
50+
,
51+
DEF_EQIIR_PRIV)
52+
53+
# demux Bytes control with max value of 255
54+
C_CONTROLBYTES(concat(`DEMUX', PIPELINE_ID), PIPELINE_ID,
55+
CONTROLBYTES_OPS(bytes, 258 binds the mixer control to bytes get/put handlers, 258, 258),
56+
CONTROLBYTES_EXTOPS(258 binds the mixer control to bytes get/put handlers, 258, 258),
57+
, , ,
58+
CONTROLBYTES_MAX(, 304),
59+
, concat(`demux_priv_', PIPELINE_ID))
60+
61+
#
62+
# Components and Buffers
63+
#
64+
65+
ifdef(`CA_SCHEDULE_CORE',`', `define(`CA_SCHEDULE_CORE', `SCHEDULE_CORE')')
66+
67+
# Host "Playback with codec adapter" PCM
68+
# with DAI_PERIODS sink and 0 source periods
69+
W_PCM_PLAYBACK(PCM_ID, Passthrough Playback, DAI_PERIODS, 0, SCHEDULE_CORE)
70+
71+
W_CODEC_ADAPTER(0, PIPELINE_FORMAT, DAI_PERIODS, DAI_PERIODS, CA_SCHEDULE_CORE,
72+
LIST(` ', "CA_SETUP_CONTROLBYTES_NAME_PIPE"))
73+
74+
# "EQ 0" has 2 sink period and 2 source periods
75+
W_EQ_IIR(0, PIPELINE_FORMAT, 2, 2, SCHEDULE_CORE,
76+
LIST(` ', "DEF_EQIIR_COEF"))
77+
78+
# Mux 0 has 2 sink and source periods.
79+
W_MUXDEMUX(0, 1, PIPELINE_FORMAT, 2, 2, SCHEDULE_CORE,
80+
LIST(` ', concat(`DEMUX', PIPELINE_ID)))
81+
82+
# Playback Buffers
83+
W_BUFFER(0, COMP_BUFFER_SIZE(2,
84+
COMP_SAMPLE_SIZE(PIPELINE_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
85+
PLATFORM_HOST_MEM_CAP)
86+
W_BUFFER(1, COMP_BUFFER_SIZE(2,
87+
COMP_SAMPLE_SIZE(PIPELINE_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
88+
PLATFORM_HOST_MEM_CAP)
89+
W_BUFFER(2, COMP_BUFFER_SIZE(DAI_PERIODS,
90+
COMP_SAMPLE_SIZE(DAI_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
91+
PLATFORM_DAI_MEM_CAP)
92+
W_BUFFER(3, COMP_BUFFER_SIZE(DAI_PERIODS,
93+
COMP_SAMPLE_SIZE(DAI_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
94+
PLATFORM_DAI_MEM_CAP)
95+
96+
#
97+
# Pipeline Graph
98+
#
99+
# host PCM_P --> B0 --> EQ 0 --> B1 --> CODEC_ADAPTER -> B2 --> DEMUX --> B3 --> sink DAI0
100+
101+
P_GRAPH(pipe-pass-playback-PIPELINE_ID, PIPELINE_ID,
102+
LIST(` ',
103+
`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
104+
`dapm(N_EQ_IIR(0), N_BUFFER(0))',
105+
`dapm(N_BUFFER(1), N_EQ_IIR(0))',
106+
`dapm(N_CODEC_ADAPTER(0), N_BUFFER(1))',
107+
`dapm(N_BUFFER(2), N_CODEC_ADAPTER(0))'
108+
`dapm(N_MUXDEMUX(0), N_BUFFER(2))'
109+
`dapm(N_BUFFER(3), N_MUXDEMUX(0))'
110+
))
111+
112+
#
113+
# Pipeline Source and Sinks
114+
#
115+
indir(`define', concat(`PIPELINE_SOURCE_', PIPELINE_ID), N_BUFFER(3))
116+
indir(`define', concat(`PIPELINE_DEMUX_', PIPELINE_ID), N_MUXDEMUX(0))
117+
indir(`define', concat(`PIPELINE_PCM_', PIPELINE_ID), Passthrough Playback PCM_ID)
118+
119+
#
120+
# PCM Configuration
121+
#
122+
123+
PCM_CAPABILITIES(Passthrough Playback PCM_ID, CAPABILITY_FORMAT_NAME(PIPELINE_FORMAT), PCM_MIN_RATE, PCM_MAX_RATE, 2, PIPELINE_CHANNELS, 2, 16, 192, 16384, 65536, 65536)
124+
125+
undefine(`CA_SETUP_CONTROLBYTES_NAME_PIPE')
126+
undefine(`CA_SETUP_PARAMS')
127+
128+
undefine(`CA_SCHEDULE_CORE')
129+
undefine(`CA_SETUP_CONTROLBYTES_NAME')
130+
undefine(`CA_SETUP_CONTROLBYTES_MAX')
131+
undefine(`CA_SETUP_CONTROLBYTES')
132+
133+
undefine(`DEF_EQIIR_COEF')
134+
undefine(`DEF_EQIIR_PRIV')

0 commit comments

Comments
 (0)