[PATCH] media: sun8i-di: Don't sleep while waiting for coefficient access

From: Jernej Skrabec

Date: Wed Nov 04 2026 - 15:19:45 EST


deinterlace_irq() calls deinterlace_device_run() to start processing
the second field, so it runs in hard interrupt context. However,
deinterlace_device_run() waits for coefficient access with
readl_poll_timeout(), which may sleep.

Use readl_poll_timeout_atomic() instead.

Fixes: a4260ea49547 ("media: sun4i: Add H3 deinterlace driver")
Signed-off-by: Jernej Skrabec <jernej.skrabec@xxxxxxxxx>
---
drivers/media/platform/sunxi/sun8i-di/sun8i-di.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
index 65bc426e5aac..bb90e0efa4d1 100644
--- a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
+++ b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
@@ -163,8 +163,8 @@ static void deinterlace_device_run(void *priv)
/* neutral filter coefficients */
deinterlace_set_bits(dev, DEINTERLACE_FRM_CTRL,
DEINTERLACE_FRM_CTRL_COEF_ACCESS);
- readl_poll_timeout(dev->base + DEINTERLACE_STATUS, val,
- val & DEINTERLACE_STATUS_COEF_STATUS, 2, 40);
+ readl_poll_timeout_atomic(dev->base + DEINTERLACE_STATUS, val,
+ val & DEINTERLACE_STATUS_COEF_STATUS, 2, 40);

for (i = 0; i < 32; i++) {
deinterlace_write(dev, DEINTERLACE_CH0_HORZ_COEF0 + i * 4,

base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
--
2.43.0