From 0cf88b347ff7b8a0b7a3828427b3bfcbb2ab35a6 Mon Sep 17 00:00:00 2001 From: Kai Vehmanen Date: Fri, 23 Oct 2026 13:32:10 +0300 Subject: [PATCH 1/2] topology2: cavs-nocodec.conf: set input pins of SSP1 passthrough DAI copier With PASSTHROUGH=true the SSP1 playback DAI copier is instantiated from the io-gateway class, which does not set num_input_pins, and unlike the SSP0 passthrough DAI copier the instance does not set it either. The kernel sees 0 input pins and fails to bind the host copier to it when the PCM is opened, in sof_ipc4_get_queue_id(): warning: W007 route 'host-copier.1.playback' -> 'dai-copier.SSP.NoCodec-1.playback': 'dai-copier.SSP.NoCodec-1.playback' has 0 input pins (fails when PCM 'Port1' playback is opened) Set num_input_pins 1 like for the SSP0 passthrough DAI copier. Only the PASSTHROUGH=true topologies change. Signed-off-by: Kai Vehmanen --- tools/topology/topology2/cavs-nocodec.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/topology/topology2/cavs-nocodec.conf b/tools/topology/topology2/cavs-nocodec.conf index aec5016de76d..6771ef5567df 100644 --- a/tools/topology/topology2/cavs-nocodec.conf +++ b/tools/topology/topology2/cavs-nocodec.conf @@ -2040,6 +2040,7 @@ IncludeByKey.SSP1_ENABLED { copier_type "SSP" stream_name "NoCodec-1" node_type $I2S_LINK_OUTPUT_CLASS + num_input_pins 1 num_input_audio_formats 1 Object.Base.input_audio_format [ { From 0d7713c19afc88f46e454ed0ab784414eec62d6b Mon Sep 17 00:00:00 2001 From: Kai Vehmanen Date: Fri, 23 Oct 2026 13:32:49 +0300 Subject: [PATCH 2/2] topology2: cavs-nocodec.conf: limit Port0 formats in passthrough mode The Port0 PCM always advertises U8, A_LAW, MU_LAW and FLOAT_LE in addition to the S16/S24/S32 formats. With PASSTHROUGH=true the PCM is connected to passthrough host copiers that only have integer formats, so hw_params with any of the extra formats fails in sof_ipc4_init_input_audio_fmt() with "Unsupported audio format": warning: F002 PCM 'Port0' (id 0): playback: PCM allows U8, FLOAT_LE, MU_LAW, A_LAW but host copier 'host-copier.0.playback' has no such format Advertise only S16_LE, S24_LE and S32_LE in passthrough mode. The topologies without PASSTHROUGH=true are unchanged. Signed-off-by: Kai Vehmanen --- tools/topology/topology2/cavs-nocodec.conf | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/topology/topology2/cavs-nocodec.conf b/tools/topology/topology2/cavs-nocodec.conf index 6771ef5567df..a3836f3ef575 100644 --- a/tools/topology/topology2/cavs-nocodec.conf +++ b/tools/topology/topology2/cavs-nocodec.conf @@ -1582,7 +1582,6 @@ Object.PCM.pcm [ Object.PCM.pcm_caps.1 { direction "playback" name "SSP0 Playback" - formats 'S16_LE,S24_LE,S32_LE,U8,A_LAW,MU_LAW,FLOAT_LE' IncludeByKey.SSP0_RATE { "48000" { rates '48000' @@ -1594,18 +1593,30 @@ Object.PCM.pcm [ rates '192000' } } + # the passthrough host copiers support integer formats only IncludeByKey.PASSTHROUGH { "false" { + formats 'S16_LE,S24_LE,S32_LE,U8,A_LAW,MU_LAW,FLOAT_LE' channels_min 1 channels_max 8 } + "true" { + formats 'S16_LE,S24_LE,S32_LE' + } } } Object.PCM.pcm_caps.2 { direction "capture" name "SSP0 Capture" - formats 'S16_LE,S24_LE,S32_LE,U8,A_LAW,MU_LAW,FLOAT_LE' + IncludeByKey.PASSTHROUGH { + "false" { + formats 'S16_LE,S24_LE,S32_LE,U8,A_LAW,MU_LAW,FLOAT_LE' + } + "true" { + formats 'S16_LE,S24_LE,S32_LE' + } + } IncludeByKey.SSP0_RATE { "48000" { rates '48000'