[PATCH v4 2/5] thermal/drivers/loongson2: Move thermal_ops to chip_data for SoC scalability
Binbin Zhou <[email protected]> Tue, 4 Aug 2026 20:43:55 +0800
| Newsgroups | dev.linux.lists.mfd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <7fe74a58c164da2e7a897598142f28df0e5ef0c4.1785829933.git.zhoubinbin@loongson.cn> |
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 <[email protected]> --- 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 5f47fa51fb90..1a8ca2cd06f1 100644 --- a/drivers/thermal/loongson2_thermal.c +++ b/drivers/thermal/loongson2_thermal.c @@ -39,6 +39,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 { @@ -124,7 +125,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; @@ -145,10 +145,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); @@ -160,7 +156,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; @@ -186,11 +182,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