|
| 1 | +# |
| 2 | +# Topology for ACP_7_X with TDM. |
| 3 | +# |
| 4 | +# Include topology builder |
| 5 | +include(`utils.m4') |
| 6 | +include(`dai.m4') |
| 7 | +include(`pipeline.m4') |
| 8 | +include(`acp-tdm.m4') |
| 9 | + |
| 10 | +# Include TLV library |
| 11 | +include(`common/tlv.m4') |
| 12 | + |
| 13 | +# Include Token library |
| 14 | +include(`sof/tokens.m4') |
| 15 | + |
| 16 | +# Include ACP DSP configuration |
| 17 | +include(`platform/amd/acp.m4') |
| 18 | + |
| 19 | +# |
| 20 | +# Pipeline Graph (16-bit / s16le): |
| 21 | +# |
| 22 | +# PLAYBACK: |
| 23 | +# [Host PCM ] -> [Passthrough Pipeline ] -> [ACPTDM DAI ] |
| 24 | +# s16le 2ch s16le 48kHz s16le 2ch |
| 25 | +# | |
| 26 | +# [acp-i2s0-codec] |
| 27 | +# I2S bclk=3.072MHz |
| 28 | +# fsync=48kHz, 2ch |
| 29 | +# | |
| 30 | +# CAPTURE: |
| 31 | +# [ACPTDM DAI ] -> [Passthrough Pipeline ] -> [Host PCM ] |
| 32 | +# s16le 2ch s16le 48kHz s16le 2ch |
| 33 | +# |
| 34 | + |
| 35 | +DEBUG_START |
| 36 | +#====================================================================== |
| 37 | +# Playback pipeline 1 on PCM 0 using max 2 channels of s16le. |
| 38 | + |
| 39 | +dnl PIPELINE_PCM_ADD(pipeline, |
| 40 | +dnl pipe id, pcm, max channels, format, |
| 41 | +dnl period, priority, core, |
| 42 | +dnl pcm_min_rate, pcm_max_rate, pipeline_rate) |
| 43 | +# Playback pipeline 0 on PCM 0, dai index 0, link id 0 using max 2 channels of s16le. |
| 44 | + |
| 45 | +# Schedule 96 frames per 2000us deadline on core 0 with priority 0 |
| 46 | +PIPELINE_PCM_ADD(sof/pipe-passthrough-playback.m4, |
| 47 | + 0, 0, 2, s16le, |
| 48 | + 2000, 0, 0, |
| 49 | + 48000, 48000, 48000) |
| 50 | + |
| 51 | +# Capture pipeline 3 on PCM 0, dai index 0 using max 2 channels of s16le. |
| 52 | +PIPELINE_PCM_ADD(sof/pipe-passthrough-capture.m4, |
| 53 | + 3, 0, 2, s16le, |
| 54 | + 2000, 0, 0, |
| 55 | + 48000, 48000, 48000) |
| 56 | +#=========================================================================== |
| 57 | +dnl DAI_ADD(pipeline, |
| 58 | +dnl pipe id, dai type, dai_index, dai_be, |
| 59 | +dnl buffer, periods, format, |
| 60 | +dnl deadline, priority, core, time_domain) |
| 61 | + |
| 62 | +# Schedule 96 frames per 2000us deadline on core 0 with priority 0 |
| 63 | + |
| 64 | +# playback DAI is ACPTDM using 2 periods |
| 65 | +DAI_ADD(sof/pipe-dai-playback.m4, |
| 66 | + 0, ACPTDM, 0, acp-i2s0-codec, |
| 67 | + PIPELINE_SOURCE_0, 2, s16le, |
| 68 | + 2000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) |
| 69 | + |
| 70 | +# Capture DAI is ACPTDM using 2 periods |
| 71 | +DAI_ADD(sof/pipe-dai-capture.m4, |
| 72 | + 3, ACPTDM, 0, acp-i2s0-codec, |
| 73 | + PIPELINE_SINK_3, 2, s16le, |
| 74 | + 2000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) |
| 75 | +#=========================================================================== |
| 76 | +# playback DAI is ACPTDM using 2 periods |
| 77 | + |
| 78 | +dnl DAI_CONFIG(type, dai_index, link_id, name, ACPTDM_config/acpdmic_config) |
| 79 | +dnl ACPTDM_CONFIG(format, mclk, bclk, fsync, tdm, ACPTDM_config_data) |
| 80 | +dnl ACP_CLOCK(clock, freq, codec_provider, polarity) |
| 81 | +dnl ACPTDM_CONFIG_DATA(type, idx, valid bits, mclk_id) |
| 82 | +dnl mclk_id is optional |
| 83 | + |
| 84 | +DAI_CONFIG(ACPTDM, 0, 0, acp-i2s0-codec, |
| 85 | + ACPTDM_CONFIG(I2S, ACP_CLOCK(mclk, 49152000, codec_mclk_in), |
| 86 | + ACP_CLOCK(bclk, 3072000, codec_consumer), |
| 87 | + ACP_CLOCK(fsync, 48000, codec_consumer), |
| 88 | + ACP_TDM(2, 32, 3, 3),ACPTDM_CONFIG_DATA(ACPTDM, 0, 48000, 2, 0, 0)) |
| 89 | +) |
| 90 | +dnl PCM_DUPLEX_ADD(name, pcm_id, playback_pipeline, capture_pipeline) |
| 91 | +PCM_DUPLEX_ADD(I2STDM0, 0, PIPELINE_PCM_0, PIPELINE_PCM_3) |
| 92 | + |
| 93 | +#==================================================================================================================== |
| 94 | +# TDM instance 1 |
| 95 | + |
| 96 | +dnl PIPELINE_PCM_ADD(pipeline, |
| 97 | +dnl pipe id, pcm, max channels, format, |
| 98 | +dnl period, priority, core, |
| 99 | +dnl pcm_min_rate, pcm_max_rate, pipeline_rate) |
| 100 | + |
| 101 | +PIPELINE_PCM_ADD(sof/pipe-passthrough-playback.m4, |
| 102 | + 1, 1, 2, s16le, |
| 103 | + 2000, 0, 0, |
| 104 | + 48000, 48000, 48000) |
| 105 | +PIPELINE_PCM_ADD(sof/pipe-passthrough-capture.m4, |
| 106 | + 4, 1, 2, s16le, |
| 107 | + 2000, 0, 0, |
| 108 | + 48000, 48000, 48000) |
| 109 | + |
| 110 | +dnl DAI_ADD(pipeline, |
| 111 | +dnl pipe id, dai type, dai_index, dai_be, |
| 112 | +dnl buffer, periods, format, |
| 113 | +dnl deadline, priority, core, time_domain) |
| 114 | + |
| 115 | +DAI_ADD(sof/pipe-dai-playback.m4, |
| 116 | + 1, ACPTDM, 1, acp-i2s1-codec, |
| 117 | + PIPELINE_SOURCE_1, 2, s16le, |
| 118 | + 2000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) |
| 119 | + |
| 120 | +DAI_ADD(sof/pipe-dai-capture.m4, |
| 121 | + 4, ACPTDM, 1, acp-i2s1-codec, |
| 122 | + PIPELINE_SINK_4, 2, s16le, |
| 123 | + 2000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) |
| 124 | +dnl DAI_CONFIG(type, dai_index, link_id, name, ACPTDM_config/acpdmic_config) |
| 125 | +dnl ACPTDM_CONFIG(format, mclk, bclk, fsync, tdm, ACPTDM_config_data) |
| 126 | +dnl ACP_CLOCK(clock, freq, codec_provider, polarity) |
| 127 | +dnl ACPTDM_CONFIG_DATA(type, idx, valid bits, mclk_id) |
| 128 | +dnl mclk_id is optional |
| 129 | + |
| 130 | +DAI_CONFIG(ACPTDM, 1, 1, acp-i2s1-codec, |
| 131 | + ACPTDM_CONFIG(I2S, ACP_CLOCK(mclk, 49152000, codec_mclk_in), |
| 132 | + ACP_CLOCK(bclk, 3072000, codec_consumer), |
| 133 | + ACP_CLOCK(fsync, 48000, codec_consumer), |
| 134 | + ACP_TDM(2, 32, 3, 3), ACPTDM_CONFIG_DATA(ACPTDM, 1, 48000, 2, 0))) |
| 135 | + |
| 136 | +dnl PCM_DUPLEX_ADD(name, pcm_id, playback_pipeline, capture_pipeline) |
| 137 | +PCM_DUPLEX_ADD(I2STDM1, 1, PIPELINE_PCM_1, PIPELINE_PCM_4) |
| 138 | + |
| 139 | +#==================================================================================================================== |
| 140 | +# TDM instance 2 |
| 141 | + |
| 142 | +dnl PIPELINE_PCM_ADD(pipeline, |
| 143 | +dnl pipe id, pcm, max channels, format, |
| 144 | +dnl period, priority, core, |
| 145 | +dnl pcm_min_rate, pcm_max_rate, pipeline_rate) |
| 146 | + |
| 147 | +PIPELINE_PCM_ADD(sof/pipe-passthrough-playback.m4, |
| 148 | + 2, 2, 2, s16le, |
| 149 | + 2000, 0, 0, |
| 150 | + 48000, 48000, 48000) |
| 151 | +PIPELINE_PCM_ADD(sof/pipe-passthrough-capture.m4, |
| 152 | + 5, 2, 2, s16le, |
| 153 | + 2000, 0, 0, |
| 154 | + 48000, 48000, 48000) |
| 155 | + |
| 156 | +dnl DAI_ADD(pipeline, |
| 157 | +dnl pipe id, dai type, dai_index, dai_be, |
| 158 | +dnl buffer, periods, format, |
| 159 | +dnl deadline, priority, core, time_domain) |
| 160 | + |
| 161 | +DAI_ADD(sof/pipe-dai-playback.m4, |
| 162 | + 2, ACPTDM, 2, acp-i2s2-codec, |
| 163 | + PIPELINE_SOURCE_2, 2, s16le, |
| 164 | + 2000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) |
| 165 | + |
| 166 | +DAI_ADD(sof/pipe-dai-capture.m4, |
| 167 | + 5, ACPTDM, 2, acp-i2s2-codec, |
| 168 | + PIPELINE_SINK_5, 2, s16le, |
| 169 | + 2000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER) |
| 170 | + |
| 171 | +dnl DAI_CONFIG(type, dai_index, link_id, name, ACPTDM_config/acpdmic_config) |
| 172 | +dnl ACPTDM_CONFIG(format, mclk, bclk, fsync, tdm, ACPTDM_config_data) |
| 173 | +dnl ACP_CLOCK(clock, freq, codec_provider, polarity) |
| 174 | +dnl ACPTDM_CONFIG_DATA(type, idx, valid bits, mclk_id) |
| 175 | +dnl mclk_id is optional |
| 176 | + |
| 177 | +DAI_CONFIG(ACPTDM, 2, 2, acp-i2s2-codec, |
| 178 | + ACPTDM_CONFIG(I2S, ACP_CLOCK(mclk, 49152000, codec_mclk_in), |
| 179 | + ACP_CLOCK(bclk, 3072000, codec_consumer), |
| 180 | + ACP_CLOCK(fsync, 48000, codec_consumer), |
| 181 | + ACP_TDM(2, 32, 3, 3), ACPTDM_CONFIG_DATA(ACPTDM, 2, 48000, 2, 0))) |
| 182 | + |
| 183 | +dnl PCM_DUPLEX_ADD(name, pcm_id, playback_pipeline, capture_pipeline) |
| 184 | +PCM_DUPLEX_ADD(I2STDM2, 2, PIPELINE_PCM_2, PIPELINE_PCM_5) |
| 185 | +#==================================================================================================================== |
| 186 | + |
| 187 | +DEBUG_END |
0 commit comments