From d0402194760abefeb67a9b616313deacdea61a56 Mon Sep 17 00:00:00 2001 From: Kai Vehmanen Date: Fri, 23 Oct 2026 13:33:44 +0300 Subject: [PATCH] topology2: dmic-wov: fix KPB output pin binding to the host copier The KPB output pin 2 is bound to DMIC1_HOST_PIPELINE_SINK, which still uses the old host copier name 'copier.host.18.1'. The host copier is now named after its PCM ID, 'host-copier.11.capture', which is also what the routes use. When the DMIC16k PCM is opened, the kernel cannot find the host copier in the KPB pin binding and fails to bind the route in sof_ipc4_get_queue_id(): warning: W007 route 'kpb.19.1' -> 'host-copier.11.capture': 'host-copier.11.capture' is not in the output pin binding of 'kpb.19.1' (fails when PCM 'DMIC16k' capture is opened) Fix the issue by using correct host copier name. dmic-default.conf already defines DMIC1_PCM_ID 11, the documented DMIC1 PCM ID. Use it for the host copier pcm_id and the PCM id, and derive the host copier name "host-copier.$DMIC1_PCM_ID.capture" from it in the KPB pin binding and in both routes. alsatplg does not expand variables in Define values, so DMIC1_HOST_PIPELINE_SINK cannot be derived from DMIC1_PCM_ID; drop it, nothing else uses it. Signed-off-by: Kai Vehmanen --- .../topology2/platform/intel/dmic-default.conf | 1 - tools/topology/topology2/platform/intel/dmic-wov.conf | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tools/topology/topology2/platform/intel/dmic-default.conf b/tools/topology/topology2/platform/intel/dmic-default.conf index 1bb96a45465b..7e11a7a3bded 100644 --- a/tools/topology/topology2/platform/intel/dmic-default.conf +++ b/tools/topology/topology2/platform/intel/dmic-default.conf @@ -25,7 +25,6 @@ Define { DMIC1_HOST_PIPELINE_ID 18 DMIC1_DAI_PIPELINE_ID 19 WOV_PIPELINE_ID 20 - DMIC1_HOST_PIPELINE_SINK 'copier.host.18.1' DMIC_WOV_DAI_PIPELINE_SRC 'dai-copier.DMIC.dmic16k.capture' DMIC_WOV_DAI_PIPELINE_KPB 'kpb.19.1' WOV_PIPELINE_SINK 'micsel.20.1' diff --git a/tools/topology/topology2/platform/intel/dmic-wov.conf b/tools/topology/topology2/platform/intel/dmic-wov.conf index db9b9a45129b..430a2a932812 100644 --- a/tools/topology/topology2/platform/intel/dmic-wov.conf +++ b/tools/topology/topology2/platform/intel/dmic-wov.conf @@ -9,7 +9,7 @@ Object.Pipeline { Object.Widget.host-copier.1 { stream_name $DMIC1_PCM_CAPS - pcm_id 11 + pcm_id $DMIC1_PCM_ID num_output_audio_formats 2 Object.Base.output_audio_format [ { @@ -87,7 +87,7 @@ Object.Pipeline { output_pin_binding_name $WOV_PIPELINE_SINK } Object.Base.output_pin_binding.2 { - output_pin_binding_name $DMIC1_HOST_PIPELINE_SINK + output_pin_binding_name "host-copier.$DMIC1_PCM_ID.capture" } Object.Base.output_pin_binding.3 { output_pin_binding_name "NotConnected" @@ -116,7 +116,7 @@ Object.Base.route [ } { source $DMIC_WOV_DAI_PIPELINE_KPB - sink "host-copier.11.capture" + sink "host-copier.$DMIC1_PCM_ID.capture" } { source $DMIC_WOV_DAI_PIPELINE_KPB @@ -124,14 +124,14 @@ Object.Base.route [ } { source $WOV_PIPELINE_VIRTUAL - sink "host-copier.11.capture" + sink "host-copier.$DMIC1_PCM_ID.capture" } ] Object.PCM.pcm [ { name "DMIC16k" - id 11 + id $DMIC1_PCM_ID direction "capture" capture_compatible_d0i3 true Object.Base.fe_dai.1 {