* [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails
@ 2026-07-15 15:08 Salman S. Tahir
2026-07-15 15:50 ` Richard Fitzgerald
0 siblings, 1 reply; 5+ messages in thread
From: Salman S. Tahir @ 2026-07-15 15:08 UTC (permalink / raw)
To: patches, rf; +Cc: linux-sound, alsa-devel
Hi,
On a Lenovo Yoga 9 2-in-1 14ILL10 (83LC, Core Ultra 7 258V / Lunar Lake;
CS42L43
plus two SPI-attached CS35L56 amps behind it) the machine has no sound
card at all
on 7.2-rc3. /proc/asound/cards is empty and PipeWire falls back to a
null sink.
The right-hand amp's ASoC component probe times out waiting for
init_completion,
returns -ENODEV, and ASoC then tears down the entire card -- so
speakers, internal
mics, headset and all three HDMI outputs die because of one failed
component:
[ 10.301...] cs35l56 spi-cs35l56-right: _cs35l56_component_probe:
init_completion timed out
[ 10.301...] cs35l56 spi-cs35l56-right: ASoC error (-19): at
snd_soc_component_probe() on spi-cs35l56-right
[ 10.302...] sof_sdw sof_sdw: ASoC: failed to instantiate card -19
This is 100% reproducible. Scanning my whole journal (151 boots, back to
2026-03-07): 11 failures in 11 boots on 7.2.0-rc3, against 0 failures in
138 boots
on every kernel I ran before it -- 6.17.0-14 (1 boot), 6.19.4 (83),
7.0.0-15 (20),
7.0.0-22 (20), 7.0.0-27 (14). It breaks at the first 7.2-rc3 boot and
has failed
every one since. (A 12th 7.2-rc3 boot is clean, but only because of the
workaround
described below.) Those failures were all captured on an otherwise stock
machine --
clean kernel cmdline, distro modprobe.d only, no out-of-tree modules
(other than the
timeout experiment below), no DSDT override, distro Cirrus firmware. I
now run a
local workaround (a snd_soc_sof_sdw blacklist plus a service that loads
it late --
described below); I can drop it and reproduce the failure on demand.
This is not a slow-firmware race
--------------------------------
The obvious reading of that log is "the amp is a bit too slow and misses
the 5s
deadline". It isn't, and I want to save you from chasing that. I rebuilt
snd-soc-cs35l56 for 7.2-rc3 with a single change -- the component-probe
wait at
sound/soc/codecs/cs35l56.c:1371, msecs_to_jiffies(5000) ->
msecs_to_jiffies(30000)
-- and booted it. It fails identically, just later:
component-probe timeout | wait expires at | right amp's cs35l56_init()
actually starts
------------------------+-----------------+-------------------------------------------
5000 ms (stock) | 10.301 s | 10.355 s -- 54 ms after the wait gave up
30000 ms (patched) | 35.901 s | 36.005 s -- 104 ms after the wait gave up
During the entire 30-second wait the right amp emits nothing. It does
not even reach
the cs35l56_hw_init() identification print that the left amp produced at
5.29 s:
[ 5.294911] cs35l56 spi-cs35l56-left: Cirrus Logic CS35L56 Rev B0 OTP3
fw:3.4.4 (patched=0)
[ 5.603038] cs35l56 spi-cs35l56-left: DSP1:
cirrus/cs35l56-b0-dsp1-misc-17aa3832-spkid0.wmfw: format 3 ...
[ 7.681077] cs35l56 spi-cs35l56-left: DSP1: Firmware: 1a00d6 vendor: 0x2
v3.11.26, 41 algorithms
[ 9.498049] cs35l56 spi-cs35l56-left: Calibration applied
<-- 26 seconds of silence from the right amp -->
[ 35.901035] cs35l56 spi-cs35l56-right: _cs35l56_component_probe:
init_completion timed out
[ 35.902534] sof_sdw sof_sdw: ASoC: failed to instantiate card -19
[ 36.005138] cs35l56 spi-cs35l56-right: Cirrus Logic CS35L56 Rev B0 OTP3
fw:3.4.4 (patched=0)
So the right amp's init is not losing a race against the deadline -- it
is blocked by
the wait itself, and only proceeds once the waiter gives up. Increasing
the timeout
just increases the wait; a 300-second timeout would fail at 305 seconds.
The amp is
not slow: once released it completes cs35l56_init() normally. (It gets
no firmware
download at that point -- the timeout path returns -ENODEV well before the
queue_work(&cs35l56->dsp_work) at the end of _cs35l56_component_probe(),
so nothing
ever queues one for it.)
The hardware is fine -- the card is just built ~100 ms too early
----------------------------------------------------------------
After the failed instantiation, spi-cs35l56-right is bound to the
driver, i.e. its
probe returned 0 and complete(&cs35l56->init_completion) did run.
Nothing about the
hardware, the firmware download or the SPI-over-SoundWire path is
broken; the card is
simply instantiated before the right amp is ready, and nothing ever
retries it.
I confirmed that by keeping the deadlock from forming at all, rather
than repairing it
afterwards: blacklist snd_soc_sof_sdw, wait until both amps have
signalled init, then
load it. With no card probe in flight there is nothing to starve the
right amp: both
amps reach their identification print within ~260 ms of each other
(4.744 s and
5.008 s), the component probe's wait returns immediately, no timeout
fires, and the
card registers first time. Both amps are still patched=0 at that point,
so both take
the full firmware-download path, and both calibrate:
[ 19.770067] cs35l56 spi-cs35l56-left: Calibration applied
[ 19.777038] cs35l56 spi-cs35l56-right: Calibration applied
That boot has since suspended and resumed with the card intact, and
contains no error
or warning from cs35l56, cs42l43 or SOF at all.
Hypothesis (unverified -- offered only as a starting point)
-----------------------------------------------------------
Something in 7.2 appears to have changed the ordering such that the
right amp's probe
and the sof_sdw card probe end up on the same execution context (the
deferred-probe
worker would fit the ~100 ms lag), so the blocking wait in
_cs35l56_component_probe()
starves the very work it is waiting for. I have not confirmed that, and
I have not
bisected -- I am reporting the reproducible behaviour rather than
guessing at the
culprit commit, and I would rather not send you down a path I only inferred.
Suggested direction
-------------------
Regardless of what changed the ordering, blocking in a component probe
on a completion
that a different probe must signal looks fragile by construction. Returning
-EPROBE_DEFER instead -- letting the driver core retry the card once the
amp is bound
-- would use the mechanism the kernel already has for this, and
snd_soc_bind_card()
already special-cases -EPROBE_DEFER from soc_probe_link_components().
Something along
the lines of:
if (!wait_for_completion_timeout(&cs35l56->init_completion,
msecs_to_jiffies(5000)))
return
dev_err_probe(cs35l56->https://www.google.com/url?q=http://base.dev&source=gmail&ust=1784212475584000&sa=E,
-EPROBE_DEFER,
"init_completion not signalled, deferring\n");
I have not tested that; I did not want to submit a patch built on a
mechanism I have
only hypothesised.
I have the hardware, I can reproduce this on every boot, and I am happy
to test
patches, run instrumented builds, or bisect if that would help. Just
tell me what
would be most useful.
Environment
-----------
- Lenovo Yoga 9 2-in-1 14ILL10 (83LC), Core Ultra 7 258V (Lunar Lake)
- CS42L43 (SoundWire) + 2x CS35L56 Rev B0, SPI-attached via the CS42L43
- Firmware: cirrus/cs35l56-b0-dsp1-misc-17aa3832-spkid0.wmfw v3.11.26
(distro linux-firmware)
- Bad: 7.2-rc3 (7.2.0-070200rc3-generic, mainline build) -- 11 failures
/ 11 boots
- Good: 7.0.0-27 (14 boots), 7.0.0-22 (20), 7.0.0-15 (20), 6.19.4 (83),
6.17.0-14 (1)
-- 138 boots, 0 failures
- Only the 30 s-timeout boot above ran a rebuilt (out-of-tree,
kernel-tainting)
snd-soc-cs35l56; every stock-timeout failure was on the untainted distro
module
- Not bisected
- Workaround currently in place: blacklist snd_soc_sof_sdw + a systemd
unit that
modprobes it once both amps have signalled init. Removable on request --
I can
reproduce the failure on any boot.
Thanks,
Salman S. Tahir
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails
2026-07-15 15:08 Salman S. Tahir
@ 2026-07-15 15:50 ` Richard Fitzgerald
0 siblings, 0 replies; 5+ messages in thread
From: Richard Fitzgerald @ 2026-07-15 15:50 UTC (permalink / raw)
To: Salman S. Tahir, patches; +Cc: linux-sound, alsa-devel
On 15/07/2026 4:08 pm, Salman S. Tahir wrote:
> Hi,
>
> On a Lenovo Yoga 9 2-in-1 14ILL10 (83LC, Core Ultra 7 258V / Lunar Lake;
> CS42L43
> plus two SPI-attached CS35L56 amps behind it) the machine has no sound
> card at all
> on 7.2-rc3. /proc/asound/cards is empty and PipeWire falls back to a
> null sink.
>
> The right-hand amp's ASoC component probe times out waiting for
> init_completion,
> returns -ENODEV, and ASoC then tears down the entire card -- so
> speakers, internal
> mics, headset and all three HDMI outputs die because of one failed
> component:
>
> [ 10.301...] cs35l56 spi-cs35l56-right: _cs35l56_component_probe:
> init_completion timed out
> [ 10.301...] cs35l56 spi-cs35l56-right: ASoC error (-19): at
> snd_soc_component_probe() on spi-cs35l56-right
> [ 10.302...] sof_sdw sof_sdw: ASoC: failed to instantiate card -19
<SNIP>
> The hardware is fine -- the card is just built ~100 ms too early
This (and the later debug and hypothesis) doesn't actually make any
sense. The code that signals init_completion is done synchronously
during the driver probe() of the cs35l56 driver, before it returns
from probe().
However there is a bug if component_probe() can be called multiple
times.
Please try this change:
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index f365f76ce56c1..f46fd8e7bc039 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -2109,7 +2109,7 @@ int cs35l56_init(struct cs35l56_private *cs35l56)
return dev_err_probe(cs35l56->base.dev, ret, "Failed to
write ASP1_CONTROL3\n");
cs35l56->base.init_done = true;
- complete(&cs35l56->init_completion);
+ complete_all(&cs35l56->init_completion);
return 0;
}
<SNIP>
> Regardless of what changed the ordering, blocking in a component probe
> on a completion
> that a different probe must signal looks fragile by construction. Returning
> -EPROBE_DEFER instead -- letting the driver core retry the card once the
> amp is bound
Returning -EPROBE_DEFER from component_probe() would make no difference
to that, because the code that signals the completion has already run
during probe(). Returning -EPROBE_DEFER from component_probe() won't
make probe() run again.
Also it's wrong to use -EPROBE_DEFER as a general "try again later". It
doesn't work like that. It specifically means that a dependency is not
ready yet and the driver core will try again only when something other
driver has successfully probed.
Be careful of what AI tells you.
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails
[not found] <1bb9628e-3c3b-4b43-906b-0f5bc2f6e4d5@opensource.cirrus.com>
@ 2026-07-16 8:06 ` Salman S. Tahir
2026-07-16 9:12 ` Richard Fitzgerald
2026-07-16 11:32 ` Richard Fitzgerald
0 siblings, 2 replies; 5+ messages in thread
From: Salman S. Tahir @ 2026-07-16 8:06 UTC (permalink / raw)
To: rf; +Cc: patches, linux-sound, alsa-devel
Hi Richard,
Thanks for the diagnosis and the complete() -> complete_all() suggestion. I
tested it before replying, and I'm sorry to report it does not fix the
failure
on this machine (Lenovo Yoga 9i 14ILL10, two SPI CS35L56 B0 amps, 7.2-rc3).
What I ran
----------
I rebuilt snd-soc-cs35l56 with exactly the one change you described:
sound/soc/codecs/cs35l56.c:2111, in cs35l56_init()
- complete(&cs35l56->init_completion);
+ complete_all(&cs35l56->init_completion);
(built module srcversion CEAF5F838FFE0750E41A81F, vermagic matching the
running
kernel). I A/B'd it against the unmodified stock module, with my userspace
workaround removed so the card probes normally each boot. Warm reboots,
otherwise stock machine:
# | module | card | calL | calR | timeout | instFail | verdict
---+----------------------+------+------+------+---------+----------+--------
1 | STOCK | no | yes | no | yes | yes | FAIL
2 | FIX (complete_all) | no | yes | no | yes | yes | FAIL
3 | FIX (complete_all) | no | yes | no | yes | yes | FAIL
Both fix-arm boots fail identically to stock, and to the 11/11 stock
failures
I reported originally: left amp calibrates, right amp never does, the
component
probe times out, and the whole sof_sdw card is torn down.
Timeline (CLOCK_MONOTONIC), stock vs. complete_all
--------------------------------------------------
The two arms are timing-identical, which I think is the key point:
event STOCK(#1) FIX/complete_all(#3)
left amp identified (Rev B0) 5.369s 5.531s
right amp SPI probe binds regulators 5.663s 5.833s
left "Calibration applied" 9.526s 9.698s
right "_cs35l56_component_probe:
init_completion timed out" 10.813s 11.325s
right amp's own "Rev B0" id print 10.877s 11.404s
Log from the fix-arm boot (#3), complete_all() module loaded:
cs35l56 spi-cs35l56-left: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4
(patched=0) [5.531s]
cs35l56 spi-cs35l56-right: supply VDD_P not found, using dummy regulator
[5.833s]
cs35l56 spi-cs35l56-left: DSP1: Firmware: 1a00d6 ... v3.11.26, 41
algorithms [8.053s]
cs35l56 spi-cs35l56-left: Calibration applied [9.698s]
<-- right amp emits nothing at all through here -->
cs35l56 spi-cs35l56-right: _cs35l56_component_probe: init_completion
timed out [11.325s]
cs35l56 spi-cs35l56-right: ASoC error (-19): at
snd_soc_component_probe() on spi-cs35l56-right
sof_sdw sof_sdw: ASoC: failed to instantiate card -19 [11.325s]
cs35l56 spi-cs35l56-right: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4
(patched=0) [11.404s]
Observations, offered as data rather than theory
------------------------------------------------
The right amp's SPI probe binds its regulators at ~5.8s, but the amp then
produces no further log output for ~5.5s. Its own identification print
(early
in cs35l56_init()/hw_init) does not appear until 11.404s -- 79 ms
*after* the
component-probe wait has already timed out at 11.325s. The same holds in the
stock arm (id print 10.877s, 64 ms after the 10.813s timeout).
During that ~5.5s gap the left amp is doing its firmware download
(finishing at
"Calibration applied" 9.698s). So on these boots the completion
(complete() or
complete_all()) is being signalled too late to be waited on, rather than
being
consumed by a second/earlier waiter -- the right amp's init simply hasn't
reached line 2111 by the time the waiter gives up. That's why complete_all()
changes nothing here. I'll leave the mechanism to you rather than speculate.
Caveat: N is small (3 boots) and all warm. But the signature is 100%
consistent
and identical to the 11/11 stock failures, so I'm confident the change
does not
address this failure.
One more data point in favour of the multiple-instantiation angle: my
userspace
workaround is just to blacklist snd_soc_sof_sdw and modprobe it only
after both
amps' SPI probes have returned, so the card is instantiated exactly
once. With
that in place it comes up first time on every boot (including cold).
Single vs.
repeated instantiation seems to be the whole difference here.
You mentioned recent changes to how ASoC probes and re-probes cards possibly
being why this surfaced now -- the "init runs after the wait ends"
timing above
may be a data point for that. I have the hardware and can reproduce on
demand,
so I'm happy to run an instrumented build (e.g. prints/timestamps around the
right amp's init and the component-probe wait), test another patch, or
bisect
the ASoC probe/re-probe changes -- whatever is most useful to you. Just
let me
know.
Thanks again for taking the time.
Salman
On Wed, Jul 15, 2026 07:10 PM, Richard Fitzgerald
<rf@opensource.cirrus.com> wrote:
On 15/07/2026 5:00 pm, Salman S. Tahir wrote:
> Hi Richard and thanks for the prompt response and clarification.
>
> You are right. I am normally very weary of AI, but this one was a
bit
> beyond me!
>
> I will try your change and advise if anything goes wrong or it
doesn't
> work as expected.
It's revealed a genuine bug in the driver. So we will need to get a fix
out for that.
It's likely the cause of your problem.
There were some recent changes to the way ASoC probes and re-probes
cards, which might be why this is only showing up now.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails
2026-07-16 8:06 ` [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails Salman S. Tahir
@ 2026-07-16 9:12 ` Richard Fitzgerald
2026-07-16 11:32 ` Richard Fitzgerald
1 sibling, 0 replies; 5+ messages in thread
From: Richard Fitzgerald @ 2026-07-16 9:12 UTC (permalink / raw)
To: Salman S. Tahir; +Cc: patches, linux-sound, alsa-devel
On 16/07/2026 9:06 am, Salman S. Tahir wrote:
> Hi Richard,
>
> Thanks for the diagnosis and the complete() -> complete_all() suggestion. I
> tested it before replying, and I'm sorry to report it does not fix the
> failure
> on this machine (Lenovo Yoga 9i 14ILL10, two SPI CS35L56 B0 amps, 7.2-rc3).
>
Yeah, I think I see what is going on.
This amp is normally used on SoundWire, and probing is weird on
SoundWire. The probe() must return before hardware is accessible, but it
must call snd_soc_register_component() during probe() because that might
return -EPROBE_DEFER. So we have to start in this strange state where
the ASoC component is created but the hardware isn't accessible.
We don't need this 2-stage startup on SPI or I2C so those call both
stages within probe(). The problem with this is it still calls
snd_soc_register_component() early. If that triggers ASoC to build the
soundcard it will call component_probe() to wait on
init_completion. But that would be running within the cs35l56 driver
probe() so it is blocking probe() from continuing to the point where it
signals the completion.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails
2026-07-16 8:06 ` [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails Salman S. Tahir
2026-07-16 9:12 ` Richard Fitzgerald
@ 2026-07-16 11:32 ` Richard Fitzgerald
1 sibling, 0 replies; 5+ messages in thread
From: Richard Fitzgerald @ 2026-07-16 11:32 UTC (permalink / raw)
To: Salman S. Tahir; +Cc: patches, linux-sound, alsa-devel
[-- Attachment #1: Type: text/plain, Size: 335 bytes --]
On 16/07/2026 9:06 am, Salman S. Tahir wrote:
> Hi Richard,
>
> Thanks for the diagnosis and the complete() -> complete_all() suggestion. I
> tested it before replying, and I'm sorry to report it does not fix the
> failure
> on this machine (Lenovo Yoga 9i 14ILL10, two SPI CS35L56 B0 amps, 7.2-rc3).
Can you try the attached patch?
[-- Attachment #2: 0001-ASoC-cs35l56-Fix-possible-probe-deadlock.patch --]
[-- Type: text/x-patch, Size: 4014 bytes --]
From 1c5daa1645fcb334abb45c6fc383c52c191946a6 Mon Sep 17 00:00:00 2001
From: Richard Fitzgerald <rf@opensource.cirrus.com>
Date: Thu, 16 Jul 2026 11:02:06 +0100
Subject: [PATCH] ASoC: cs35l56: Fix possible probe() deadlock
On I2C/SPI call cs35l56_init() before calling
snd_soc_register_component() to prevent the potential for a deadlock
on init_completion.
For most buses all the hardware would be ready when probe() returns,
but on SoundWire, probe() must return before the SoundWire bus driver
will enumerate the device. All access to the registers must be deferred
until the driver receives an ATTACHED notification. But anything that
could return -EPROBE_DEFER must be called during probe, and that includes
snd_soc_register_component(). Because of that, on SoundWire the ASoC
component can be created before the registers are accssible, so
cs35l56_component_probe() waits for init_completion to signal that the
registers are accessible.
On I2C/SPI this 2-stage startup isn't required so their probe()
functions simply called cs35l56_common_probe() and then cs35l56_init().
The problem with this was that snd_soc_register_component() was still
called early. If this triggered ASoC to create the card, ASoC would call
cs35l56_component_probe() which waits on init_completion - but this would
be running inside the cs35l56 driver probe() so blocking it from reaching
the code that signals init_completion, causing a deadlock.
Fixes: e496112529006 ("ASoC: cs35l56: Add driver for Cirrus Logic CS35L56")
Reported-by: Salman S. Tahir <salman.abusaad@gmail.com>
Closes: https://lore.kernel.org/linux-sound/95c21574-97d5-4311-9263-9e174d22d22c@opensource.cirrus.com/T/#u
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
sound/soc/codecs/cs35l56-i2c.c | 4 +---
sound/soc/codecs/cs35l56-spi.c | 4 +---
sound/soc/codecs/cs35l56.c | 15 +++++++++++++++
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/sound/soc/codecs/cs35l56-i2c.c b/sound/soc/codecs/cs35l56-i2c.c
index 0f64ab628b03b..4f6ddf1c5a3f6 100644
--- a/sound/soc/codecs/cs35l56-i2c.c
+++ b/sound/soc/codecs/cs35l56-i2c.c
@@ -55,9 +55,7 @@ static int cs35l56_i2c_probe(struct i2c_client *client)
if (ret != 0)
return ret;
- ret = cs35l56_init(cs35l56);
- if (ret == 0)
- ret = cs35l56_irq_request(&cs35l56->base, client->irq);
+ ret = cs35l56_irq_request(&cs35l56->base, client->irq);
if (ret < 0)
cs35l56_remove(cs35l56);
diff --git a/sound/soc/codecs/cs35l56-spi.c b/sound/soc/codecs/cs35l56-spi.c
index 9bc9b7c98390d..b1eb924a5b6cc 100644
--- a/sound/soc/codecs/cs35l56-spi.c
+++ b/sound/soc/codecs/cs35l56-spi.c
@@ -44,9 +44,7 @@ static int cs35l56_spi_probe(struct spi_device *spi)
if (ret != 0)
return ret;
- ret = cs35l56_init(cs35l56);
- if (ret == 0)
- ret = cs35l56_irq_request(&cs35l56->base, spi->irq);
+ ret = cs35l56_irq_request(&cs35l56->base, spi->irq);
if (ret < 0)
cs35l56_remove(cs35l56);
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index f46fd8e7bc039..0b7b080939a18 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -2009,6 +2009,16 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56)
goto err;
}
+ /*
+ * On SoundWire the cs35l56_init() cannot be run until after the
+ * device has been enumerated by the SoundWire core.
+ */
+ if (!cs35l56->sdw_peripheral) {
+ ret = cs35l56_init(cs35l56);
+ if (ret)
+ goto err_remove_wm_adsp;
+ }
+
ret = snd_soc_register_component(cs35l56->base.dev,
&soc_component_dev_cs35l56,
cs35l56_dai, ARRAY_SIZE(cs35l56_dai));
@@ -2023,6 +2033,11 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56)
wm_adsp2_remove(&cs35l56->dsp);
err:
+ if (pm_runtime_enabled(cs35l56->base.dev)) {
+ pm_runtime_dont_use_autosuspend(cs35l56->base.dev);
+ pm_runtime_disable(cs35l56->base.dev);
+ }
+
gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 0);
regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies);
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-18 9:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1bb9628e-3c3b-4b43-906b-0f5bc2f6e4d5@opensource.cirrus.com>
2026-07-16 8:06 ` [REGRESSION 7.2-rc3] ASoC: cs35l56: component probe waits for an init_completion that cannot be signalled until the wait ends — whole sof_sdw card fails Salman S. Tahir
2026-07-16 9:12 ` Richard Fitzgerald
2026-07-16 11:32 ` Richard Fitzgerald
2026-07-15 15:08 Salman S. Tahir
2026-07-15 15:50 ` Richard Fitzgerald
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox