drivers/thermal/mediatek/auxadc_thermal.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
Smatch reports:
1. mtk_thermal_probe() warn: 'apmixed_base' from of_iomap() not released.
2. mtk_thermal_probe() warn: 'auxadc_base' from of_iomap() not released.
The original code forgets to release iomap resource when handling errors,
fix it through unified error handling code at the end of mtk_thermal_probe.
Fixes: 89945047b166 ("thermal: mediatek: Add tsensor support for V2 thermal system")
Signed-off-by: Kang Chen <void0red@hust.edu.cn>
---
I think the this should be released on the success path but I was too
scared of breaking things. Let me know and I will resend if people want
me to do that.
drivers/thermal/mediatek/auxadc_thermal.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c
index ab730f9552d0..741c7d8151bd 100644
--- a/drivers/thermal/mediatek/auxadc_thermal.c
+++ b/drivers/thermal/mediatek/auxadc_thermal.c
@@ -1149,13 +1149,15 @@ static int mtk_thermal_probe(struct platform_device *pdev)
if (auxadc_phys_base == OF_BAD_ADDR) {
dev_err(&pdev->dev, "Can't get auxadc phys address\n");
- return -EINVAL;
+ ret = -EINVAL;
+ goto err_iounmap_auxadc;
}
apmixedsys = of_parse_phandle(np, "mediatek,apmixedsys", 0);
if (!apmixedsys) {
dev_err(&pdev->dev, "missing apmixedsys node\n");
- return -ENODEV;
+ ret = -ENODEV;
+ goto err_iounmap_auxadc;
}
apmixed_base = of_iomap(apmixedsys, 0);
@@ -1165,17 +1167,18 @@ static int mtk_thermal_probe(struct platform_device *pdev)
if (apmixed_phys_base == OF_BAD_ADDR) {
dev_err(&pdev->dev, "Can't get auxadc phys address\n");
- return -EINVAL;
+ ret = -EINVAL;
+ goto err_iounmap_apmixed;
}
ret = device_reset_optional(&pdev->dev);
if (ret)
- return ret;
+ goto err_iounmap_apmixed;
ret = clk_prepare_enable(mt->clk_auxadc);
if (ret) {
dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret);
- return ret;
+ goto err_iounmap_apmixed;
}
ret = clk_prepare_enable(mt->clk_peri_therm);
@@ -1220,7 +1223,10 @@ static int mtk_thermal_probe(struct platform_device *pdev)
clk_disable_unprepare(mt->clk_peri_therm);
err_disable_clk_auxadc:
clk_disable_unprepare(mt->clk_auxadc);
-
+err_iounmap_apmixed:
+ iounmap(apmixed_base);
+err_iounmap_auxadc:
+ iounmap(auxadc_base);
return ret;
}
--
2.34.1
On 03/04/2023 12:38, Kang Chen wrote: > Smatch reports: > 1. mtk_thermal_probe() warn: 'apmixed_base' from of_iomap() not released. > 2. mtk_thermal_probe() warn: 'auxadc_base' from of_iomap() not released. > > The original code forgets to release iomap resource when handling errors, > fix it through unified error handling code at the end of mtk_thermal_probe. > > Fixes: 89945047b166 ("thermal: mediatek: Add tsensor support for V2 thermal system") > Signed-off-by: Kang Chen <void0red@hust.edu.cn> > --- > I think the this should be released on the success path but I was too > scared of breaking things. Let me know and I will resend if people want > me to do that. > > drivers/thermal/mediatek/auxadc_thermal.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c > index ab730f9552d0..741c7d8151bd 100644 > --- a/drivers/thermal/mediatek/auxadc_thermal.c > +++ b/drivers/thermal/mediatek/auxadc_thermal.c > @@ -1149,13 +1149,15 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > if (auxadc_phys_base == OF_BAD_ADDR) { > dev_err(&pdev->dev, "Can't get auxadc phys address\n"); > - return -EINVAL; > + ret = -EINVAL; > + goto err_iounmap_auxadc; > } Better to use the devm_of_iomap() variant And also take the opportunity to use devm_clk_get_enabled(), remove clk_prepare_enable() and the rollbacking in the err_disable_clk_per*: label sections. -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
Smatch reports:
1. mtk_thermal_probe() warn: 'apmixed_base' from of_iomap() not released.
2. mtk_thermal_probe() warn: 'auxadc_base' from of_iomap() not released.
The original code forgets to release iomap resource when handling errors,
fix it by switch to devm_of_iomap.
Fixes: 89945047b166 ("thermal: mediatek: Add tsensor support for V2 thermal system")
Signed-off-by: Kang Chen <void0red@hust.edu.cn>
---
v2 -> v1: use devm_of_iomap instead.
drivers/thermal/mediatek/auxadc_thermal.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c
index ab730f9552d0..df5e2e354408 100644
--- a/drivers/thermal/mediatek/auxadc_thermal.c
+++ b/drivers/thermal/mediatek/auxadc_thermal.c
@@ -1142,7 +1142,10 @@ static int mtk_thermal_probe(struct platform_device *pdev)
return -ENODEV;
}
- auxadc_base = of_iomap(auxadc, 0);
+ auxadc_base = devm_of_iomap(&pdev->dev, auxadc, 0, NULL);
+ if (IS_ERR(auxadc_base))
+ return PTR_ERR(auxadc_base);
+
auxadc_phys_base = of_get_phys_base(auxadc);
of_node_put(auxadc);
@@ -1158,7 +1161,10 @@ static int mtk_thermal_probe(struct platform_device *pdev)
return -ENODEV;
}
- apmixed_base = of_iomap(apmixedsys, 0);
+ apmixed_base = devm_of_iomap(&pdev->dev, apmixedsys, 0, NULL);
+ if (IS_ERR(apmixed_base)
+ return PTR_ERR(apmixed_base);
+
apmixed_phys_base = of_get_phys_base(apmixedsys);
of_node_put(apmixedsys);
--
2.34.1
use devm_clk_get_enabled to do automatic resource management.
Signed-off-by: Kang Chen <void0red@hust.edu.cn>
---
I'm not quite sure if this function should return 0 when
devm_thermal_add_hwmon_sysfs occurs error. So I keep it.
drivers/thermal/mediatek/auxadc_thermal.c | 25 ++++++++---------------
1 file changed, 8 insertions(+), 17 deletions(-)
diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c
index df5e2e354408..5baec2c08ebc 100644
--- a/drivers/thermal/mediatek/auxadc_thermal.c
+++ b/drivers/thermal/mediatek/auxadc_thermal.c
@@ -1178,16 +1178,16 @@ static int mtk_thermal_probe(struct platform_device *pdev)
if (ret)
return ret;
- ret = clk_prepare_enable(mt->clk_auxadc);
- if (ret) {
+ ret = devm_clk_get_enabled(&pdev->dev, mt->clk_auxadc);
+ if (IS_ERR(ret)) {
dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret);
- return ret;
+ return PTR_ERR(ret);
}
- ret = clk_prepare_enable(mt->clk_peri_therm);
- if (ret) {
+ ret = devm_clk_get_enabled(&pdev->dev, mt->clk_peri_therm);
+ if (IS_ERR(ret)) {
dev_err(&pdev->dev, "Can't enable peri clk: %d\n", ret);
- goto err_disable_clk_auxadc;
+ return PTR_ERR(ret);
}
if (mt->conf->version != MTK_THERMAL_V1) {
@@ -1211,23 +1211,14 @@ static int mtk_thermal_probe(struct platform_device *pdev)
tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
&mtk_thermal_ops);
- if (IS_ERR(tzdev)) {
- ret = PTR_ERR(tzdev);
- goto err_disable_clk_peri_therm;
- }
+ if (IS_ERR(tzdev))
+ return PTR_ERR(tzdev);
ret = devm_thermal_add_hwmon_sysfs(tzdev);
if (ret)
dev_warn(&pdev->dev, "error in thermal_add_hwmon_sysfs");
return 0;
-
-err_disable_clk_peri_therm:
- clk_disable_unprepare(mt->clk_peri_therm);
-err_disable_clk_auxadc:
- clk_disable_unprepare(mt->clk_auxadc);
-
- return ret;
}
static int mtk_thermal_remove(struct platform_device *pdev)
--
2.34.1
> -----原始邮件----- > 发件人: "Kang Chen" <void0red@hust.edu.cn> > 发送时间: 2023-04-04 00:46:10 (星期二) > 收件人: daniel.lezcano@linaro.org > 抄送: amitk@kernel.org, angelogioacchino.delregno@collabora.com, bchihi@baylibre.com, daniel@makrotopia.org, dzm91@hust.edu.cn, error27@gmail.com, henry.yen@mediatek.com, hust-os-kernel-patches@googlegroups.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, matthias.bgg@gmail.com, rafael@kernel.org, rdunlap@infradead.org, rui.zhang@intel.com, void0red@gmail.com, void0red@hust.edu.cn > 主题: [PATCH v2 2/2] thermal: mediatek: change clk_prepare_enable to devm_clk_get_enabled in mtk_thermal_probe > > use devm_clk_get_enabled to do automatic resource management. > > Signed-off-by: Kang Chen <void0red@hust.edu.cn> > --- > I'm not quite sure if this function should return 0 when > devm_thermal_add_hwmon_sysfs occurs error. So I keep it. > > drivers/thermal/mediatek/auxadc_thermal.c | 25 ++++++++--------------- > 1 file changed, 8 insertions(+), 17 deletions(-) > > diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c > index df5e2e354408..5baec2c08ebc 100644 > --- a/drivers/thermal/mediatek/auxadc_thermal.c > +++ b/drivers/thermal/mediatek/auxadc_thermal.c > @@ -1178,16 +1178,16 @@ static int mtk_thermal_probe(struct platform_device *pdev) > if (ret) > return ret; > > - ret = clk_prepare_enable(mt->clk_auxadc); > - if (ret) { > + ret = devm_clk_get_enabled(&pdev->dev, mt->clk_auxadc); > + if (IS_ERR(ret)) { > dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret); > - return ret; > + return PTR_ERR(ret); > } > > - ret = clk_prepare_enable(mt->clk_peri_therm); > - if (ret) { > + ret = devm_clk_get_enabled(&pdev->dev, mt->clk_peri_therm); > + if (IS_ERR(ret)) { > dev_err(&pdev->dev, "Can't enable peri clk: %d\n", ret); > - goto err_disable_clk_auxadc; > + return PTR_ERR(ret); > } > > if (mt->conf->version != MTK_THERMAL_V1) { > @@ -1211,23 +1211,14 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt, > &mtk_thermal_ops); > - if (IS_ERR(tzdev)) { > - ret = PTR_ERR(tzdev); > - goto err_disable_clk_peri_therm; > - } > + if (IS_ERR(tzdev)) > + return PTR_ERR(tzdev); > > ret = devm_thermal_add_hwmon_sysfs(tzdev); > if (ret) > dev_warn(&pdev->dev, "error in thermal_add_hwmon_sysfs"); > > return 0; > - > -err_disable_clk_peri_therm: > - clk_disable_unprepare(mt->clk_peri_therm); > -err_disable_clk_auxadc: > - clk_disable_unprepare(mt->clk_auxadc); > - > - return ret; > } > > static int mtk_thermal_remove(struct platform_device *pdev) > -- > 2.34.1 ping?
On 10/04/2023 05:46, 陈康 wrote: [ ... ] >> static int mtk_thermal_remove(struct platform_device *pdev) >> -- >> 2.34.1 > > ping? Did you check the 'mtk_thermal_remove' function ? -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
Smatch reports:
1. mtk_thermal_probe() warn: 'apmixed_base' from of_iomap() not released.
2. mtk_thermal_probe() warn: 'auxadc_base' from of_iomap() not released.
The original code forgets to release iomap resource when handling errors,
fix it by switch to devm_of_iomap.
Fixes: 89945047b166 ("thermal: mediatek: Add tsensor support for V2 thermal system")
Signed-off-by: Kang Chen <void0red@hust.edu.cn>
Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
---
v3 -> v2: fix typo and put of_node in error handling
v2 -> v1: use devm_of_iomap instead.
drivers/thermal/mediatek/auxadc_thermal.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c
index ab730f9552d0..3372f7c29626 100644
--- a/drivers/thermal/mediatek/auxadc_thermal.c
+++ b/drivers/thermal/mediatek/auxadc_thermal.c
@@ -1142,7 +1142,12 @@ static int mtk_thermal_probe(struct platform_device *pdev)
return -ENODEV;
}
- auxadc_base = of_iomap(auxadc, 0);
+ auxadc_base = devm_of_iomap(&pdev->dev, auxadc, 0, NULL);
+ if (IS_ERR(auxadc_base)) {
+ of_node_put(auxadc);
+ return PTR_ERR(auxadc_base);
+ }
+
auxadc_phys_base = of_get_phys_base(auxadc);
of_node_put(auxadc);
@@ -1158,7 +1163,12 @@ static int mtk_thermal_probe(struct platform_device *pdev)
return -ENODEV;
}
- apmixed_base = of_iomap(apmixedsys, 0);
+ apmixed_base = devm_of_iomap(&pdev->dev, apmixedsys, 0, NULL);
+ if (IS_ERR(apmixed_base)) {
+ of_node_put(apmixedsys);
+ return PTR_ERR(apmixed_base);
+ }
+
apmixed_phys_base = of_get_phys_base(apmixedsys);
of_node_put(apmixedsys);
--
2.34.1
use devm_clk_get_enabled to do automatic resource management.
Meanwhile, remove error handling labels in the probe function and
the whole remove function.
Signed-off-by: Kang Chen <void0red@hust.edu.cn>
Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
---
v3 -> v2: remove some useles func calls.
v2 -> v1: init
Notice the devm_clk_get_enabled do the clk_get and clk_prepare_enable
at the same time.
I'm not sure if this has any side effects in initialization.
drivers/thermal/mediatek/auxadc_thermal.c | 48 +++++------------------
1 file changed, 10 insertions(+), 38 deletions(-)
diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c
index 3372f7c29626..995837ce3ea2 100644
--- a/drivers/thermal/mediatek/auxadc_thermal.c
+++ b/drivers/thermal/mediatek/auxadc_thermal.c
@@ -1116,14 +1116,6 @@ static int mtk_thermal_probe(struct platform_device *pdev)
mt->conf = of_device_get_match_data(&pdev->dev);
- mt->clk_peri_therm = devm_clk_get(&pdev->dev, "therm");
- if (IS_ERR(mt->clk_peri_therm))
- return PTR_ERR(mt->clk_peri_therm);
-
- mt->clk_auxadc = devm_clk_get(&pdev->dev, "auxadc");
- if (IS_ERR(mt->clk_auxadc))
- return PTR_ERR(mt->clk_auxadc);
-
mt->thermal_base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
if (IS_ERR(mt->thermal_base))
return PTR_ERR(mt->thermal_base);
@@ -1182,16 +1174,16 @@ static int mtk_thermal_probe(struct platform_device *pdev)
if (ret)
return ret;
- ret = clk_prepare_enable(mt->clk_auxadc);
- if (ret) {
- dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret);
- return ret;
+ mt->clk_auxadc = devm_clk_get_enabled(&pdev->dev, "auxadc");
+ if (IS_ERR(mt->clk_auxadc)) {
+ dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", mt->clk_auxadc);
+ return PTR_ERR(mt->clk_auxadc);
}
- ret = clk_prepare_enable(mt->clk_peri_therm);
- if (ret) {
- dev_err(&pdev->dev, "Can't enable peri clk: %d\n", ret);
- goto err_disable_clk_auxadc;
+ mt->clk_peri_therm = devm_clk_get_enabled(&pdev->dev, "therm");
+ if (IS_ERR(mt->clk_peri_therm)) {
+ dev_err(&pdev->dev, "Can't enable peri clk: %d\n", mt->clk_peri_therm);
+ return PTR_ERR(mt->clk_peri_therm);
}
if (mt->conf->version != MTK_THERMAL_V1) {
@@ -1215,38 +1207,18 @@ static int mtk_thermal_probe(struct platform_device *pdev)
tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt,
&mtk_thermal_ops);
- if (IS_ERR(tzdev)) {
- ret = PTR_ERR(tzdev);
- goto err_disable_clk_peri_therm;
- }
+ if (IS_ERR(tzdev))
+ return PTR_ERR(tzdev);
ret = devm_thermal_add_hwmon_sysfs(tzdev);
if (ret)
dev_warn(&pdev->dev, "error in thermal_add_hwmon_sysfs");
return 0;
-
-err_disable_clk_peri_therm:
- clk_disable_unprepare(mt->clk_peri_therm);
-err_disable_clk_auxadc:
- clk_disable_unprepare(mt->clk_auxadc);
-
- return ret;
-}
-
-static int mtk_thermal_remove(struct platform_device *pdev)
-{
- struct mtk_thermal *mt = platform_get_drvdata(pdev);
-
- clk_disable_unprepare(mt->clk_peri_therm);
- clk_disable_unprepare(mt->clk_auxadc);
-
- return 0;
}
static struct platform_driver mtk_thermal_driver = {
.probe = mtk_thermal_probe,
- .remove = mtk_thermal_remove,
.driver = {
.name = "mtk-thermal",
.of_match_table = mtk_thermal_of_match,
--
2.34.1
> -----Original Messages----- > From: "Kang Chen" <void0red@hust.edu.cn> > Sent Time: 2023-04-11 14:35:31 (Tuesday) > To: daniel.lezcano@linaro.org > Cc: amitk@kernel.org, angelogioacchino.delregno@collabora.com, bchihi@baylibre.com, daniel@makrotopia.org, dzm91@hust.edu.cn, error27@gmail.com, henry.yen@mediatek.com, hust-os-kernel-patches@googlegroups.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, matthias.bgg@gmail.com, rafael@kernel.org, rdunlap@infradead.org, rui.zhang@intel.com, void0red@gmail.com, void0red@hust.edu.cn > Subject: [PATCH v3 2/2] thermal: mediatek: change clk_prepare_enable to devm_clk_get_enabled in mtk_thermal_probe > > use devm_clk_get_enabled to do automatic resource management. > Meanwhile, remove error handling labels in the probe function and > the whole remove function. > > Signed-off-by: Kang Chen <void0red@hust.edu.cn> > Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn> > --- > v3 -> v2: remove some useles func calls. > v2 -> v1: init > > Notice the devm_clk_get_enabled do the clk_get and clk_prepare_enable > at the same time. > I'm not sure if this has any side effects in initialization. > > drivers/thermal/mediatek/auxadc_thermal.c | 48 +++++------------------ > 1 file changed, 10 insertions(+), 38 deletions(-) > > diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c > index 3372f7c29626..995837ce3ea2 100644 > --- a/drivers/thermal/mediatek/auxadc_thermal.c > +++ b/drivers/thermal/mediatek/auxadc_thermal.c > @@ -1116,14 +1116,6 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > mt->conf = of_device_get_match_data(&pdev->dev); > > - mt->clk_peri_therm = devm_clk_get(&pdev->dev, "therm"); > - if (IS_ERR(mt->clk_peri_therm)) > - return PTR_ERR(mt->clk_peri_therm); > - > - mt->clk_auxadc = devm_clk_get(&pdev->dev, "auxadc"); > - if (IS_ERR(mt->clk_auxadc)) > - return PTR_ERR(mt->clk_auxadc); > - > mt->thermal_base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); > if (IS_ERR(mt->thermal_base)) > return PTR_ERR(mt->thermal_base); > @@ -1182,16 +1174,16 @@ static int mtk_thermal_probe(struct platform_device *pdev) > if (ret) > return ret; > > - ret = clk_prepare_enable(mt->clk_auxadc); > - if (ret) { > - dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret); > - return ret; > + mt->clk_auxadc = devm_clk_get_enabled(&pdev->dev, "auxadc"); > + if (IS_ERR(mt->clk_auxadc)) { > + dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", mt->clk_auxadc); > + return PTR_ERR(mt->clk_auxadc); > } > > - ret = clk_prepare_enable(mt->clk_peri_therm); > - if (ret) { > - dev_err(&pdev->dev, "Can't enable peri clk: %d\n", ret); > - goto err_disable_clk_auxadc; > + mt->clk_peri_therm = devm_clk_get_enabled(&pdev->dev, "therm"); > + if (IS_ERR(mt->clk_peri_therm)) { > + dev_err(&pdev->dev, "Can't enable peri clk: %d\n", mt->clk_peri_therm); > + return PTR_ERR(mt->clk_peri_therm); > } > > if (mt->conf->version != MTK_THERMAL_V1) { > @@ -1215,38 +1207,18 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt, > &mtk_thermal_ops); > - if (IS_ERR(tzdev)) { > - ret = PTR_ERR(tzdev); > - goto err_disable_clk_peri_therm; > - } > + if (IS_ERR(tzdev)) > + return PTR_ERR(tzdev); > > ret = devm_thermal_add_hwmon_sysfs(tzdev); > if (ret) > dev_warn(&pdev->dev, "error in thermal_add_hwmon_sysfs"); > > return 0; > - > -err_disable_clk_peri_therm: > - clk_disable_unprepare(mt->clk_peri_therm); > -err_disable_clk_auxadc: > - clk_disable_unprepare(mt->clk_auxadc); > - > - return ret; > -} > - > -static int mtk_thermal_remove(struct platform_device *pdev) > -{ > - struct mtk_thermal *mt = platform_get_drvdata(pdev); > - > - clk_disable_unprepare(mt->clk_peri_therm); > - clk_disable_unprepare(mt->clk_auxadc); > - > - return 0; > } > > static struct platform_driver mtk_thermal_driver = { > .probe = mtk_thermal_probe, > - .remove = mtk_thermal_remove, > .driver = { > .name = "mtk-thermal", > .of_match_table = mtk_thermal_of_match, > -- > 2.34.1 ping?
Hi, this patch does not apply: Analyzing 9 messages in the thread Will use the latest revision: v3 You can pick other revisions using the -vN flag Checking attestation on all messages, may take a moment... --- [PATCH v3 2/2] thermal: mediatek: change clk_prepare_enable to devm_clk_get_enabled in mtk_thermal_probe + Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> + Link: https://lore.kernel.org/r/20230411063531.3976354-2-void0red@hust.edu.cn --- Total patches: 1 (cherrypicked: 2) --- Link: https://lore.kernel.org/r/20230411063531.3976354-1-void0red@hust.edu.cn Base: not specified Applying: thermal: mediatek: change clk_prepare_enable to devm_clk_get_enabled in mtk_thermal_probe error: patch failed: drivers/thermal/mediatek/auxadc_thermal.c:1182 error: drivers/thermal/mediatek/auxadc_thermal.c: patch does not apply Patch failed at 0001 thermal: mediatek: change clk_prepare_enable to devm_clk_get_enabled in mtk_thermal_probe hint: Use 'git am --show-current-patch=diff' to see the failed patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". On 15/04/2023 09:14, void0red@hust.edu.cn wrote: > > > >> -----Original Messages----- >> From: "Kang Chen" <void0red@hust.edu.cn> >> Sent Time: 2023-04-11 14:35:31 (Tuesday) >> To: daniel.lezcano@linaro.org >> Cc: amitk@kernel.org, angelogioacchino.delregno@collabora.com, bchihi@baylibre.com, daniel@makrotopia.org, dzm91@hust.edu.cn, error27@gmail.com, henry.yen@mediatek.com, hust-os-kernel-patches@googlegroups.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, matthias.bgg@gmail.com, rafael@kernel.org, rdunlap@infradead.org, rui.zhang@intel.com, void0red@gmail.com, void0red@hust.edu.cn >> Subject: [PATCH v3 2/2] thermal: mediatek: change clk_prepare_enable to devm_clk_get_enabled in mtk_thermal_probe >> >> use devm_clk_get_enabled to do automatic resource management. >> Meanwhile, remove error handling labels in the probe function and >> the whole remove function. >> >> Signed-off-by: Kang Chen <void0red@hust.edu.cn> >> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn> >> --- >> v3 -> v2: remove some useles func calls. >> v2 -> v1: init >> >> Notice the devm_clk_get_enabled do the clk_get and clk_prepare_enable >> at the same time. >> I'm not sure if this has any side effects in initialization. >> >> drivers/thermal/mediatek/auxadc_thermal.c | 48 +++++------------------ >> 1 file changed, 10 insertions(+), 38 deletions(-) >> >> diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c >> index 3372f7c29626..995837ce3ea2 100644 >> --- a/drivers/thermal/mediatek/auxadc_thermal.c >> +++ b/drivers/thermal/mediatek/auxadc_thermal.c >> @@ -1116,14 +1116,6 @@ static int mtk_thermal_probe(struct platform_device *pdev) >> >> mt->conf = of_device_get_match_data(&pdev->dev); >> >> - mt->clk_peri_therm = devm_clk_get(&pdev->dev, "therm"); >> - if (IS_ERR(mt->clk_peri_therm)) >> - return PTR_ERR(mt->clk_peri_therm); >> - >> - mt->clk_auxadc = devm_clk_get(&pdev->dev, "auxadc"); >> - if (IS_ERR(mt->clk_auxadc)) >> - return PTR_ERR(mt->clk_auxadc); >> - >> mt->thermal_base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); >> if (IS_ERR(mt->thermal_base)) >> return PTR_ERR(mt->thermal_base); >> @@ -1182,16 +1174,16 @@ static int mtk_thermal_probe(struct platform_device *pdev) >> if (ret) >> return ret; >> >> - ret = clk_prepare_enable(mt->clk_auxadc); >> - if (ret) { >> - dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret); >> - return ret; >> + mt->clk_auxadc = devm_clk_get_enabled(&pdev->dev, "auxadc"); >> + if (IS_ERR(mt->clk_auxadc)) { >> + dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", mt->clk_auxadc); >> + return PTR_ERR(mt->clk_auxadc); >> } >> >> - ret = clk_prepare_enable(mt->clk_peri_therm); >> - if (ret) { >> - dev_err(&pdev->dev, "Can't enable peri clk: %d\n", ret); >> - goto err_disable_clk_auxadc; >> + mt->clk_peri_therm = devm_clk_get_enabled(&pdev->dev, "therm"); >> + if (IS_ERR(mt->clk_peri_therm)) { >> + dev_err(&pdev->dev, "Can't enable peri clk: %d\n", mt->clk_peri_therm); >> + return PTR_ERR(mt->clk_peri_therm); >> } >> >> if (mt->conf->version != MTK_THERMAL_V1) { >> @@ -1215,38 +1207,18 @@ static int mtk_thermal_probe(struct platform_device *pdev) >> >> tzdev = devm_thermal_of_zone_register(&pdev->dev, 0, mt, >> &mtk_thermal_ops); >> - if (IS_ERR(tzdev)) { >> - ret = PTR_ERR(tzdev); >> - goto err_disable_clk_peri_therm; >> - } >> + if (IS_ERR(tzdev)) >> + return PTR_ERR(tzdev); >> >> ret = devm_thermal_add_hwmon_sysfs(tzdev); >> if (ret) >> dev_warn(&pdev->dev, "error in thermal_add_hwmon_sysfs"); >> >> return 0; >> - >> -err_disable_clk_peri_therm: >> - clk_disable_unprepare(mt->clk_peri_therm); >> -err_disable_clk_auxadc: >> - clk_disable_unprepare(mt->clk_auxadc); >> - >> - return ret; >> -} >> - >> -static int mtk_thermal_remove(struct platform_device *pdev) >> -{ >> - struct mtk_thermal *mt = platform_get_drvdata(pdev); >> - >> - clk_disable_unprepare(mt->clk_peri_therm); >> - clk_disable_unprepare(mt->clk_auxadc); >> - >> - return 0; >> } >> >> static struct platform_driver mtk_thermal_driver = { >> .probe = mtk_thermal_probe, >> - .remove = mtk_thermal_remove, >> .driver = { >> .name = "mtk-thermal", >> .of_match_table = mtk_thermal_of_match, >> -- >> 2.34.1 > > ping? -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
© 2016 - 2024 Red Hat, Inc.