[PATCH v5 2/4] thermal/drivers/loongson2: Move thermal_ops to chip_data for SoC scalability
From: Binbin Zhou <zhoubinbin@loongson.cn>
Date: 2026-09-17 11:12:34
Also in:
linux-pm
Subsystem:
loongson-2 soc series thermal driver, the rest, thermal · Maintainers:
zhanghongchen, Yinbo Zhu, Linus Torvalds, Rafael J. Wysocki, Daniel Lezcano
In preparation for supporting additional Loongson SoCs, relocate the thermal zone device operations pointer (thermal_ops) from the probe routine to the per-SoC chip_data structure. This eliminates the need to add conditional branches in probe() when a new SoC is introduced; instead, the appropriate ops can be statically assigned in the match data. No functional change intended. Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> --- drivers/thermal/loongson2_thermal.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/thermal/loongson2_thermal.c b/drivers/thermal/loongson2_thermal.c
index 99b7392fc68f..fb4793a9bc55 100644
--- a/drivers/thermal/loongson2_thermal.c
+++ b/drivers/thermal/loongson2_thermal.c@@ -38,6 +38,7 @@ struct loongson2_thermal_chip_data { unsigned int thermal_sensor_sel; unsigned int flags; + const struct thermal_zone_device_ops *thermal_ops; }; struct loongson2_thermal_data {
@@ -123,7 +124,6 @@ static const struct thermal_zone_device_ops loongson2_2k2000_of_thermal_ops = { static int loongson2_thermal_probe(struct platform_device *pdev) { - const struct thermal_zone_device_ops *thermal_ops; struct device *dev = &pdev->dev; struct loongson2_thermal_data *data; struct thermal_zone_device *tzd;
@@ -144,10 +144,6 @@ static int loongson2_thermal_probe(struct platform_device *pdev) data->temp_reg = devm_platform_ioremap_resource(pdev, 1); if (IS_ERR(data->temp_reg)) return PTR_ERR(data->temp_reg); - - thermal_ops = &loongson2_2k2000_of_thermal_ops; - } else { - thermal_ops = &loongson2_2k1000_of_thermal_ops; } irq = platform_get_irq(pdev, 0);
@@ -159,7 +155,7 @@ static int loongson2_thermal_probe(struct platform_device *pdev) loongson2_thermal_set(data, 0, 0, false); for (i = 0; i <= LOONGSON2_MAX_SENSOR_SEL_NUM; i++) { - tzd = devm_thermal_of_zone_register(dev, i, data, thermal_ops); + tzd = devm_thermal_of_zone_register(dev, i, data, data->chip_data->thermal_ops); if (!IS_ERR(tzd)) break;
@@ -185,11 +181,13 @@ static int loongson2_thermal_probe(struct platform_device *pdev) static const struct loongson2_thermal_chip_data loongson2_thermal_ls2k1000_data = { .thermal_sensor_sel = 0, .flags = 0, + .thermal_ops = &loongson2_2k1000_of_thermal_ops, }; static const struct loongson2_thermal_chip_data loongson2_thermal_ls2k2000_data = { .thermal_sensor_sel = 0, .flags = LS2K2000_THSENS_OUT_FLAG, + .thermal_ops = &loongson2_2k2000_of_thermal_ops, }; static const struct of_device_id of_loongson2_thermal_match[] = {
--
2.52.0