ACK: [SRU][Q][PATCH 0/5] Fix the error during suspend on cs42l43

Benjamin Wheeler benjamin.wheeler at canonical.com
Wed Jan 21 21:20:15 UTC 2026


Acked-by: Benjamin Wheeler <benjamin.wheeler at canonical.com>

On Fri, Jan 16, 2026 at 12:59 AM Aaron Ma <aaron.ma at canonical.com> wrote:

> BugLink: https://bugs.launchpad.net/bugs/2138423
>
> [Impact]
> The system fails to read IRQ status after suspend/resume on Lenovo
> systems, resulting in error -16 (EBUSY) in kernel logs:
>
> cs42l43 sdw:0:0:01fa:4243:01: Failed to read IRQ status: -16
>
> This error occurs during system suspend/resume cycles when IRQ handlers
> attempt to access volatile registers on suspended hardware. The race
> condition happens because the MFD driver disables IRQs upon entering
> suspend, but IRQ handlers can run, claim a PM runtime reference, get
> scheduled, and then try to access registers after the device has been force
> suspended.
>
> Affected hardware: Lenovo systems with Cirrus Logic cs42l43 audio codec
> Failure rate: Occurs on every suspend/resume cycle
>
> [Fix]
> This series of 6 patches fixes the IRQ handling race condition during
> system suspend/resume by properly coordinating IRQ masking between the MFD
> driver and child drivers.
>
> The patches are upstream in mainline kernel v6.18:
>
> 1. mfd: cs42l43: Move IRQ enable/disable to encompass force suspend
> (62aec8a0a5b6)
>    - Moves IRQ disabling to cover the whole forced suspend state to avoid
> race conditions
>
> 2. mfd: cs42l43: Remove IRQ masking in suspend (afe0f94992db)
>    - Removes IRQ masking from MFD code since individual child drivers now
> mask their own IRQs
>
> 3. ASoC: cs42l43: Rename system suspend callback and fix debug print
> (638ca7601f41)
>    - Clarifies that the function is a system suspend callback, not runtime
> suspend
>
> 4. ASoC: cs42l43: Store IRQ domain in codec private data (149dda5f42a8)
>    - Prepares for refactoring by storing IRQ domain pointer in private data
>
> 5. ASoC: cs42l43: Disable IRQs in system suspend (a69b4ba19a07)
>    - Masks IRQs and syncs work queues in the codec driver during system
> suspend
>
> 6. ASoC: cs42l43: Shutdown jack detection on suspend (dd7ae5b8b3c2)
>    - Fully powers down jack detection during system suspend
>
> Already in questing :
>    - mfd: cs42l43: Move IRQ enable/disable to encompass force suspend
> (commit 62aec8a0a5b6)
>
> Patches:
>
> https://lore.kernel.org/lkml/20250903094549.271068-1-ckeepax@opensource.cirrus.com/
>
> [Test Plan]
> Suspend and resume the system 30 times using the command:
>
> $ sudo rtcwake -m mem -s 20
>
> Without the patches:
> - The error "cs42l43 sdw:0:0:01fa:4243:01: Failed to read IRQ status: -16"
> appears in dmesg after each resume
> - Check with: $ dmesg | grep "cs42l43.*IRQ.*-16"
>
> With the patches:
> - No IRQ status read errors in dmesg
> - Verify with: $ dmesg | grep "cs42l43.*IRQ.*-16" (should return no
> results)
>
> [Where problems could occur]
> It may break the Cirrus Logic cs42l43 audio codec driver.
>
> The patches are merged upstream in kernel v6.18.
> The hardware is not supported by noble 6.8 kernel.
> So SRU for questing and oem-6.17.
>
> Charles Keepax (5):
>   mfd: cs42l43: Remove IRQ masking in suspend
>   ASoC: cs42l43: Rename system suspend callback and fix debug print
>   ASoC: cs42l43: Store IRQ domain in codec private data
>   ASoC: cs42l43: Disable IRQs in system suspend
>   ASoC: cs42l43: Shutdown jack detection on suspend
>
>  drivers/mfd/cs42l43.c           |  26 --------
>  sound/soc/codecs/cs42l43-jack.c |   8 ++-
>  sound/soc/codecs/cs42l43.c      | 109 +++++++++++++++++++++++---------
>  sound/soc/codecs/cs42l43.h      |   3 +
>  4 files changed, 86 insertions(+), 60 deletions(-)
>
> --
> 2.43.0
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20260121/ccf2da8a/attachment-0001.html>


More information about the kernel-team mailing list