[PATCH 2/2] leds: cr0014114: queue recount work on freezable workqueue

From: Jiale Yao

Date: Fri Oct 16 2026 - 06:10:51 EST


The firmware workaround periodically recounts the LED state by issuing
SPI transfers. Its delayed work runs on the non-freezable system
workqueue and can therefore access the controller after it has been
suspended.

Queue the recount work on system_freezable_wq so hardware access is
deferred until devices have resumed.

Signed-off-by: Jiale Yao <yaojiale02@xxxxxxx>
---
drivers/leds/leds-cr0014114.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/leds/leds-cr0014114.c b/drivers/leds/leds-cr0014114.c
index 3f6931ae0bcc..afe3730e1222 100644
--- a/drivers/leds/leds-cr0014114.c
+++ b/drivers/leds/leds-cr0014114.c
@@ -155,7 +155,8 @@ static void cr0014114_recount_work(struct work_struct *work)
if (ret)
dev_warn(priv->dev, "sync of LEDs failed %d\n", ret);

- schedule_delayed_work(&priv->work, CR_RECOUNT_DELAY);
+ queue_delayed_work(system_freezable_wq, &priv->work,
+ CR_RECOUNT_DELAY);
}

static int cr0014114_set_sync(struct led_classdev *ldev,
@@ -256,7 +257,8 @@ static int cr0014114_probe(struct spi_device *spi)
return ret;

/* setup recount work to workaround buggy firmware */
- schedule_delayed_work(&priv->work, CR_RECOUNT_DELAY);
+ queue_delayed_work(system_freezable_wq, &priv->work,
+ CR_RECOUNT_DELAY);

spi_set_drvdata(spi, priv);

--
2.34.1