diff --git a/tools/topology/topology2/cavs-windows-simple-pipeline.conf b/tools/topology/topology2/cavs-windows-simple-pipeline.conf new file mode 100644 index 000000000..4bfe17cdf --- /dev/null +++ b/tools/topology/topology2/cavs-windows-simple-pipeline.conf @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +# a typical windows playback pipeline +# pipeline 1 --------------- pipeline 2 +# copier -> mixin --------------> mixout -> gain -> copier + +Object.Dai { + HDA.0 { + name 'Analog Playback and Capture' + id 4 + index 0 + default_hw_conf_id 4 + Object.Base.hw_config.HDA0 [ + ] + Object.Widget.copier.0 { + direction playback + index 1 + dai_index 1 + type dai_in + dai_type "HDA" + copier_type "HDA" + stream_name 'Analog Playback and Capture' + period_sink_count 0 + period_source_count 2 + format s32le + } + Object.Widget.copier.1 { + direction capture + index 2 + dai_index 2 + type dai_out + dai_type "HDA" + copier_type "HDA" + stream_name 'Analog Playback and Capture' + dai_index 1 + period_sink_count 2 + period_source_count 0 + format s32le + } + direction duplex + } +} + +Object.Pipeline { + mixin-playback.1 { + Object.Widget.pipeline.1 { + stream_name 'mixin.playback' + } + Object.Widget.copier.1{ + stream_name 'Gain Playback 0' + } + + Object.Widget.mixin.1{ + } + + format s16le + } + + gain-capture.2 { + Object.Widget.pipeline.1 { + stream_name 'copier.HDA.1.capture' + } + Object.Widget.copier.1{ + stream_name 'Gain Capture 0' + } + Object.Widget.gain.1{ + Object.Control.mixer.1 { + name 'Main gain capture 0' + } + } + + format s16le + } +} + +Object.Pipeline { + mixout-gain-playback.3 { + Object.Widget.pipeline.1 { + stream_name 'copier.HDA.0.playback' + } + Object.Widget.mixout.1{ + } + + Object.Widget.gain.1{ + Object.Control.mixer.1 { + name 'Main gain playback 0' + } + } + + format s16le + } +} + +Object.PCM { + pcm.0 { + name 'HDA Analog' + Object.Base.fe_dai.'HDA Analog' [ + ] + Object.PCM.pcm_caps.playback { + name 'Gain Playback 0' + formats 'S32_LE,S16_LE' + } + Object.PCM.pcm_caps.capture { + name 'Gain Capture 0' + formats 'S32_LE,S16_LE' + } + direction duplex + } +} + +Object.Base.route.1 { + source 'copier.host.1.1' + sink 'mixin.1.1' +} + +Object.Base.route.2 { + source 'mixin.1.1' + sink 'mixout.3.1' +} + +Object.Base.route.3 { + source 'mixout.3.1' + sink 'gain.3.1' +} + +Object.Base.route.4 { + source 'gain.3.1' + sink 'copier.HDA.1.0' +} + +Object.Base.route.5 { + source 'copier.HDA.2.1' + sink 'gain.2.1' +} + +Object.Base.route.6 { + source 'gain.2.1' + sink 'copier.host.2.1' +} + +Object.Widget.virtual { + codec0_in { + type input + index 1 + } + codec1_in { + type input + index 2 + } + codec0_out { + type output + index 3 + } + codec1_out { + type output + index 4 + } + codec2_in { + type input + index 5 + } + codec2_out { + type output + index 6 + } + iDisp1_out { + type output + index 7 + } + iDisp2_out { + type output + index 8 + } + iDisp3_out { + type output + index 9 + } + 'iDisp3 Tx' { + type out_drv + index 0 + } + 'iDisp2 Tx' { + type out_drv + index 1 + } + 'iDisp1 Tx' { + type out_drv + index 2 + } + 'Analog CPU Playback' { + type out_drv + index 3 + } + 'Digital CPU Playback' { + type out_drv + index 4 + } + 'Alt Analog CPU Playback' { + type out_drv + index 5 + } + 'Analog CPU Capture' { + type input + index 6 + } + 'Digital CPU Capture' { + type input + index 7 + } + 'Alt Analog CPU Capture' { + type input + index 8 + } +} diff --git a/tools/topology/topology2/include/common/tokens.conf b/tools/topology/topology2/include/common/tokens.conf index 761af3543..027b2c245 100644 --- a/tools/topology/topology2/include/common/tokens.conf +++ b/tools/topology/topology2/include/common/tokens.conf @@ -108,4 +108,7 @@ Object.Base.VendorToken { channels 1401 } + "sof_tkn_mixinout" { + mix_type 1700 + } } diff --git a/tools/topology/topology2/include/components/mixin.conf b/tools/topology/topology2/include/components/mixin.conf new file mode 100644 index 000000000..a5c6b4257 --- /dev/null +++ b/tools/topology/topology2/include/components/mixin.conf @@ -0,0 +1,100 @@ +# +# Common widget mixin +# +# A generic mixin widget. All attributes defined herein are namespaced +# by alsatplg to "Object.Widget.mixin.N.attribute_name" +# +# Usage: this component can be used by instantiating it in the parent object. i.e. +# +# Object.Widget.mixin."N" { +# type "mixer" +# mix_type "mix_in" +# } +# +# Where N is the unique instance number for the mixin object within the same alsaconf node. + +Class.Widget."mixin" { + # + # Pipeline ID for the mixin object + # + DefineAttribute."index" {} + + # + # Mixin object instance + # + DefineAttribute."instance" {} + + DefineAttribute."mix_type" { + type "string" + token_ref "sof_tkn_mixinout.word" + constraints { + !valid_values [ + "mix_in" + "mix_out" + ] + !tuple_values [ + 0 + 1 + ] + } + } + + #include common component definition + + + # + # Copier component UUID + # + DefineAttribute."uuid" { + type "string" + # Token set reference name and type + token_ref "sof_tkn_comp.uuid" + } + + attributes { + # + # The mixin widget name would be constructed using the index and + # instance attributes. For ex: "mixin.0.1". + # + !constructor [ + "index" + "instance" + ] + + # + # mandatory attributes that must be provided when the class is instantiated + # + !mandatory [ + "no_pm" + "uuid" + "mix_type" + ] + + # + # immutable attributes cannot be modified in the object instance + # + !immutable [ + "uuid" + ] + + # + # deprecated attributes should not be added in the object instance + # + !deprecated [ + "preload_count" + ] + + unique "instance" + } + + # + # Default attributes for mixin + # + type "mixer" + mix_type "mix_in" + + #UUID: 39656EB2-3B71-4049-8D3F-F92CD5C43C09 + uuid "b2:6e:65:39:71:3b:49:40:8d:3f:f9:2c:d5:c4:3c:09" + no_pm "true" + core_id 0 +} diff --git a/tools/topology/topology2/include/components/mixout.conf b/tools/topology/topology2/include/components/mixout.conf new file mode 100644 index 000000000..eaa5a4a6e --- /dev/null +++ b/tools/topology/topology2/include/components/mixout.conf @@ -0,0 +1,100 @@ +# +# Common widget mixout +# +# A generic mixout widget. All attributes defined herein are namespaced +# by alsatplg to "Object.Widget.mixout.N.attribute_name" +# +# Usage: this component can be used by instantiating it in the parent object. i.e. +# +# Object.Widget.mixout."N" { +# type "mixer" +# mix_type "mix_out" +# } +# +# Where N is the unique instance number for the mixout object within the same alsaconf node. + +Class.Widget."mixout" { + # + # Pipeline ID for the mixout object + # + DefineAttribute."index" {} + + # + # Mixout object instance + # + DefineAttribute."instance" {} + + DefineAttribute."mix_type" { + type "string" + token_ref "sof_tkn_mixinout.word" + constraints { + !valid_values [ + "mix_in" + "mix_out" + ] + !tuple_values [ + 0 + 1 + ] + } + } + + #include common component definition + + + # + # Copier component UUID + # + DefineAttribute."uuid" { + type "string" + # Token set reference name and type + token_ref "sof_tkn_comp.uuid" + } + + attributes { + # + # The mixout widget name would be constructed using the index and + # instance attributes. For ex: "mixout.0.1". + # + !constructor [ + "index" + "instance" + ] + + # + # mandatory attributes that must be provided when the class is instantiated + # + !mandatory [ + "no_pm" + "uuid" + "mix_type" + ] + + # + # immutable attributes cannot be modified in the object instance + # + !immutable [ + "uuid" + ] + + # + # deprecated attributes should not be added in the object instance + # + !deprecated [ + "preload_count" + ] + + unique "instance" + } + + # + # Default attributes for mixout + # + type "mixer" + mix_type "mix_out" + + #UUID: 3C56505A-24D7-418F-BDDC-C1F5A3AC2AE0 + uuid "5a:50:56:3c:d7:24:8f:41:bd:dc:c1:f5:a3:ac:2a:e0" + no_pm "true" + core_id 0 +} diff --git a/tools/topology/topology2/include/pipelines/cavs/mixin-playback.conf b/tools/topology/topology2/include/pipelines/cavs/mixin-playback.conf new file mode 100644 index 000000000..c49b89187 --- /dev/null +++ b/tools/topology/topology2/include/pipelines/cavs/mixin-playback.conf @@ -0,0 +1,69 @@ +# +# windows normal playback pipeline +# +# A windows pipeline. All attributes defined herein are namespaced +# by alsatplg to "Object.Pipeline.mixin-playback.N.attribute_name" +# +# Usage: mixin-playback pipeline object can be instantiated as: +# +# Object.Pipeline.mixin-playback."N" { +# format "s16le" +# period 1000 +# time_domain "timer" +# channels 2 +# rate 48000 +# } +# +# Where N is the unique pipeline ID within the same alsaconf node. +# + +Class.Pipeline."mixin-playback" { + + DefineAttribute."index" {} + + + + attributes { + !constructor [ + "index" + ] + + !mandatory [ + "format" + ] + + !immutable [ + "direction" + ] + + # + # mixin-playback objects instantiated within the same alsaconf node must have + # unique pipeline_id attribute + # + unique "index" + } + + Object.Widget { + copier."1" { + copier_type "host" + type "aif_in" + } + + mixin."1" { + } + + pipeline."1" { + priority 0 + lp_mode 0 + } + } + + direction "playback" + time_domain "timer" + channels 2 + channels_min 2 + channels_max 2 + rate 48000 + rate_min 48000 + rate_max 48000 +} diff --git a/tools/topology/topology2/include/pipelines/cavs/mixout-gain-playback.conf b/tools/topology/topology2/include/pipelines/cavs/mixout-gain-playback.conf new file mode 100644 index 000000000..a3e59ea6b --- /dev/null +++ b/tools/topology/topology2/include/pipelines/cavs/mixout-gain-playback.conf @@ -0,0 +1,67 @@ +# +# windows mixout-gain playback pipeline +# +# A windows pipeline. All attributes defined herein are namespaced +# by alsatplg to "Object.Pipeline.mixout-gain-playback.N.attribute_name" +# +# Usage: mixout-gain-playback pipeline object can be instantiated as: +# +# Object.Pipeline.mixout-gain-playback."N" { +# format "s16le" +# period 1000 +# time_domain "timer" +# channels 2 +# rate 48000 +# } +# +# Where N is the unique pipeline ID within the same alsaconf node. +# + +Class.Pipeline."mixout-gain-playback" { + + DefineAttribute."index" {} + + + + attributes { + !constructor [ + "index" + ] + + !mandatory [ + "format" + ] + + !immutable [ + "direction" + ] + + # + # mixout-gain-playback objects instantiated within the same alsaconf node must have + # unique pipeline_id attribute + # + unique "index" + } + + Object.Widget { + mixout."1" { + } + + gain."1" { + } + + pipeline."1" { + priority 0 + lp_mode 0 + } + } + + direction "playback" + time_domain "timer" + channels 2 + channels_min 2 + channels_max 2 + rate 48000 + rate_min 48000 + rate_max 48000 +}