Public bug reported:

[Impact]
Audio shows "Dummy Output" in GNOME and no input devices are available on
Dell systems with a Cirrus Logic cs42l43 codec (SoundWire part_id 0x2A3B).

The regression was introduced by commit 87a3f5c8ac20 (merged in v7.1-rc1),
which moved spk:cs42l43-spk string generation into the generic
asoc_sdw_rtd_init() path. That commit added component_name to the 0x4243
cs42l43 entry but missed the 0x2A3B entry.

Without component_name on the 0x2A3B dp6 DAI, asoc_sdw_rtd_init() never
appends "spk:cs35l56-bridge" to card->components. The sof-soundwire UCM
regex then fails to match a speaker codec, all HiFi profiles are marked
available=no, and WirePlumber falls back to the Off profile with no nodes.

Hits 100% on affected hardware.

[Fix]
Add the missing .component_name = "cs42l43-spk" field to the 0x2A3B cs42l43
entry's AMP DAI in codec_info_list. The existing SOC_SDW_SIDECAR_AMPS
redirect in asoc_sdw_rtd_init() then correctly translates this to
"cs35l56-bridge" in card->components, which matches the UCM regex and the
existing cs35l56-bridge.conf UCM file.

This is an original fix; the same bug exists in linux-next and will be
submitted upstream.

Fixes: 87a3f5c8ac20 ("ASoC: sdw_utils: cs42l43: allow spk component names
to be combined")

[Test Plan]
Boot on affected Dell hardware with cs42l43 0x2A3B codec.

Without patch: GNOME shows "Dummy Output", no microphone listed.

With patch:
1. Check card->components includes spk: token:
   $ cat /sys/class/sound/card0/components | grep -o 'spk:[^ ]*'
   Expected: spk:cs35l56-bridge

2. Check WirePlumber selected HiFi profile:
   $ pw-cli enum-params <sof-soundwire-device-id> EnumProfile | grep -E 
'index|available'
   Expected: active profile has available=yes

3. Test speaker output:
   $ speaker-test -c 2 -l 1 -t wav
   Expected: audio plays without error

[Where problems could occur]
Could affect snd-soc-sdw-utils and any machine using the cs42l43 0x2A3B
codec with sidecar amps.

If the sidecar redirect logic in asoc_sdw_rtd_init() misidentifies the
component, the wrong spk: string could end up in card->components, causing
UCM to select the wrong speaker init config. Speaker output would fail or
use an incorrect routing.

** Affects: linux-oem-6.17 (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: linux-oem-6.17 (Ubuntu Noble)
     Importance: Undecided
         Status: In Progress

** Description changed:

+ [Impact]
+ Audio shows "Dummy Output" in GNOME and no input devices are available on
+ Dell systems with a Cirrus Logic cs42l43 codec (SoundWire part_id 0x2A3B).
+ 
+ The regression was introduced by commit 87a3f5c8ac20 (merged in v7.1-rc1),
+ which moved spk:cs42l43-spk string generation into the generic
+ asoc_sdw_rtd_init() path. That commit added component_name to the 0x4243
+ cs42l43 entry but missed the 0x2A3B entry.
+ 
+ Without component_name on the 0x2A3B dp6 DAI, asoc_sdw_rtd_init() never
+ appends "spk:cs35l56-bridge" to card->components. The sof-soundwire UCM
+ regex then fails to match a speaker codec, all HiFi profiles are marked
+ available=no, and WirePlumber falls back to the Off profile with no nodes.
+ 
+ Hits 100% on affected hardware.
+ 
  [Fix]
  Add the missing .component_name = "cs42l43-spk" field to the 0x2A3B cs42l43
  entry's AMP DAI in codec_info_list. The existing SOC_SDW_SIDECAR_AMPS
  redirect in asoc_sdw_rtd_init() then correctly translates this to
  "cs35l56-bridge" in card->components, which matches the UCM regex and the
  existing cs35l56-bridge.conf UCM file.
  
  This is an original fix; the same bug exists in linux-next and will be
  submitted upstream.
  
  Fixes: 87a3f5c8ac20 ("ASoC: sdw_utils: cs42l43: allow spk component names
  to be combined")
  
  [Test Plan]
  Boot on affected Dell hardware with cs42l43 0x2A3B codec.
  
  Without patch: GNOME shows "Dummy Output", no microphone listed.
  
  With patch:
  1. Check card->components includes spk: token:
-    $ cat /sys/class/sound/card0/components | grep -o 'spk:[^ ]*'
-    Expected: spk:cs35l56-bridge
+    $ cat /sys/class/sound/card0/components | grep -o 'spk:[^ ]*'
+    Expected: spk:cs35l56-bridge
  
  2. Check WirePlumber selected HiFi profile:
-    $ pw-cli enum-params <sof-soundwire-device-id> EnumProfile | grep -E 
'index|available'
-    Expected: active profile has available=yes
+    $ pw-cli enum-params <sof-soundwire-device-id> EnumProfile | grep -E 
'index|available'
+    Expected: active profile has available=yes
  
  3. Test speaker output:
-    $ speaker-test -c 2 -l 1 -t wav
-    Expected: audio plays without error
+    $ speaker-test -c 2 -l 1 -t wav
+    Expected: audio plays without error
  
  [Where problems could occur]
  Could affect snd-soc-sdw-utils and any machine using the cs42l43 0x2A3B
  codec with sidecar amps.
  
  If the sidecar redirect logic in asoc_sdw_rtd_init() misidentifies the
  component, the wrong spk: string could end up in card->components, causing
  UCM to select the wrong speaker init config. Speaker output would fail or
  use an incorrect routing.

** Also affects: linux-oem-6.17 (Ubuntu Noble)
   Importance: Undecided
       Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2156313

Title:
  Audio shows Dummy Output on systems with Cirrus Logic cs42l43 codec

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-oem-6.17/+bug/2156313/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to