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