diff --git a/tools/topology/m4/muxdemux.m4 b/tools/topology/m4/muxdemux.m4 index b1f7a8bd9fb9..5aadf384a854 100644 --- a/tools/topology/m4/muxdemux.m4 +++ b/tools/topology/m4/muxdemux.m4 @@ -5,7 +5,23 @@ dnl Define macro for demux widget dnl Mux name) define(`N_MUXDEMUX', `MUXDEMUX'PIPELINE_ID`.'$1) -dnl W_MUXDEMUX(name, mux/demux, format, periods_sink, periods_source, kcontrol_list) +dnl CH_MAP_COEFF(coeff) +define(`CH_MAP_COEFF', +` tuples."word.$1" {' +` SOF_TKN_CHANNEL_MAP_COEFF' STR($2) +` }') + +dnl CH_MAP(name, id, ext_id, mask) +define(`CH_MAP', +` tuples."word.$1" {' +` SOF_TKN_CHANNEL_MAP_INDEX' STR($2) +` SOF_TKN_CHANNEL_MAP_EXT_ID' STR($3) +` SOF_TKN_CHANNEL_MAP_MASK' STR($4) +` }' + $5 +) + +dnl W_MUXDEMUX(name, format, periods_sink, periods_source, num_chmaps, chmap_list) define(`W_MUXDEMUX', `SectionVendorTuples."'N_MUXDEMUX($1)`_tuples_w" {' ` tokens "sof_comp_tokens"' @@ -20,18 +36,30 @@ define(`W_MUXDEMUX', `SectionVendorTuples."'N_MUXDEMUX($1)`_tuples_str" {' ` tokens "sof_comp_tokens"' ` tuples."string" {' -` SOF_TKN_COMP_FORMAT' STR($3) -` }' -`}' -`SectionVendorTuples."'N_MUXDEMUX($1)`_mux_process_tuples_str" {' -` tokens "sof_process_tokens"' -` tuples."string" {' -`ifelse(`$2', `0', ` SOF_TKN_PROCESS_TYPE' "MUX", ` SOF_TKN_PROCESS_TYPE' "DEMUX")' +` SOF_TKN_COMP_FORMAT' STR($2) ` }' `}' `SectionData."'N_MUXDEMUX($1)`_data_str" {' ` tuples "'N_MUXDEMUX($1)`_tuples_str"' -` tuples "'N_MUXDEMUX($1)`_mux_process_tuples_str"' +`}' +`SectionVendorTuples."'N_MUXDEMUX($1)`_mux_tuples_type" {' +` tokens "sof_process_tokens"' +` tuples."string" {' +` SOF_TKN_PROCESS_TYPE "MUX"' +` }' +`}' +`SectionData."'N_MUXDEMUX($1)`_data_type" {' +` tuples "'N_MUXDEMUX($1)`_mux_tuples_type"' +`}' +`SectionVendorTuples."'N_MUXDEMUX($1)`_mux_data_tuples_w" {' +` tokens "sof_chmap_tokens"' +` tuples."word" {' +` SOF_TKN_STREAM_MAP_NUM_CH_MAPS' STR($5) +` }' + $6 +`}' +`SectionData."'N_MUXDEMUX($1)`_mux_data_w" {' +` tuples "'N_MUXDEMUX($1)`_mux_data_tuples_w"' `}' `SectionWidget."'N_MUXDEMUX($1)`" {' ` index "'PIPELINE_ID`"' @@ -40,9 +68,8 @@ define(`W_MUXDEMUX', ` data [' ` "'N_MUXDEMUX($1)`_data_w"' ` "'N_MUXDEMUX($1)`_data_str"' -` ]' -` bytes [' - $6 +` "'N_MUXDEMUX($1)`_data_type"' +` "'N_MUXDEMUX($1)`_mux_data_w"' ` ]' `}') diff --git a/tools/topology/sof/pipe-demux-playback.m4 b/tools/topology/sof/pipe-demux-playback.m4 index 9c7795b56f52..64a31b3b5712 100644 --- a/tools/topology/sof/pipe-demux-playback.m4 +++ b/tools/topology/sof/pipe-demux-playback.m4 @@ -22,17 +22,6 @@ include(`muxdemux.m4') include(`mixercontrol.m4') include(`bytecontrol.m4') -# Use default parameters -include(`demux_coef_default.m4') - -# demux Bytes control with max value of 255 -C_CONTROLBYTES(DEMUX, PIPELINE_ID, - CONTROLBYTES_OPS(bytes, 258 binds the mixer control to bytes get/put handlers, 258, 258), - CONTROLBYTES_EXTOPS(258 binds the mixer control to bytes get/put handlers, 258, 258), - , , , - CONTROLBYTES_MAX(, 304), - , - DEMUX_priv) # # Components and Buffers # @@ -42,7 +31,7 @@ C_CONTROLBYTES(DEMUX, PIPELINE_ID, W_PCM_PLAYBACK(PCM_ID, Low Latency Playback, 2, 0) # Mux 0 has 2 sink and source periods. -W_MUXDEMUX(0, 1, PIPELINE_FORMAT, 2, 2, LIST(` ', "DEMUX")) +W_MUXDEMUX(0, PIPELINE_FORMAT, 2, 2, 2, LIST(` ', CH_MAP(map_1, 0, 1, 5, LIST(` ', CH_MAP_COEFF(1, 34954), CH_MAP_COEFF(2, 87343))), CH_MAP(map_2, 1, 5, 5, LIST(` ', CH_MAP_COEFF(3, 12345), CH_MAP_COEFF(4, 54321))))) # Low Latency Buffers W_BUFFER(0, COMP_BUFFER_SIZE(2, diff --git a/tools/topology/sof/pipe-volume-demux-playback.m4 b/tools/topology/sof/pipe-volume-demux-playback.m4 index 5b3ae308ed8f..0b3d82da8409 100644 --- a/tools/topology/sof/pipe-volume-demux-playback.m4 +++ b/tools/topology/sof/pipe-volume-demux-playback.m4 @@ -20,19 +20,6 @@ include(`pcm.m4') include(`pga.m4') include(`muxdemux.m4') include(`mixercontrol.m4') -include(`bytecontrol.m4') - -# Use default parameters -include(`demux_coef_default.m4') - -# demux Bytes control with max value of 255 -C_CONTROLBYTES(DEMUX, PIPELINE_ID, - CONTROLBYTES_OPS(bytes, 258 binds the mixer control to bytes get/put handlers, 258, 258), - CONTROLBYTES_EXTOPS(258 binds the mixer control to bytes get/put handlers, 258, 258), - , , , - CONTROLBYTES_MAX(, 304), - , - DEMUX_priv) # Volume Mixer control with max value of 32 C_CONTROLMIXER(Master Playback Volume, PIPELINE_ID, @@ -65,7 +52,7 @@ W_PCM_PLAYBACK(PCM_ID, Low Latency Playback, 2, 0) W_PGA(1, PIPELINE_FORMAT, DAI_PERIODS, 2, playback_pga_conf, LIST(` ', "PIPELINE_ID Master Playback Volume")) # Mux 0 has 2 sink and source periods. -W_MUXDEMUX(0, 1, PIPELINE_FORMAT, 2, 2, LIST(` ', "DEMUX")) +W_MUXDEMUX(0, PIPELINE_FORMAT, 2, 2, 2, LIST(` ', CH_MAP(map_1, 0, 1, 5, LIST(` ', CH_MAP_COEFF(1, 34954), CH_MAP_COEFF(2, 87343))), CH_MAP(map_2, 1, 5, 5, LIST(` ', CH_MAP_COEFF(3, 12345), CH_MAP_COEFF(4, 54321))))) # Low Latency Buffers W_BUFFER(0, COMP_BUFFER_SIZE(2, diff --git a/tools/topology/sof/tokens.m4 b/tools/topology/sof/tokens.m4 index 68e5496bf918..7a08d85cd447 100644 --- a/tools/topology/sof/tokens.m4 +++ b/tools/topology/sof/tokens.m4 @@ -117,3 +117,11 @@ SectionVendorTokens."sof_led_tokens" { SOF_TKN_MUTE_LED_USE "1300" SOF_TKN_MUTE_LED_DIRECTION "1301" } + +SectionVendorTokens."sof_chmap_tokens" { + SOF_TKN_STREAM_MAP_NUM_CH_MAPS "1400" + SOF_TKN_CHANNEL_MAP_INDEX "1401" + SOF_TKN_CHANNEL_MAP_EXT_ID "1402" + SOF_TKN_CHANNEL_MAP_MASK "1403" + SOF_TKN_CHANNEL_MAP_COEFF "1404" +}