[PATCH v4 1/5] thermal/drivers/loongson2: Correct thermal sensor registration loop
Binbin Zhou <[email protected]> Tue, 4 Aug 2026 20:42:13 +0800
| Newsgroups | dev.linux.lists.mfd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-pm,org.kernel.vger.stable |
|---|---|
| Message-ID | <1c0f32f83a43a11a35e151fe97e9b5d4b21ea459.1785829933.git.zhoubinbin@loongson.cn> |
The registration loop in loongson2_thermal_probe() incorrectly uses dev_err_probe() when the sensor is not present (-ENODEV). In that case, the driver should continue to the next sensor index rather than treating it as a fatal error. Fix this by correctly handling -ENODEV and only returning on other errors. Also add a final check to ensure at least one thermal zone was registered. Cc: [email protected] Reported-by: Sashiko <[email protected]> Closes: https://sashiko.dev/#/patchset/[email protected]?part=2 Fixes: e7e3a7c35791 ("thermal/drivers/loongson-2: Add thermal management support") Signed-off-by: Binbin Zhou <[email protected]> --- drivers/thermal/loongson2_thermal.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/thermal/loongson2_thermal.c b/drivers/thermal/loongson2_thermal.c index ea4dd2fb1f47..5f47fa51fb90 100644 --- a/drivers/thermal/loongson2_thermal.c +++ b/drivers/thermal/loongson2_thermal.c @@ -161,16 +161,18 @@ static int loongson2_thermal_probe(struct platform_device *pdev) for (i = 0; i <= LOONGSON2_MAX_SENSOR_SEL_NUM; i++) { tzd = devm_thermal_of_zone_register(dev, i, data, thermal_ops); - if (!IS_ERR(tzd)) break; - if (PTR_ERR(tzd) != -ENODEV) + if (PTR_ERR(tzd) == -ENODEV) continue; - return dev_err_probe(dev, PTR_ERR(tzd), "failed to register"); + return dev_err_probe(dev, PTR_ERR(tzd), "failed to register sensor %d\n", i); } + if (IS_ERR(tzd)) + return dev_err_probe(dev, -ENODEV, "No thermal sensor registered\n"); + ret = devm_request_threaded_irq(dev, irq, NULL, loongson2_thermal_irq_thread, IRQF_ONESHOT, "loongson2_thermal", tzd); if (ret < 0) -- 2.52.0