1#
2# Topology for Tigerlake with CODEC amp + rt5682 codec + DMIC + 4 HDMI
3#
4
5# Include topology builder
6include(`utils.m4')
7include(`dai.m4')
8include(`pipeline.m4')
9include(`ssp.m4')
10include(`muxdemux.m4')
11include(`hda.m4')
12
13# Include TLV library
14include(`common/tlv.m4')
15
16# Include Token library
17include(`sof/tokens.m4')
18
19# Include Tigerlake DSP configuration
20include(`platform/intel/'PLATFORM`.m4')
21include(`platform/intel/dmic.m4')
22
23# Include machine driver definitions
24include(`platform/intel/intel-boards.m4')
25
26DEBUG_START
27
28#
29# Check option conflicts
30#
31ifdef(`2CH_2WAY', `ifdef(`4CH_PASSTHROUGH', `fatal_error(note: 2CH_2WAY and 4CH_PASSTHROUGH are mutually exclusive)')')
32
33#
34# Define the demux configure
35#
36dnl Configure demux
37dnl name, pipeline_id, routing_matrix_rows
38dnl Diagonal 1's in routing matrix mean that every input channel is
39dnl copied to corresponding output channels in all output streams.
40dnl I.e. row index is the input channel, 1 means it is copied to
41dnl corresponding output channel (column index), 0 means it is discarded.
42dnl There's a separate matrix for all outputs.
43define(matrix1, `ROUTE_MATRIX(1,
44			     `BITS_TO_BYTE(1, 0, 0 ,0 ,0 ,0 ,0 ,0)',
45			     `BITS_TO_BYTE(0, 1, 0 ,0 ,0 ,0 ,0 ,0)',
46			     `BITS_TO_BYTE(0, 0, 1 ,0 ,0 ,0 ,0 ,0)',
47			     `BITS_TO_BYTE(0, 0, 0 ,1 ,0 ,0 ,0 ,0)',
48			     `BITS_TO_BYTE(0, 0, 0 ,0 ,1 ,0 ,0 ,0)',
49			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,1 ,0 ,0)',
50			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,1 ,0)',
51			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,1)')')
52
53define(matrix2, `ROUTE_MATRIX(9,
54			     `BITS_TO_BYTE(1, 0, 0 ,0 ,0 ,0 ,0 ,0)',
55			     `BITS_TO_BYTE(0, 1, 0 ,0 ,0 ,0 ,0 ,0)',
56			     `BITS_TO_BYTE(0, 0, 1 ,0 ,0 ,0 ,0 ,0)',
57			     `BITS_TO_BYTE(0, 0, 0 ,1 ,0 ,0 ,0 ,0)',
58			     `BITS_TO_BYTE(0, 0, 0 ,0 ,1 ,0 ,0 ,0)',
59			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,1 ,0 ,0)',
60			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,1 ,0)',
61			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,1)')')
62
63define(matrix3, `ROUTE_MATRIX(1,
64			     `BITS_TO_BYTE(1, 0, 0 ,0 ,0 ,0 ,0 ,0)',
65			     `BITS_TO_BYTE(0, 1, 0 ,0 ,0 ,0 ,0 ,0)',
66			     `BITS_TO_BYTE(1, 0, 0 ,0 ,0 ,0 ,0 ,0)',
67			     `BITS_TO_BYTE(0, 1, 0 ,0 ,0 ,0 ,0 ,0)',
68			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,0)',
69			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,0)',
70			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,0)',
71			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,0)')')
72
73define(matrix4, `ROUTE_MATRIX(10,
74			     `BITS_TO_BYTE(1, 0, 0 ,0 ,0 ,0 ,0 ,0)',
75			     `BITS_TO_BYTE(0, 1, 0 ,0 ,0 ,0 ,0 ,0)',
76			     `BITS_TO_BYTE(0, 0, 1 ,0 ,0 ,0 ,0 ,0)',
77			     `BITS_TO_BYTE(0, 0, 0 ,1 ,0 ,0 ,0 ,0)',
78			     `BITS_TO_BYTE(0, 0, 0 ,0 ,1 ,0 ,0 ,0)',
79			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,1 ,0 ,0)',
80			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,1 ,0)',
81			     `BITS_TO_BYTE(0, 0, 0 ,0 ,0 ,0 ,0 ,1)')')
82
83dnl name, num_streams, route_matrix list
84ifdef(`NO_AMP',`',`
85ifdef(`GOOGLE_RTC_AUDIO_PROCESSING',
86	`ifdef(`2CH_2WAY',
87	`MUXDEMUX_CONFIG(demux_priv_1, 2, LIST_NONEWLINE(`', `matrix3,', `matrix4'))',
88	`MUXDEMUX_CONFIG(demux_priv_1, 3, LIST_NONEWLINE(`', `matrix1,', `matrix2,', `matrix4'))')',
89	`ifdef(`2CH_2WAY',
90	`MUXDEMUX_CONFIG(demux_priv_1, 1, LIST_NONEWLINE(`', `matrix3'))',
91	`MUXDEMUX_CONFIG(demux_priv_1, 2, LIST_NONEWLINE(`', `matrix1,', `matrix2'))')'
92)')
93
94#
95# Define the pipelines
96#
97ifdef(`2CH_2WAY',`
98ifdef(`WAVES',`
99# PCM0 --> waves --> demux(2to4-ch) --> eq_iir --> SSP$AMP_SSP (Speaker - CODEC)',`
100# PCM0 --> demux(2to4-ch) --> eq_iir --> SSP$AMP_SSP (Speaker - CODEC)')',`
101ifdef(`WAVES',`
102# PCM0 --> waves --> volume --> demux --> SSP$AMP_SSP (Speaker - CODEC)
103#                                 |
104# PCM6 <--------------------------+',`
105# PCM0 --> volume --> demux --> SSP$AMP_SSP (Speaker - CODEC)
106#                       |
107# PCM6 <----------------+')')
108# PCM1 <---> volume <----> SSP0  (Headset - ALC5682)
109# PCM99 <---- volume <----- DMIC01 (dmic0 capture)
110# PCM2 ----> volume -----> iDisp1
111# PCM3 ----> volume -----> iDisp2
112# PCM4 ----> volume -----> iDisp3
113# PCM5 ----> volume -----> iDisp4
114# PCM99 <---- volume <---- DMIC01 (dmic 48k capture)
115# PCM100 <---- kpb <---- DMIC16K (dmic 16k capture)
116
117ifdef(`SPK_MIC_PERIOD_US',`', `define(`SPK_MIC_PERIOD_US', 1000)')
118
119ifdef(`NO_AMP',`',`
120# Define pipeline id for sof-tgl-CODEC-rt5682.m4
121ifdef(`AMP_SSP',`',`fatal_error(note: Define AMP_SSP for speaker amp SSP Index)')
122# Speaker related
123# SSP related
124# define speaker SSP index
125define(`SPK_SSP_INDEX', AMP_SSP)
126# define SSP BE dai_link name
127define(`SPK_SSP_NAME', concat(concat(`SSP', SPK_SSP_INDEX),`-Codec'))
128# define BE dai_link ID
129define(`SPK_BE_ID', BOARD_SPK_BE_ID)
130# Ref capture related
131# Ref capture BE dai_name
132define(`SPK_REF_DAI_NAME', concat(concat(`SSP', SPK_SSP_INDEX),`.IN'))')
133
134# to generate dmic setting with kwd when we have dmic
135# define channel
136ifdef(`CHANNELS', `', `define(`CHANNELS', 4)')
137# define kfbm with volume
138define(KFBM_TYPE, `vol-kfbm')
139# define pcm, pipeline and dai id
140define(DMIC_PCM_48k_ID, `99')
141define(DMIC_PIPELINE_48k_ID, `10')
142define(DMIC_DAI_LINK_48k_ID, BOARD_DMIC_BE_ID_BASE)
143define(DMIC_PCM_16k_ID, `100')
144define(DMIC_PIPELINE_16k_ID, `11')
145define(DMIC_PIPELINE_KWD_ID, `12')
146define(DMIC_DAI_LINK_16k_ID, eval(BOARD_DMIC_BE_ID_BASE + 1))
147define(DMIC_PIPELINE_48k_CORE_ID, `1')
148
149ifdef(`GOOGLE_RTC_AUDIO_PROCESSING',
150	`ifdef(`RTNR',
151		`define(`DMICPROC', rtnr-google-rtc-audio-processing)',
152		`define(`DMICPROC', google-rtc-audio-processing)')'
153	`define(`DMIC_48k_PERIOD_US', 10000)'
154	,
155	`ifdef(`RTNR',
156		`define(`DMICPROC', rtnr)'
157# 5ms period is required for RTNR build 20220728 and later versions
158		`define(`DMIC_48k_PERIOD_US', 5000)')'
159)
160
161# Run Speakers pipeline on core#1 by default for low power considering
162ifdef(`GOOGLE_RTC_AUDIO_PROCESSING', `define(`SPK_PLAYBACK_CORE', DMIC_PIPELINE_48k_CORE_ID)',
163        `ifdef(`SPK_PLAYBACK_CORE', `', `define(`SPK_PLAYBACK_CORE', `1')')')
164
165# Google RTC Audio processing processes 10ms at a time. It needs to have time to process it.
166ifdef(`GOOGLE_RTC_AUDIO_PROCESSING', `define(`DMIC_48k_PERIOD', 10000)', `')
167
168# When Google RTC Audio (AEC) is applied, put DMIC pipe task after Speaker in schedule order.
169ifdef(`GOOGLE_RTC_AUDIO_PROCESSING', `define(`DMIC_48k_PRIORITY', 1)', `')
170
171# define pcm, pipeline and dai id
172define(KWD_PIPE_SCH_DEADLINE_US, 5000)
173
174# include the generic dmic with kwd
175ifdef(`NOHOTWORD',
176`
177define(NO16KDMIC)
178define(DMIC_48k_CORE_ID, 1)
179ifdef(`DMICPROC',`',`define(`DMICPROC', passthrough)')
180include(`platform/intel/intel-generic-dmic.m4')',
181`include(`platform/intel/intel-generic-dmic-kwd.m4')')
182
183ifdef(`BT_OFFLOAD', `
184# BT offload support
185define(`BT_PIPELINE_PB_ID', `13')
186define(`BT_PIPELINE_CP_ID', `14')
187define(`BT_DAI_LINK_ID', BOARD_BT_BE_ID)
188define(`BT_PCM_ID', `7')
189define(`HW_CONFIG_ID', BOARD_BT_BE_ID)
190include(`platform/intel/intel-generic-bt.m4')')
191
192dnl PIPELINE_PCM_ADD(pipeline,
193dnl     pipe id, pcm, max channels, format,
194dnl     frames, deadline, priority, core)
195
196ifdef(`NO_AMP',`',`
197`# Low Latency playback pipeline 1 on PCM 0 using max 'ifdef(`4CH_PASSTHROUGH', `4', `2')` channels of s24le.'
198# Schedule 48 frames per 1000us deadline with priority 0 on core 0
199define(`ENDPOINT_NAME', `Speakers')
200PIPELINE_PCM_ADD(
201	ifdef(`2CH_2WAY',
202	      ifdef(`WAVES', sof/pipe-waves-demux-eq-iir-playback.m4,
203		    sof/pipe-demux-eq-iir-playback.m4),
204	      ifdef(`WAVES', sof/pipe-waves-codec-demux-playback.m4,
205		    ifdef(`DRC_EQ', sof/pipe-drc-eq-volume-demux-playback.m4,
206			  sof/pipe-volume-demux-playback.m4))),
207	1, 0, ifdef(`4CH_PASSTHROUGH', `4', `2'), s32le,
208	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE,
209	48000, 48000, 48000)
210undefine(`ENDPOINT_NAME')')
211
212ifdef(`NO_HEADPHONE',`',`
213# Low Latency playback pipeline 2 on PCM 1 using max 2 channels of s24le.
214# Schedule 48 frames per 1000us deadline with priority 0 on core 0
215define(`ENDPOINT_NAME', `Headphones')
216PIPELINE_PCM_ADD(
217	ifdef(`WAVES', sof/pipe-waves-codec-playback.m4, sof/pipe-volume-playback.m4),
218	2, 1, 2, s32le,
219	1000, 0, 0,
220	48000, 48000, 48000)
221undefine(`ENDPOINT_NAME')
222
223# Low Latency capture pipeline 3 on PCM 1 using max 2 channels of s24le.
224# Schedule 48 frames per 1000us deadline with priority 0 on core 0
225PIPELINE_PCM_ADD(sof/pipe-volume-capture.m4,
226	3, 1, 2, s32le,
227	1000, 0, 0,
228	48000, 48000, 48000)')
229
230# Low Latency playback pipeline 2 on PCM 2 using max 2 channels of s32le.
231# Schedule 48 frames per 1000us deadline with priority 0 on core 0
232PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4,
233	5, 2, 2, s32le,
234	1000, 0, 0,
235	48000, 48000, 48000)
236
237# Low Latency playback pipeline 3 on PCM 3 using max 2 channels of s32le.
238# Schedule 48 frames per 1000us deadline with priority 0 on core 0
239PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4,
240	6, 3, 2, s32le,
241	1000, 0, 0,
242	48000, 48000, 48000)
243
244# Low Latency playback pipeline 4 on PCM 4 using max 2 channels of s32le.
245# Schedule 48 frames per 1000us deadline with priority 0 on core 0
246PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4,
247	7, 4, 2, s32le,
248	1000, 0, 0,
249	48000, 48000, 48000)
250
251# Low Latency playback pipeline 5 on PCM 5 using max 2 channels of s32le.
252# Schedule 48 frames per 1000us deadline with priority 0 on core 0
253PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4,
254	8, 5, 2, s32le,
255	1000, 0, 0,
256	48000, 48000, 48000)
257
258# DAIs configuration
259#
260
261dnl DAI_ADD(pipeline,
262dnl     pipe id, dai type, dai_index, dai_be,
263dnl     buffer, periods, format,
264dnl     frames, deadline, priority, core)
265
266ifdef(`NO_AMP',`',`
267# playback DAI is SSP1 using 2 periods
268# Buffers use s16le format, with 48 frame per 1000us on core 0 with priority 0
269DAI_ADD(sof/pipe-dai-playback.m4,
270	1, SSP, SPK_SSP_INDEX, SPK_SSP_NAME,
271	PIPELINE_SOURCE_1, 2, FMT,
272	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE, SCHEDULE_TIME_DOMAIN_TIMER)
273
274ifelse(CODEC, `MAX98390', `
275# Low Latency capture pipeline 9 on PCM 6 using max 4 channels of s32le.
276# Schedule 48 frames per 1000us deadline on core 0 with priority 0
277PIPELINE_PCM_ADD(sof/pipe-passthrough-capture.m4,
278	9, 6, 4, s32le,
279	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE,
280	48000, 48000, 48000)
281
282# capture DAI is SSP1 using 2 periods
283# Buffers use FMT format, with 48 frame per 1000us on core 0 with priority 0
284DAI_ADD(sof/pipe-dai-capture.m4,
285	9, SSP, SPK_SSP_INDEX, SPK_SSP_NAME,
286	PIPELINE_SINK_9, 2, FMT,
287	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE, SCHEDULE_TIME_DOMAIN_TIMER)
288', CODEC, `CS35L41', `
289# Low Latency capture pipeline 9 on PCM 6 using max 4 channels of s32le.
290# Schedule 48 frames per 1000us deadline on core 0 with priority 0
291PIPELINE_PCM_ADD(sof/pipe-passthrough-capture.m4,
292	9, 6, 4, s32le,
293	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE,
294	48000, 48000, 48000)
295
296# capture DAI is SSP1 using 2 periods
297# Buffers use FMT format, with 48 frame per 1000us on core 0 with priority 0
298DAI_ADD(sof/pipe-dai-capture.m4,
299	9, SSP, SPK_SSP_INDEX, SPK_SSP_NAME,
300	PIPELINE_SINK_9, 2, FMT,
301	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE, SCHEDULE_TIME_DOMAIN_TIMER)',
302`
303ifdef(`2CH_2WAY',`# No echo reference for 2-way speakers',
304`
305# The echo refenrence pipeline has no connections in it,
306# it is used for the capture DAI widget to dock.
307DAI_ADD(sof/pipe-echo-ref-dai-capture.m4,
308	29, SSP, SPK_SSP_INDEX, SPK_SSP_NAME,
309	PIPELINE_SINK_29, 3, FMT,
310	SPK_MIC_PERIOD_US, 0, SPK_PLAYBACK_CORE, SCHEDULE_TIME_DOMAIN_TIMER)
311
312`# Capture pipeline 9 from demux on PCM 6 using max 'ifdef(`4CH_PASSTHROUGH', `4', `2')` channels of s32le.'
313PIPELINE_PCM_ADD(sof/pipe-passthrough-capture-sched.m4,
314	9, 6, ifdef(`4CH_PASSTHROUGH', `4', `2'), s32le,
315	SPK_MIC_PERIOD_US, 1, SPK_PLAYBACK_CORE,
316	48000, 48000, 48000,
317	SCHEDULE_TIME_DOMAIN_TIMER,
318	PIPELINE_PLAYBACK_SCHED_COMP_1)
319
320# Connect demux to capture
321SectionGraph."PIPE_CAP" {
322	index "0"
323
324	lines [
325		# mux to capture
326		dapm(PIPELINE_SINK_9, PIPELINE_DEMUX_1)
327	]
328}
329
330# Connect virtual capture to dai
331SectionGraph."PIPE_CAP_VIRT" {
332	index "9"
333
334	lines [
335		# mux to capture
336		dapm(ECHO REF 9, SPK_REF_DAI_NAME)
337	]
338}
339')')')
340
341dnl if using Google AEC
342ifdef(`GOOGLE_RTC_AUDIO_PROCESSING',
343`# Connect demux to capture'
344`SectionGraph."PIPE_GOOGLE_RTC_AUDIO_PROCESSING_REF_AEC" {'
345`        index "0"'
346`        lines ['
347`                # mux to capture'
348`                dapm(N_AEC_REF_BUF, PIPELINE_DEMUX_1)'
349`       ]'
350`}'
351dnl else
352, `')
353
354ifdef(`NO_HEADPHONE',`',`
355# playback DAI is SSP0 using 2 periods
356# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
357DAI_ADD(sof/pipe-dai-playback.m4,
358	2, SSP, 0, SSP0-Codec,
359	PIPELINE_SOURCE_2, 2, s24le,
360	1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
361
362# capture DAI is SSP0 using 2 periods
363# Buffers use s24le format, with 48 frame per 1000us on core 0 with priority 0
364DAI_ADD(sof/pipe-dai-capture.m4,
365	3, SSP, 0, SSP0-Codec,
366	PIPELINE_SINK_3, 2, s24le,
367	1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)')
368
369# playback DAI is iDisp1 using 2 periods
370# Buffers use s32le format, with 48 frame per 1000us on core 0 with priority 0
371DAI_ADD(sof/pipe-dai-playback.m4,
372	5, HDA, 0, iDisp1,
373	PIPELINE_SOURCE_5, 2, s32le,
374	1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
375
376# playback DAI is iDisp2 using 2 periods
377# Buffers use s32le format, with 48 frame per 1000us on core 0 with priority 0
378DAI_ADD(sof/pipe-dai-playback.m4,
379	6, HDA, 1, iDisp2,
380	PIPELINE_SOURCE_6, 2, s32le,
381	1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
382
383# playback DAI is iDisp3 using 2 periods
384# Buffers use s32le format, with 48 frame per 1000us on core 0 with priority 0
385DAI_ADD(sof/pipe-dai-playback.m4,
386	7, HDA, 2, iDisp3,
387	PIPELINE_SOURCE_7, 2, s32le,
388	1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
389
390# playback DAI is iDisp4 using 2 periods
391# Buffers use s32le format, with 48 frame per 1000us on core 0 with priority 0
392DAI_ADD(sof/pipe-dai-playback.m4,
393	8, HDA, 3, iDisp4,
394	PIPELINE_SOURCE_8, 2, s32le,
395	1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
396
397# PCM Low Latency, id 0
398dnl PCM_PLAYBACK_ADD(name, pcm_id, playback)
399ifdef(`NO_AMP',`',`
400PCM_PLAYBACK_ADD(Speakers, 0, PIPELINE_PCM_1)')
401ifdef(`NO_HEADPHONE',`',`
402PCM_DUPLEX_ADD(Headset, 1, PIPELINE_PCM_2, PIPELINE_PCM_3)')
403PCM_PLAYBACK_ADD(HDMI1, 2, PIPELINE_PCM_5)
404PCM_PLAYBACK_ADD(HDMI2, 3, PIPELINE_PCM_6)
405PCM_PLAYBACK_ADD(HDMI3, 4, PIPELINE_PCM_7)
406PCM_PLAYBACK_ADD(HDMI4, 5, PIPELINE_PCM_8)
407ifdef(`NO_AMP',`',`
408ifdef(`2CH_2WAY',`# No echo reference for 2-way speakers',
409`PCM_CAPTURE_ADD(EchoRef, 6, PIPELINE_PCM_9)')')
410
411#
412# BE conf2igurations - overrides config in ACPI if present
413#
414dnl DAI_CONFIG(type, dai_index, link_id, name, ssp_config/dmic_config)
415dnl SSP_CONFIG(format, mclk, bclk, fsync, tdm, ssp_config_data)
416dnl SSP_CLOCK(clock, freq, codec_master, polarity)
417dnl SSP_CONFIG_DATA(type, idx, valid bits, mclk_id)
418dnl mclk_id is optional
419dnl ssp1-maxmspk
420
421ifdef(`NO_AMP',`',`
422# SSP SPK_SSP_INDEX (ID: SPK_BE_ID)
423DAI_CONFIG(SSP, SPK_SSP_INDEX, SPK_BE_ID, SPK_SSP_NAME,
424ifelse(
425	CODEC, `MAX98357A', `
426	SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
427		SSP_CLOCK(bclk, 1536000, codec_slave),
428		SSP_CLOCK(fsync, 48000, codec_slave),
429		SSP_TDM(2, 16, 3, 3),
430		SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 16)))',
431	CODEC, `MAX98360A', `
432	SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
433		SSP_CLOCK(bclk, 3072000, codec_slave),
434		SSP_CLOCK(fsync, 48000, codec_slave),
435		SSP_TDM(2, 32, 3, 3),
436		SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 32)))',
437	CODEC, `MAX98360A_TDM', `
438	SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
439		SSP_CLOCK(bclk, 12288000, codec_slave),
440		SSP_CLOCK(fsync, 48000, codec_slave),
441		SSP_TDM(8, 32, 15, 15),
442		SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 32)))',
443	CODEC, `RT1011', `
444	SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
445		SSP_CLOCK(bclk, 4800000, codec_slave),
446		SSP_CLOCK(fsync, 48000, codec_slave),
447		SSP_TDM(4, 25, 3, 15),
448		SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24)))',
449	CODEC, `MAX98390', `
450	SSP_CONFIG(DSP_B, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
451		SSP_CLOCK(bclk, 6144000, codec_slave),
452		SSP_CLOCK(fsync, 48000, codec_slave),
453		SSP_TDM(4, 32, 3, 15),
454		SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 32)))',
455	CODEC, `RT1019', `
456	SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
457                SSP_CLOCK(bclk, 3072000, codec_slave),
458                SSP_CLOCK(fsync, 48000, codec_slave),
459                SSP_TDM(2, 32, 3, 3),
460                SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24)))',
461	CODEC, `CS35L41', `
462	SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
463		SSP_CLOCK(bclk, 6144000, codec_slave),
464		SSP_CLOCK(fsync, 48000, codec_slave),
465		SSP_TDM(4, 32, 3, 15),
466		SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24)))',
467	)')
468
469ifdef(`NO_HEADPHONE',`',`
470# SSP 0 (ID: BOARD_HP_BE_ID)
471DAI_CONFIG(SSP, 0, BOARD_HP_BE_ID, SSP0-Codec,
472	SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in),
473		SSP_CLOCK(bclk, 2400000, codec_slave),
474		SSP_CLOCK(fsync, 48000, codec_slave),
475		SSP_TDM(2, 25, 3, 3),
476		SSP_CONFIG_DATA(SSP, 0, 24, 0, 0, 0, SSP_CC_BCLK_ES)))')
477
478# 4 HDMI/DP outputs (ID: 3,4,5,6)
479DAI_CONFIG(HDA, 0, BOARD_HDMI_BE_ID_BASE, iDisp1,
480	HDA_CONFIG(HDA_CONFIG_DATA(HDA, 0, 48000, 2)))
481DAI_CONFIG(HDA, 1, eval(BOARD_HDMI_BE_ID_BASE + 1), iDisp2,
482	HDA_CONFIG(HDA_CONFIG_DATA(HDA, 1, 48000, 2)))
483DAI_CONFIG(HDA, 2, eval(BOARD_HDMI_BE_ID_BASE + 2), iDisp3,
484	HDA_CONFIG(HDA_CONFIG_DATA(HDA, 2, 48000, 2)))
485DAI_CONFIG(HDA, 3, eval(BOARD_HDMI_BE_ID_BASE + 3), iDisp4,
486	HDA_CONFIG(HDA_CONFIG_DATA(HDA, 3, 48000, 2)))
487
488DEBUG_END
489