From c754c4959c4080d779da24120e434928a6db4e6f Mon Sep 17 00:00:00 2001 From: Mac Chiang Date: Sat, 15 Feb 2020 00:41:32 +0800 Subject: [PATCH] topology: add cml support with da7219 and max98357a Reuse sof-glk-da7219-kwd by included cml.m4 for sof-cml-da7219-max98357a topology with KWD pipeline enabling Signed-off-by: Mac Chiang --- tools/topology/CMakeLists.txt | 3 +- tools/topology/platform/intel/bxt.m4 | 46 +++++++++++ tools/topology/platform/intel/cml-da7219.m4 | 17 ++++ tools/topology/platform/intel/cml.m4 | 36 ++++++++ tools/topology/platform/intel/glk-da7219.m4 | 17 ++++ tools/topology/sof-glk-da7219-kwd.m4 | 92 ++++++++++----------- 6 files changed, 164 insertions(+), 47 deletions(-) create mode 100644 tools/topology/platform/intel/cml-da7219.m4 create mode 100644 tools/topology/platform/intel/glk-da7219.m4 diff --git a/tools/topology/CMakeLists.txt b/tools/topology/CMakeLists.txt index 0fac283cb3b8..a373fe064f49 100644 --- a/tools/topology/CMakeLists.txt +++ b/tools/topology/CMakeLists.txt @@ -72,7 +72,8 @@ set(TPLGS "sof-apl-rt298\;sof-apl-rt298" "sof-apl-wm8804\;sof-apl-wm8804" "sof-apl-da7219\;sof-apl-da7219" - "sof-glk-da7219-kwd\;sof-glk-da7219-kwd" + "sof-glk-da7219-kwd\;sof-glk-da7219-kwd\;-DPLATFORM=glk" + "sof-glk-da7219-kwd\;sof-cml-da7219-max98357a\;-DPLATFORM=cml" "sof-glk-da7219\;sof-glk-da7219" "sof-glk-da7219\;sof-glk-eq-da7219\;-DDMICPROC=eq-iir-volume" "sof-glk-rt5682\;sof-glk-rt5682" diff --git a/tools/topology/platform/intel/bxt.m4 b/tools/topology/platform/intel/bxt.m4 index 76265130e8cb..20205b5fc0ed 100644 --- a/tools/topology/platform/intel/bxt.m4 +++ b/tools/topology/platform/intel/bxt.m4 @@ -1,6 +1,52 @@ # # Broxton differentiation for pipelines and components # +include(`platform/intel/dmic.m4') + +undefine(`SSP_MCLK_RATE') +define(`SSP_MCLK_RATE', `19200000') + +undefine(`SSP1_BCLK') +define(`SSP1_BCLK', `1536000') + +undefine(`SSP_BCLK') +define(`SSP_BCLK', `1920000') + +undefine(`SSP_FSYNC') +define(`SSP_FSYNC', `48000') + +define(`DMIC_PIPE_CAPTURE', `sof/pipe-volume-capture.m4') + +define(`PIPE_VOLUME_PLAYBACK', `sof/pipe-volume-playback.m4') + +undefine(`DMIC01_FMT') +define(`DMIC01_FMT', `s16le') + +undefine(`DMIC1_FMT') +define(`DMIC1_FMT', `s16le') + +define(`SSP1_VALID_BITS_STR', `s16le') + +undefine(`HDMI0_INDEX') +define(`HDMI0_INDEX', `3') + +undefine(`HDMI1_INDEX') +define(`HDMI1_INDEX', `4') + +undefine(`HDMI2_INDEX') +define(`HDMI2_INDEX', `5') + +undefine(`SSP_BITS_WIDTH') +define(`SSP_BITS_WIDTH', `20') + +undefine(`SSP1_VALID_BITS') +define(`SSP1_VALID_BITS', `16') + +undefine(`SSP_VALID_BITS') +define(`SSP_VALID_BITS', `16') + +undefine(`MCLK_ID') +define(`MCLK_ID', `1') include(`memory.m4') diff --git a/tools/topology/platform/intel/cml-da7219.m4 b/tools/topology/platform/intel/cml-da7219.m4 new file mode 100644 index 000000000000..4453654a6704 --- /dev/null +++ b/tools/topology/platform/intel/cml-da7219.m4 @@ -0,0 +1,17 @@ +include(`platform/intel/cml.m4') + +#SSP/DMIC machine specific settings on CML platform +undefine(`SSP_INDEX') +define(`SSP_INDEX', 0) + +undefine(`SSP_NAME') +define(`SSP_NAME', `SSP0-Codec') + +undefine(`DMIC_PCM_NUM') +define(`DMIC_PCM_NUM', `2') + +undefine(`UNUSED_SSP_ROUTE1') +define(`UNUSED_SSP_ROUTE1', `ssp5') + +undefine(`UNUSED_SSP_ROUTE2') +define(`UNUSED_SSP_ROUTE2', `ssp1') diff --git a/tools/topology/platform/intel/cml.m4 b/tools/topology/platform/intel/cml.m4 index 341e489f84b1..5b83bcaa5f4e 100644 --- a/tools/topology/platform/intel/cml.m4 +++ b/tools/topology/platform/intel/cml.m4 @@ -1,4 +1,5 @@ include(`platform/intel/cnl.m4') +include(`abi.h') #SSP setting for CML platform undefine(`SSP_INDEX') @@ -65,3 +66,38 @@ define(`SSP1_FSYNC', `46875') define(`SET_SSP1_CONFIG_DATA', `SSP, 1, 24')') include(`platform/intel/dmic.m4') + +# Note: this is for sof-cml-da7219-max98357a.m4 +# include the SSP1 settings and common SSP settings additionally + +define(`DMIC_PIPE_CAPTURE', `sof/pipe-passthrough-capture.m4') + +undefine(`DMIC01_FMT') +define(`DMIC01_FMT', `s32le') + +undefine(`DMIC1_FMT') +define(`DMIC1_FMT', `s24le') + +undefine(`HDMI0_INDEX') +define(`HDMI0_INDEX', `0') + +undefine(`HDMI1_INDEX') +define(`HDMI1_INDEX', `1') + +undefine(`HDMI2_INDEX') +define(`HDMI2_INDEX', `2') + +undefine(`SSP_BCLK') +define(`SSP_BCLK', `2400000') + +undefine(`SSP_FSYNC', `48000') +define(`SSP_FSYNC', `48000') + +undefine(`SSP_BITS_WIDTH') +define(`SSP_BITS_WIDTH', `25') + +undefine(`SSP_VALID_BITS') +define(`SSP_VALID_BITS', `16') + +undefine(`MCLK_ID') +define(`MCLK_ID', `') diff --git a/tools/topology/platform/intel/glk-da7219.m4 b/tools/topology/platform/intel/glk-da7219.m4 new file mode 100644 index 000000000000..cab68544ee99 --- /dev/null +++ b/tools/topology/platform/intel/glk-da7219.m4 @@ -0,0 +1,17 @@ +include(`platform/intel/bxt.m4') + +# SSP/DMIC machine specific settings on GLK platform +undefine(`SSP_INDEX') +define(`SSP_INDEX', 2) + +undefine(`SSP_NAME') +define(`SSP_NAME', `SSP2-Codec') + +undefine(`DMIC_PCM_NUM') +define(`DMIC_PCM_NUM', `99') + +undefine(`UNUSED_SSP_ROUTE1') +define(`UNUSED_SSP_ROUTE1', `ssp1') + +undefine(`UNUSED_SSP_ROUTE2') +define(`UNUSED_SSP_ROUTE2', `ssp2') diff --git a/tools/topology/sof-glk-da7219-kwd.m4 b/tools/topology/sof-glk-da7219-kwd.m4 index b9ddcbf1abbb..99c3bb4afd61 100644 --- a/tools/topology/sof-glk-da7219-kwd.m4 +++ b/tools/topology/sof-glk-da7219-kwd.m4 @@ -1,5 +1,6 @@ # -# Topology for GeminiLake with Dialog7219. +ifelse(PLATFORM, `glk', `# Topology for GeminiLake with Dialog7219+Maxim98357a.', `') +ifelse(PLATFORM, `cml', `# Topology for CometLake with Dialog7219+Maxim98357a.', `') # # Include topology builder @@ -14,9 +15,8 @@ include(`common/tlv.m4') # Include Token library include(`sof/tokens.m4') -# Include bxt DSP configuration -include(`platform/intel/bxt.m4') -include(`platform/intel/dmic.m4') +# include platform specific dsp configuration and machine specific settings +include(`platform/intel/'PLATFORM`-da7219.m4') define(KWD_PIPE_SCH_DEADLINE_US, 20000) @@ -24,8 +24,8 @@ define(KWD_PIPE_SCH_DEADLINE_US, 20000) # Define the pipelines # # PCM0 ----> volume (pipe 1) -----> SSP1 (speaker - maxim98357a, BE link 0) -# PCM1 <---> volume (pipe 2,3) <----> SSP2 (headset - da7219, BE link 1) -# PCM99 <---- volume (pipe 4) <----- DMIC0 (dmic01 , BE link 2) +# PCM1 <---> volume (pipe 2,3) <----> SSP(SSP_INDEX) (headset - dailog7219, BE link 1) +# PCM(DMIC_PCM_NUM) <---- DMIC0 (dmic capture, BE link 2) # PCM5 ----> volume (pipe 5) -----> iDisp1 (HDMI/DP playback, BE link 3) # PCM6 ----> volume (pipe 6) -----> iDisp2 (HDMI/DP playback, BE link 4) # PCM7 ----> volume (pipe 7) -----> iDisp3 (HDMI/DP playback, BE link 5) @@ -42,7 +42,7 @@ dnl time_domain, sched_comp) # Low Latency playback pipeline 1 on PCM 0 using max 2 channels of s32le. # Set 1000us deadline on core 0 with priority 0 -PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4, +PIPELINE_PCM_ADD(PIPE_VOLUME_PLAYBACK, 1, 0, 2, s32le, 1000, 0, 0, 48000, 48000, 48000) @@ -63,8 +63,9 @@ PIPELINE_PCM_ADD(sof/pipe-volume-capture.m4, # Low Latency capture pipeline 4 on PCM 99 using max 4 channels of s32le. # Set 1000us deadline on core 0 with priority 0 -PIPELINE_PCM_ADD(sof/pipe-volume-capture.m4, - 4, 99, 4, s16le, + +PIPELINE_PCM_ADD(DMIC_PIPE_CAPTURE, + 4, DMIC_PCM_NUM, 4, DMIC01_FMT, 1000, 0, 0, 48000, 48000, 48000) @@ -102,20 +103,20 @@ dnl deadline, priority, core, time_domain) # Buffers use s16le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-playback.m4, 1, SSP, 1, SSP1-Codec, - PIPELINE_SOURCE_1, 2, s16le, + PIPELINE_SOURCE_1, 2, SSP1_VALID_BITS_STR, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) -# playback DAI is SSP2 using 2 periods +# playback DAI is SSP(SSP_INDEX) using 2 periods # Buffers use s16le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-playback.m4, - 2, SSP, 2, SSP2-Codec, + 2, SSP, SSP_INDEX, SSP_NAME, PIPELINE_SOURCE_2, 2, s16le, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) -# capture DAI is SSP2 using 2 periods +# capture DAI is SSP(SSP_INDEX) using 2 periods # Buffers use s16le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-capture.m4, - 3, SSP, 2, SSP2-Codec, + 3, SSP, SSP_INDEX, SSP_NAME, PIPELINE_SINK_3, 2, s16le, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) @@ -123,27 +124,27 @@ DAI_ADD(sof/pipe-dai-capture.m4, # Buffers use s32le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-capture.m4, 4, DMIC, 0, dmic01, - PIPELINE_SINK_4, 2, s16le, + PIPELINE_SINK_4, 2, DMIC01_FMT, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) # playback DAI is iDisp1 using 2 periods # Buffers use s32le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-playback.m4, - 5, HDA, 3, iDisp1, + 5, HDA, HDMI0_INDEX, iDisp1, PIPELINE_SOURCE_5, 2, s32le, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) # playback DAI is iDisp2 using 2 periods # Buffers use s32le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-playback.m4, - 6, HDA, 4, iDisp2, + 6, HDA, HDMI1_INDEX, iDisp2, PIPELINE_SOURCE_6, 2, s32le, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) # playback DAI is iDisp3 using 2 periods # Buffers use s32le format, 1000us deadline on core 0 with priority 0 DAI_ADD(sof/pipe-dai-playback.m4, - 7, HDA, 5, iDisp3, + 7, HDA, HDMI2_INDEX, iDisp3, PIPELINE_SOURCE_7, 2, s32le, 1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) @@ -154,21 +155,22 @@ DAI_ADD(sof/pipe-dai-playback.m4, # Passthrough capture pipeline 8 on PCM 8 using max 2 channels. # Schedule 20000us deadline on core 0 with priority 0 PIPELINE_PCM_DAI_ADD(sof/pipe-kfbm-capture.m4, - 8, 8, 2, s16le, - KWD_PIPE_SCH_DEADLINE_US, 0, 0, DMIC, 1, s16le, 3, + 8, 8, 2, DMIC1_FMT, + KWD_PIPE_SCH_DEADLINE_US, 0, 0, DMIC, 1, DMIC01_FMT, 3, 16000, 16000, 16000) # capture DAI is DMIC 1 using 3 periods # Buffers use s16le format, with 320 frame per 20000us on core 0 with priority 0 DAI_ADD(sof/pipe-dai-capture.m4, 8, DMIC, 1, dmic16k, - PIPELINE_SINK_8, 3, s16le, + PIPELINE_SINK_8, 3, DMIC01_FMT, KWD_PIPE_SCH_DEADLINE_US, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) + PCM_PLAYBACK_ADD(Speakers, 0, PIPELINE_PCM_1) PCM_DUPLEX_ADD(Headset, 1, PIPELINE_PCM_2, PIPELINE_PCM_3) -PCM_CAPTURE_ADD(DMIC, 99, PIPELINE_PCM_4) +PCM_CAPTURE_ADD(DMIC, DMIC_PCM_NUM, PIPELINE_PCM_4) PCM_PLAYBACK_ADD(HDMI1, 5, PIPELINE_PCM_5) PCM_PLAYBACK_ADD(HDMI2, 6, PIPELINE_PCM_6) PCM_PLAYBACK_ADD(HDMI3, 7, PIPELINE_PCM_7) @@ -180,13 +182,13 @@ dnl period, priority, core, dnl sched_comp, time_domain, dnl pcm_min_rate, pcm_max_rate, pipeline_rate) PIPELINE_ADD(sof/pipe-detect.m4, - 9, 2, s16le, + 9, 2, DMIC1_FMT, KWD_PIPE_SCH_DEADLINE_US, 1, 0, PIPELINE_SCHED_COMP_8, SCHEDULE_TIME_DOMAIN_TIMER, 16000, 16000, 16000) # Connect pipelines together -SectionGraph."pipe-sof-glk-keyword-detect" { +SectionGraph."pipe-sof-PLATFORM-keyword-detect" { index "0" lines [ @@ -200,44 +202,42 @@ SectionGraph."pipe-sof-glk-keyword-detect" { # BE configurations - overrides config in ACPI if present # -#SSP 1 (ID: 0) with 19.2 MHz mclk with MCLK_ID 1 (unused), 1.536 MHz blck DAI_CONFIG(SSP, 1, 0, SSP1-Codec, - SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in), - SSP_CLOCK(bclk, 1536000, codec_slave), - SSP_CLOCK(fsync, 48000, codec_slave), - SSP_TDM(2, 16, 3, 3), - SSP_CONFIG_DATA(SSP, 1, 16, 1))) - -#SSP 2 (ID: 1) with 19.2 MHz mclk with MCLK_ID 1, 1.92 MHz bclk -DAI_CONFIG(SSP, 2, 1, SSP2-Codec, - SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in), - SSP_CLOCK(bclk, 1920000, codec_slave), - SSP_CLOCK(fsync, 48000, codec_slave), - SSP_TDM(2, 20, 3, 3), - SSP_CONFIG_DATA(SSP, 2, 16, 1))) + SSP_CONFIG(I2S, SSP_CLOCK(mclk, SSP_MCLK_RATE, codec_mclk_in), + SSP_CLOCK(bclk, SSP1_BCLK, codec_slave), + SSP_CLOCK(fsync, SSP_FSYNC, codec_slave), + SSP_TDM(2, SSP1_VALID_BITS, 3, 3), + SSP_CONFIG_DATA(SSP, 1, SSP1_VALID_BITS, MCLK_ID))) + +DAI_CONFIG(SSP, SSP_INDEX, 1, SSP_NAME, + SSP_CONFIG(I2S, SSP_CLOCK(mclk, SSP_MCLK_RATE, codec_mclk_in), + SSP_CLOCK(bclk, SSP_BCLK, codec_slave), + SSP_CLOCK(fsync, SSP_FSYNC, codec_slave), + SSP_TDM(2, SSP_BITS_WIDTH, 3, 3), + SSP_CONFIG_DATA(SSP, SSP_INDEX, SSP_VALID_BITS, MCLK_ID))) # dmic01 (ID: 2) DAI_CONFIG(DMIC, 0, 2, dmic01, DMIC_CONFIG(1, 500000, 4800000, 40, 60, 48000, - DMIC_WORD_LENGTH(s16le), 400, DMIC, 0, + DMIC_WORD_LENGTH(DMIC01_FMT), 400, DMIC, 0, PDM_CONFIG(DMIC, 0, FOUR_CH_PDM0_PDM1))) # 3 HDMI/DP outputs (ID: 3,4,5) -DAI_CONFIG(HDA, 3, 3, iDisp1) -DAI_CONFIG(HDA, 4, 4, iDisp2) -DAI_CONFIG(HDA, 5, 5, iDisp3) +DAI_CONFIG(HDA, HDMI0_INDEX, 3, iDisp1) +DAI_CONFIG(HDA, HDMI1_INDEX, 4, iDisp2) +DAI_CONFIG(HDA, HDMI2_INDEX, 5, iDisp3) # dmic16k (ID: 6) DAI_CONFIG(DMIC, 1, 6, dmic16k, DMIC_CONFIG(1, 500000, 4800000, 40, 60, 16000, - DMIC_WORD_LENGTH(s16le), 400, DMIC, 1, + DMIC_WORD_LENGTH(DMIC01_FMT), 400, DMIC, 1, PDM_CONFIG(DMIC, 1, STEREO_PDM0))) ## remove warnings with SST hard-coded routes -VIRTUAL_WIDGET(ssp1 Tx, out_drv, 0) -VIRTUAL_WIDGET(ssp2 Rx, out_drv, 1) -VIRTUAL_WIDGET(ssp2 Tx, out_drv, 2) +VIRTUAL_WIDGET(UNUSED_SSP_ROUTE1 Tx, out_drv, 0) +VIRTUAL_WIDGET(UNUSED_SSP_ROUTE2 Rx, out_drv, 1) +VIRTUAL_WIDGET(UNUSED_SSP_ROUTE2 Tx, out_drv, 2) VIRTUAL_WIDGET(iDisp3 Tx, out_drv, 15) VIRTUAL_WIDGET(iDisp2 Tx, out_drv, 16) VIRTUAL_WIDGET(iDisp1 Tx, out_drv, 17)