[PATCH 11/13] thermal: convert exynos to use devm_thermal_zone_of_sensor_register
From: edubezval@gmail.com (Eduardo Valentin)
Date: 2016-03-14 19:48:23
Also in:
linux-pm, linux-samsung-soc, lkml
On Thu, Mar 10, 2016 at 09:16:36AM +0900, Krzysztof Kozlowski wrote:
On 10.03.2016 06:35, Eduardo Valentin wrote:quoted
This changes the driver to use the devm_ version of thermal_zone_of_sensor_register and cleans up the local points and unregister calls. Cc: Lukasz Majewski <redacted> Cc: Zhang Rui <rui.zhang@intel.com> Cc: Kukjin Kim <kgene@kernel.org> Cc: Krzysztof Kozlowski <redacted> Cc: linux-pm at vger.kernel.org Cc: linux-samsung-soc at vger.kernel.org Cc: linux-arm-kernel at lists.infradead.org Cc: linux-kernel at vger.kernel.org Signed-off-by: Eduardo Valentin <edubezval@gmail.com> --- drivers/thermal/samsung/exynos_tmu.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index fa61eff..256039e 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c@@ -1363,8 +1363,8 @@ static int exynos_tmu_probe(struct platform_device *pdev) * data->tzd must be registered before calling exynos_tmu_initialize(), * requesting irq and calling exynos_tmu_control(). */ - data->tzd = thermal_zone_of_sensor_register(&pdev->dev, 0, data, - &exynos_sensor_ops); + data->tzd = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, data, + &exynos_sensor_ops); if (IS_ERR(data->tzd)) { ret = PTR_ERR(data->tzd); dev_err(&pdev->dev, "Failed to register sensor: %d\n", ret);@@ -1374,21 +1374,19 @@ static int exynos_tmu_probe(struct platform_device *pdev) ret = exynos_tmu_initialize(pdev); if (ret) { dev_err(&pdev->dev, "Failed to initialize TMU\n"); - goto err_thermal; + goto err_sclk; } ret = devm_request_irq(&pdev->dev, data->irq, exynos_tmu_irq, IRQF_TRIGGER_RISING | IRQF_SHARED, dev_name(&pdev->dev), data); if (ret) { dev_err(&pdev->dev, "Failed to request irq: %d\n", data->irq); - goto err_thermal; + goto err_sclk; } exynos_tmu_control(pdev, true); return 0; -err_thermal: - thermal_zone_of_sensor_unregister(&pdev->dev, data->tzd); err_sclk: clk_disable_unprepare(data->sclk); err_clk:@@ -1406,9 +1404,7 @@ err_sensor: static int exynos_tmu_remove(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct thermal_zone_device *tzd = data->tzd; - thermal_zone_of_sensor_unregister(&pdev->dev, tzd);Before, the sensor was removed from zone (ops like get_temp NULL-ified etc), then we stopped TMU, disabled clocks, disabled regulator and finally freed IRQ (through devm-like interface). Now this will be different - first stop of TMU, disable clocks, disable, regulator, remove sensor from zone (through devm) and finally free IRQ. Are you sure that changing order is okay?
Not really. After checking the driver code and your suggestions, I don't think this driver would benefit of this change, not at least the way it is currently. Thanks for pointing out. I am taking this driver out of the series.
Best regards, Krzysztofquoted
exynos_tmu_control(pdev, false); clk_disable_unprepare(data->sclk);