From 8abe6175084a31c08d03b47ed44c2f23f2affaf9 Mon Sep 17 00:00:00 2001 From: Brent Lu Date: Thu, 24 Aug 2023 12:36:41 +0800 Subject: [PATCH 1/2] topology1: adl-max98360a-da7219: support DA7219 headphone codec Add an new topology adl-max98360a-da7219.tplg for DA7219 headphone codec with MAX98360A speaker amplifier on ADL boards. The MCLK frequency is set to 24.576MHz to use PLL bypass mode and avoid the WCLK locking problem on earlier platforms. Signed-off-by: Brent Lu (cherry picked from commit dca9085047f2aaaff59587d19c3b524eea58b888) --- tools/topology/topology1/CMakeLists.txt | 1 + .../topology1/sof-tgl-max98357a-rt5682.m4 | 30 +++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/tools/topology/topology1/CMakeLists.txt b/tools/topology/topology1/CMakeLists.txt index a80d07a09521..9aead4a1efab 100644 --- a/tools/topology/topology1/CMakeLists.txt +++ b/tools/topology/topology1/CMakeLists.txt @@ -170,6 +170,7 @@ set(TPLGS "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" "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" "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" + "sof-tgl-max98357a-rt5682\;sof-adl-max98360a-da7219\;-DUSE_DA7219\;-DCODEC=MAX98360A\;-DFMT=s32le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DAMP_SSP=1\;-DBT_OFFLOAD\;-DSPK_MIC_PERIOD_US=10000\;-DNOHOTWORD\;-DNO16KDMIC" "sof-tgl-max98373-rt5682\;sof-tgl-max98373-rt5682\;-DAMP_SSP=1" "sof-tgl-max98373-rt5682\;sof-tgl-max98373-rt5682-igonr\;-DAMP_SSP=1\;-DIGO" "sof-tgl-max98373-rt5682\;sof-tgl-max98373-rt5682-xperi\;-DAMP_SSP=1\;-DINCLUDE_IIR_EQ=1" diff --git a/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 b/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 index 265db6444b3f..60cd83a694ba 100644 --- a/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 +++ b/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 @@ -30,6 +30,9 @@ DEBUG_START # ifdef(`2CH_2WAY', `ifdef(`4CH_PASSTHROUGH', `fatal_error(note: 2CH_2WAY and 4CH_PASSTHROUGH are mutually exclusive)')') +ifdef(`USE_DA7219',`define(HEADPHONE, `DA7219')',`define(HEADPHONE, `RT5682')') +ifdef(`USE_DA7219',`define(MCLK_RATE, `24576000')',`define(MCLK_RATE, `19200000')') + # # Define the demux configure # @@ -427,43 +430,43 @@ ifdef(`NO_AMP',`',` DAI_CONFIG(SSP, SPK_SSP_INDEX, SPK_BE_ID, SPK_SSP_NAME, ifelse( CODEC, `MAX98357A', ` - SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, 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, SPK_SSP_INDEX, 16)))', CODEC, `MAX98360A', ` - SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 3072000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(2, 32, 3, 3), SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 32)))', CODEC, `MAX98360A_TDM', ` - SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 12288000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(8, 32, 15, 15), SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 32)))', CODEC, `RT1011', ` - SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 4800000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(4, 25, 3, 15), SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24)))', CODEC, `MAX98390', ` - SSP_CONFIG(DSP_B, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(DSP_B, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 6144000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(4, 32, 3, 15), SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 32)))', CODEC, `RT1019', ` - SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 3072000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(2, 32, 3, 3), SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24)))', CODEC, `CS35L41', ` - SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, 19200000, codec_mclk_in), + SSP_CONFIG(DSP_A, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 6144000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(4, 32, 3, 15), @@ -473,11 +476,20 @@ ifelse( ifdef(`NO_HEADPHONE',`',` # SSP 0 (ID: BOARD_HP_BE_ID) DAI_CONFIG(SSP, 0, BOARD_HP_BE_ID, SSP0-Codec, - SSP_CONFIG(I2S, SSP_CLOCK(mclk, 19200000, codec_mclk_in), +ifelse( + HEADPHONE, `DA7219', ` + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), + SSP_CLOCK(bclk, 3072000, codec_slave), + SSP_CLOCK(fsync, 48000, codec_slave), + SSP_TDM(2, 32, 3, 3), + SSP_CONFIG_DATA(SSP, 0, 24)))', + HEADPHONE, `RT5682', ` + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), SSP_CLOCK(bclk, 2400000, codec_slave), SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(2, 25, 3, 3), - SSP_CONFIG_DATA(SSP, 0, 24, 0, 0, 0, SSP_CC_BCLK_ES)))') + SSP_CONFIG_DATA(SSP, 0, 24, 0, 0, 0, SSP_CC_BCLK_ES)))', + )') # 4 HDMI/DP outputs (ID: 3,4,5,6) DAI_CONFIG(HDA, 0, BOARD_HDMI_BE_ID_BASE, iDisp1, From 664a97ea4ce5c98732724d3ed13f5655c685e636 Mon Sep 17 00:00:00 2001 From: Brent Lu Date: Mon, 14 Aug 2023 15:51:50 +0800 Subject: [PATCH 2/2] topology1: sof-tgl-max98357a-rt5682: add sof-adl-rt5650 topology Add a new topology sof-adl-rt5650 for ALC5650 which supports SSP0 for headset and SSP1 for speakers since this codec implements two I2S interfaces. DAI format changed to mclk: 24.576MHz, bclk: 3.072MHz, sample bits: 24-bit to avoid using ASRC function on codec side. Signed-off-by: Brent Lu (cherry picked from commit bd6933b5ab9b61e99acb9843b6f6f14bdefdbe27) --- tools/topology/topology1/CMakeLists.txt | 1 + .../topology1/sof-tgl-max98357a-rt5682.m4 | 32 +++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/tools/topology/topology1/CMakeLists.txt b/tools/topology/topology1/CMakeLists.txt index 9aead4a1efab..7d2ff3d9c297 100644 --- a/tools/topology/topology1/CMakeLists.txt +++ b/tools/topology/topology1/CMakeLists.txt @@ -171,6 +171,7 @@ set(TPLGS "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" "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" "sof-tgl-max98357a-rt5682\;sof-adl-max98360a-da7219\;-DUSE_DA7219\;-DCODEC=MAX98360A\;-DFMT=s32le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DAMP_SSP=1\;-DBT_OFFLOAD\;-DSPK_MIC_PERIOD_US=10000\;-DNOHOTWORD\;-DNO16KDMIC" + "sof-tgl-max98357a-rt5682\;sof-adl-rt5650\;-DUSE_RT5650\;-DFMT=s24le\;-DPLATFORM=adl\;-DLINUX_MACHINE_DRIVER=sof_rt5682\;-DAMP_SSP=1\;-DSPK_MIC_PERIOD_US=10000\;-DBT_OFFLOAD\;-DNOHOTWORD\;-DNO16KDMIC" "sof-tgl-max98373-rt5682\;sof-tgl-max98373-rt5682\;-DAMP_SSP=1" "sof-tgl-max98373-rt5682\;sof-tgl-max98373-rt5682-igonr\;-DAMP_SSP=1\;-DIGO" "sof-tgl-max98373-rt5682\;sof-tgl-max98373-rt5682-xperi\;-DAMP_SSP=1\;-DINCLUDE_IIR_EQ=1" diff --git a/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 b/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 index 60cd83a694ba..4a4f970c124e 100644 --- a/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 +++ b/tools/topology/topology1/sof-tgl-max98357a-rt5682.m4 @@ -30,8 +30,24 @@ DEBUG_START # ifdef(`2CH_2WAY', `ifdef(`4CH_PASSTHROUGH', `fatal_error(note: 2CH_2WAY and 4CH_PASSTHROUGH are mutually exclusive)')') -ifdef(`USE_DA7219',`define(HEADPHONE, `DA7219')',`define(HEADPHONE, `RT5682')') -ifdef(`USE_DA7219',`define(MCLK_RATE, `24576000')',`define(MCLK_RATE, `19200000')') +# +# Set headphone type, default is RT5682 +# +ifdef(`USE_DA7219',`define(HEADPHONE, `DA7219')',` + ifdef(`USE_RT5650',`define(HEADPHONE, `RT5650')',`define(HEADPHONE, `RT5682')')') + +# +# Set the MCLK rate for headphone and amplifier SSP ports +# +ifelse( + HEADPHONE, `DA7219', ` + define(MCLK_RATE, `24576000')', + HEADPHONE, `RT5650', ` + define(MCLK_RATE, `24576000') + define(CODEC, `RT5650')', + HEADPHONE, `RT5682', ` + define(MCLK_RATE, `19200000')', + `fatal_error(note: unknown HEADPHONE type)') # # Define the demux configure @@ -471,6 +487,12 @@ ifelse( SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(4, 32, 3, 15), SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24)))', + CODEC, `RT5650', ` + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), + SSP_CLOCK(bclk, 3072000, codec_slave), + SSP_CLOCK(fsync, 48000, codec_slave), + SSP_TDM(2, 32, 3, 3), + SSP_CONFIG_DATA(SSP, SPK_SSP_INDEX, 24, 0, 0, 0, SSP_CC_MCLK_AON)))', )') ifdef(`NO_HEADPHONE',`',` @@ -489,6 +511,12 @@ ifelse( SSP_CLOCK(fsync, 48000, codec_slave), SSP_TDM(2, 25, 3, 3), SSP_CONFIG_DATA(SSP, 0, 24, 0, 0, 0, SSP_CC_BCLK_ES)))', + HEADPHONE, `RT5650', ` + SSP_CONFIG(I2S, SSP_CLOCK(mclk, MCLK_RATE, codec_mclk_in), + SSP_CLOCK(bclk, 3072000, codec_slave), + SSP_CLOCK(fsync, 48000, codec_slave), + SSP_TDM(2, 32, 3, 3), + SSP_CONFIG_DATA(SSP, 0, 24, 0, 0, 0, SSP_CC_MCLK_AON)))', )') # 4 HDMI/DP outputs (ID: 3,4,5,6)