Hi Alim, > Hello, > > On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski > <k.kozlowski@xxxxxxxxxxx> wrote: > > Thermal core could not read the temperature after registering the > > thermal sensor with thermal_zone_of_sensor_register() because the > > driver was not yet initialized. > > > > The call trace looked like: > > exynos_tmu_probe() > > thermal_zone_of_sensor_register() > > of_thermal_set_mode() > > thermal_zone_device_update() > > exynos_get_temp() > > if (!data->tmu_read) return -EINVAL; > > exynos_map_dt_data() > > data->tmu_read = ... > > > > This produced an error in dmesg: > > thermal thermal_zone0: failed to read out thermal zone (-22) > > > > Register the thermal_zone_device later, after parsing Device Tree > > and enabling necessary clocks, but before calling > > exynos_tmu_initialize() which uses the registered > > thermal_zone_device. > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> > > Fixes: 3b6a1a805f34 ("thermal: samsung: core: Exynos TMU rework to > > use device tree for configuration") --- > Patch looks good to me. > > Before this patch I was getting below on exynos5800 board: > [ 2.648629] thermal thermal_zone0: failed to read out thermal zone > (-22) [ 2.653906] 10060000.tmu supply vtmu not found, using dummy > regulator [ 2.660521] thermal thermal_zone1: failed to read out > thermal zone (-22) [ 2.666985] 10064000.tmu supply vtmu not found, > using dummy regulator [ 2.673658] thermal thermal_zone2: failed to > read out thermal zone (-22) [ 2.680093] 10068000.tmu supply vtmu > not found, using dummy regulator [ 2.686901] thermal > thermal_zone3: failed to read out thermal zone (-22) [ 2.693187] > 1006c000.tmu supply vtmu not found, using dummy regulator > [ 2.699914] thermal thermal_zone4: failed to read out thermal zone > (-22) [ 2.706332] 100a0000.tmu supply vtmu not found, using dummy > regulator > > > Reviewed-by: Alim Akhtar <alim.akhtar@xxxxxxxxxxx> > > Tested on exynos5800 peach board, so > Tested-by: Alim Akhtar <alim.akhtar@xxxxxxxxxxx> > > > > drivers/thermal/samsung/exynos_tmu.c | 27 +++++++++++++++++-------- > -- > > 1 file changed, 17 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/thermal/samsung/exynos_tmu.c > > b/drivers/thermal/samsung/exynos_tmu.c index > > 23f4320f8ef7..bc71a61f0c4a 100644 --- > > a/drivers/thermal/samsung/exynos_tmu.c +++ > > b/drivers/thermal/samsung/exynos_tmu.c @@ -1289,13 +1289,6 @@ > > static int exynos_tmu_probe(struct platform_device *pdev) > > platform_set_drvdata(pdev, data); mutex_init(&data->lock); > > > > - data->tzd = thermal_zone_of_sensor_register(&pdev->dev, 0, > > data, > > - > > &exynos_sensor_ops); > > - if (IS_ERR(data->tzd)) { > > - pr_err("thermal: tz: %p ERROR\n", data->tzd); > > - return PTR_ERR(data->tzd); > > - } > > - > > /* > > * Try enabling the regulator if found > > * TODO: Add regulator as an SOC feature, so that regulator > > enable @@ -1365,21 +1358,36 @@ static int exynos_tmu_probe(struct > > platform_device *pdev) break; > > }; > > > > + /* > > + * 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); > > + if (IS_ERR(data->tzd)) { > > + ret = PTR_ERR(data->tzd); > > + dev_err(&pdev->dev, "Failed to register sensor: > > %d\n", ret); > > + goto err_sclk; > > + } > > + > > ret = exynos_tmu_initialize(pdev); > > if (ret) { > > dev_err(&pdev->dev, "Failed to initialize TMU\n"); > > - goto err_sclk; > > + goto err_thermal; > > } > > > > 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_sclk; > > + goto err_thermal; > > } > > > > 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: > > @@ -1390,7 +1398,6 @@ err_clk_sec: > > err_sensor: > > if (!IS_ERR_OR_NULL(data->regulator)) > > regulator_disable(data->regulator); > > - thermal_zone_of_sensor_unregister(&pdev->dev, data->tzd); > > > > return ret; > > } > > -- > > 1.9.1 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > Acked-by: Lukasz Majewski <l.majewski@xxxxxxxxxxx> Tested-by: Lukasz Majewski <l.majewski@xxxxxxxxxxx> -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html