Merge branch 'stable/for-linus-5.15' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / drivers / thermal / sprd_thermal.c
index 3682edb..fff80fc 100644 (file)
@@ -388,7 +388,7 @@ static int sprd_thm_probe(struct platform_device *pdev)
                sen = devm_kzalloc(&pdev->dev, sizeof(*sen), GFP_KERNEL);
                if (!sen) {
                        ret = -ENOMEM;
-                       goto disable_clk;
+                       goto of_put;
                }
 
                sen->data = thm;
@@ -397,13 +397,13 @@ static int sprd_thm_probe(struct platform_device *pdev)
                ret = of_property_read_u32(sen_child, "reg", &sen->id);
                if (ret) {
                        dev_err(&pdev->dev, "get sensor reg failed");
-                       goto disable_clk;
+                       goto of_put;
                }
 
                ret = sprd_thm_sensor_calibration(sen_child, thm, sen);
                if (ret) {
                        dev_err(&pdev->dev, "efuse cal analysis failed");
-                       goto disable_clk;
+                       goto of_put;
                }
 
                sprd_thm_sensor_init(thm, sen);
@@ -416,19 +416,20 @@ static int sprd_thm_probe(struct platform_device *pdev)
                        dev_err(&pdev->dev, "register thermal zone failed %d\n",
                                sen->id);
                        ret = PTR_ERR(sen->tzd);
-                       goto disable_clk;
+                       goto of_put;
                }
 
                thm->sensor[sen->id] = sen;
        }
+       /* sen_child set to NULL at this point */
 
        ret = sprd_thm_set_ready(thm);
        if (ret)
-               goto disable_clk;
+               goto of_put;
 
        ret = sprd_thm_wait_temp_ready(thm);
        if (ret)
-               goto disable_clk;
+               goto of_put;
 
        for (i = 0; i < thm->nr_sensors; i++)
                sprd_thm_toggle_sensor(thm->sensor[i], true);
@@ -436,6 +437,8 @@ static int sprd_thm_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, thm);
        return 0;
 
+of_put:
+       of_node_put(sen_child);
 disable_clk:
        clk_disable_unprepare(thm->clk);
        return ret;
@@ -532,6 +535,7 @@ static const struct of_device_id sprd_thermal_of_match[] = {
        { .compatible = "sprd,ums512-thermal", .data = &ums512_data },
        { },
 };
+MODULE_DEVICE_TABLE(of, sprd_thermal_of_match);
 
 static const struct dev_pm_ops sprd_thermal_pm_ops = {
        SET_SYSTEM_SLEEP_PM_OPS(sprd_thm_suspend, sprd_thm_resume)