* [PATCH] ASoC: stm32: spdifrx: fix synchronization state check
@ 2026-10-11 3:54 Avi Weiss
2026-10-12 15:59 ` Olivier MOYSAN
2026-10-12 18:23 ` Mark Brown
0 siblings, 2 replies; 3+ messages in thread
From: Avi Weiss @ 2026-10-11 3:54 UTC (permalink / raw)
To: Mark Brown, Olivier Moysan
Cc: Arnaud Pouliquen, Liam Girdwood, linux-sound, linux-stm32,
linux-arm-kernel, linux-kernel, Avi Weiss
The interrupt handler uses a logical AND to check whether SPDIFRX
was in the SYNC state before clearing errors. Since both SYNC (1)
and ENABLE (3) are nonzero, this also treats ENABLE as SYNC (and
any other non-zero value that might be added).
The logical && basically just converts this to check for != 0.
So errors occurring while SPDIFRX is enabled cause the driver
to retry synch instead of disconnecting the PCM stream.
Fix is to change the logical && to equality (==) and only retry
when exactly in sync state.
Fixes: 0c93c291321f2 ("ASoC: stm32: spdifrx: retry synchronization in sync state")
Signed-off-by: Avi Weiss <thnkslprpt@gmail.com>
---
sound/soc/stm/stm32_spdifrx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/stm/stm32_spdifrx.c b/sound/soc/stm/stm32_spdifrx.c
index 0ece547407739..88863dbd05d9b 100644
--- a/sound/soc/stm/stm32_spdifrx.c
+++ b/sound/soc/stm/stm32_spdifrx.c
@@ -720,7 +720,7 @@ static irqreturn_t stm32_spdifrx_isr(int irq, void *devid)
if (err) {
regmap_read(spdifrx->regmap, STM32_SPDIFRX_CR, &cr);
- sync_state = FIELD_GET(SPDIFRX_CR_SPDIFEN_MASK, cr) &&
+ sync_state = FIELD_GET(SPDIFRX_CR_SPDIFEN_MASK, cr) ==
SPDIFRX_SPDIFEN_SYNC;
/* SPDIFRX is in STATE_STOP. Disable SPDIFRX to clear errors */
base-commit: 611680f6050a66b84e5cc0af33862a83d1f7a200
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] ASoC: stm32: spdifrx: fix synchronization state check
2026-10-11 3:54 [PATCH] ASoC: stm32: spdifrx: fix synchronization state check Avi Weiss
@ 2026-10-12 15:59 ` Olivier MOYSAN
2026-10-12 18:23 ` Mark Brown
1 sibling, 0 replies; 3+ messages in thread
From: Olivier MOYSAN @ 2026-10-12 15:59 UTC (permalink / raw)
To: Avi Weiss, Mark Brown
Cc: Arnaud Pouliquen, Liam Girdwood, linux-sound, linux-stm32,
linux-arm-kernel, linux-kernel
Hi Avi,
On 10/11/26 05:54, Avi Weiss wrote:
> The interrupt handler uses a logical AND to check whether SPDIFRX
> was in the SYNC state before clearing errors. Since both SYNC (1)
> and ENABLE (3) are nonzero, this also treats ENABLE as SYNC (and
> any other non-zero value that might be added).
>
> The logical && basically just converts this to check for != 0.
>
> So errors occurring while SPDIFRX is enabled cause the driver
> to retry synch instead of disconnecting the PCM stream.
>
> Fix is to change the logical && to equality (==) and only retry
> when exactly in sync state.
>
> Fixes: 0c93c291321f2 ("ASoC: stm32: spdifrx: retry synchronization in sync state")
> Signed-off-by: Avi Weiss <thnkslprpt@gmail.com>
> ---
> sound/soc/stm/stm32_spdifrx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sound/soc/stm/stm32_spdifrx.c b/sound/soc/stm/stm32_spdifrx.c
> index 0ece547407739..88863dbd05d9b 100644
> --- a/sound/soc/stm/stm32_spdifrx.c
> +++ b/sound/soc/stm/stm32_spdifrx.c
> @@ -720,7 +720,7 @@ static irqreturn_t stm32_spdifrx_isr(int irq, void *devid)
>
> if (err) {
> regmap_read(spdifrx->regmap, STM32_SPDIFRX_CR, &cr);
> - sync_state = FIELD_GET(SPDIFRX_CR_SPDIFEN_MASK, cr) &&
> + sync_state = FIELD_GET(SPDIFRX_CR_SPDIFEN_MASK, cr) ==
> SPDIFRX_SPDIFEN_SYNC;
>
> /* SPDIFRX is in STATE_STOP. Disable SPDIFRX to clear errors */
>
> base-commit: 611680f6050a66b84e5cc0af33862a83d1f7a200
Reviewed-by: Olivier Moysan <olivier.moysan@foss.st.com>
Thanks
Olivier
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] ASoC: stm32: spdifrx: fix synchronization state check
2026-10-11 3:54 [PATCH] ASoC: stm32: spdifrx: fix synchronization state check Avi Weiss
2026-10-12 15:59 ` Olivier MOYSAN
@ 2026-10-12 18:23 ` Mark Brown
1 sibling, 0 replies; 3+ messages in thread
From: Mark Brown @ 2026-10-12 18:23 UTC (permalink / raw)
To: Olivier Moysan, Avi Weiss
Cc: Arnaud Pouliquen, Liam Girdwood, linux-sound, linux-stm32,
linux-arm-kernel, linux-kernel
On Sun, 11 Oct 2026 06:54:59 +0300, Avi Weiss wrote:
> ASoC: stm32: spdifrx: fix synchronization state check
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-7.3
Thanks!
[1/1] ASoC: stm32: spdifrx: fix synchronization state check
https://git.kernel.org/broonie/misc/c/0936bbd35a24
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-12 21:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-11 3:54 [PATCH] ASoC: stm32: spdifrx: fix synchronization state check Avi Weiss
2026-10-12 15:59 ` Olivier MOYSAN
2026-10-12 18:23 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox