Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure
Hi Alim, > Hello, > > On Fri, Oct 9, 2015 at 4:28 PM, Krzysztof Kozlowski > wrote: > > W dniu 09.10.2015 o 01:45, Alim Akhtar pisze: > >> Hello, > >> > >> On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski > >> wrote: > >>> During probe if the regulator could not be enabled, the error > >>> exit path would still disable it. This could lead to unbalanced > >>> counter of regulator enable/disable. > >>> > >> Do you see a regulator unbalanced reported here during boot? You > >> may want to add that to commit message. > > > > I did not see the warning/error message about unbalanced disable. It > > would happen in certain condition only - no other enables of > > regulator and count going below 0. > > > > I would have to simulate this error to get the warning message. I > > don't think it is worth the effort. > > > Ok, looking at code, it does looks to be calling regulator disable in > case regulator enable fails. > Feel free to add > Reviewed-by: Alim Akhtar > Thanks!! > > > Best regards, > > Krzysztof > > > >> > >>> The patch moves code for getting and enabling the regulator from > >>> exynos_map_dt_data() to probe function because it is really not a > >>> part of getting Device Tree properties. > >>> > >>> Signed-off-by: Krzysztof Kozlowski > >>> Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on > >>> probe failure") Cc: > >>> --- > >>> drivers/thermal/samsung/exynos_tmu.c | 34 > >>> +- 1 file changed, 17 > >>> insertions(+), 17 deletions(-) > >>> > >>> diff --git a/drivers/thermal/samsung/exynos_tmu.c > >>> b/drivers/thermal/samsung/exynos_tmu.c index > >>> 0bae8cc6c23a..23f4320f8ef7 100644 --- > >>> a/drivers/thermal/samsung/exynos_tmu.c +++ > >>> b/drivers/thermal/samsung/exynos_tmu.c @@ -1168,27 +1168,10 @@ > >>> static int exynos_map_dt_data(struct platform_device *pdev) > >>> struct exynos_tmu_data *data = platform_get_drvdata(pdev); struct > >>> exynos_tmu_platform_data *pdata; struct resource res; > >>> - int ret; > >>> > >>> if (!data || !pdev->dev.of_node) > >>> return -ENODEV; > >>> > >>> - /* > >>> -* Try enabling the regulator if found > >>> -* TODO: Add regulator as an SOC feature, so that > >>> regulator enable > >>> -* is a compulsory call. > >>> -*/ > >>> - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > >>> - if (!IS_ERR(data->regulator)) { > >>> - ret = regulator_enable(data->regulator); > >>> - if (ret) { > >>> - dev_err(&pdev->dev, "failed to enable > >>> vtmu\n"); > >>> - return ret; > >>> - } > >>> - } else { > >>> - dev_info(&pdev->dev, "Regulator node (vtmu) not > >>> found\n"); > >>> - } > >>> - > >>> data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); > >>> if (data->id < 0) > >>> data->id = 0; > >>> @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct > >>> platform_device *pdev) 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 > >>> +* is a compulsory call. > >>> +*/ > >>> + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > >>> + if (!IS_ERR(data->regulator)) { > >>> + ret = regulator_enable(data->regulator); > >>> + if (ret) { > >>> + dev_err(&pdev->dev, "failed to enable > >>> vtmu\n"); > >>> + return ret; > >>> + } > >>> + } else { > >>> + dev_info(&pdev->dev, "Regulator node (vtmu) not > >>> found\n"); > >>> + } > >>> + > >>> ret = exynos_map_dt_data(pdev); > >>> if (ret) > >>> goto err_sensor; > >>> -- > >>> 1.9.1 > >>> > >>> > >>> ___ > >>> linux-arm-kernel mailing list > >>> linux-arm-ker...@lists.infradead.org > >>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > >> > >> > >> > > > > > Acked-by: Lukasz Majewski Tested-by: Lukasz Majewski -- 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure
Hello, On Fri, Oct 9, 2015 at 4:28 PM, Krzysztof Kozlowski wrote: > W dniu 09.10.2015 o 01:45, Alim Akhtar pisze: >> Hello, >> >> On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski >> wrote: >>> During probe if the regulator could not be enabled, the error exit path >>> would still disable it. This could lead to unbalanced counter of >>> regulator enable/disable. >>> >> Do you see a regulator unbalanced reported here during boot? You may >> want to add that to commit message. > > I did not see the warning/error message about unbalanced disable. It > would happen in certain condition only - no other enables of regulator > and count going below 0. > > I would have to simulate this error to get the warning message. I don't > think it is worth the effort. > Ok, looking at code, it does looks to be calling regulator disable in case regulator enable fails. Feel free to add Reviewed-by: Alim Akhtar Thanks!! > Best regards, > Krzysztof > >> >>> The patch moves code for getting and enabling the regulator from >>> exynos_map_dt_data() to probe function because it is really not a part >>> of getting Device Tree properties. >>> >>> Signed-off-by: Krzysztof Kozlowski >>> Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe >>> failure") >>> Cc: >>> --- >>> drivers/thermal/samsung/exynos_tmu.c | 34 >>> +- >>> 1 file changed, 17 insertions(+), 17 deletions(-) >>> >>> diff --git a/drivers/thermal/samsung/exynos_tmu.c >>> b/drivers/thermal/samsung/exynos_tmu.c >>> index 0bae8cc6c23a..23f4320f8ef7 100644 >>> --- a/drivers/thermal/samsung/exynos_tmu.c >>> +++ b/drivers/thermal/samsung/exynos_tmu.c >>> @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct >>> platform_device *pdev) >>> struct exynos_tmu_data *data = platform_get_drvdata(pdev); >>> struct exynos_tmu_platform_data *pdata; >>> struct resource res; >>> - int ret; >>> >>> if (!data || !pdev->dev.of_node) >>> return -ENODEV; >>> >>> - /* >>> -* Try enabling the regulator if found >>> -* TODO: Add regulator as an SOC feature, so that regulator enable >>> -* is a compulsory call. >>> -*/ >>> - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >>> - if (!IS_ERR(data->regulator)) { >>> - ret = regulator_enable(data->regulator); >>> - if (ret) { >>> - dev_err(&pdev->dev, "failed to enable vtmu\n"); >>> - return ret; >>> - } >>> - } else { >>> - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >>> - } >>> - >>> data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); >>> if (data->id < 0) >>> data->id = 0; >>> @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device >>> *pdev) >>> 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 >>> +* is a compulsory call. >>> +*/ >>> + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >>> + if (!IS_ERR(data->regulator)) { >>> + ret = regulator_enable(data->regulator); >>> + if (ret) { >>> + dev_err(&pdev->dev, "failed to enable vtmu\n"); >>> + return ret; >>> + } >>> + } else { >>> + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >>> + } >>> + >>> ret = exynos_map_dt_data(pdev); >>> if (ret) >>> goto err_sensor; >>> -- >>> 1.9.1 >>> >>> >>> ___ >>> linux-arm-kernel mailing list >>> linux-arm-ker...@lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >> >> >> > -- Regards, Alim -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure
W dniu 09.10.2015 o 01:45, Alim Akhtar pisze: > Hello, > > On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski > wrote: >> During probe if the regulator could not be enabled, the error exit path >> would still disable it. This could lead to unbalanced counter of >> regulator enable/disable. >> > Do you see a regulator unbalanced reported here during boot? You may > want to add that to commit message. I did not see the warning/error message about unbalanced disable. It would happen in certain condition only - no other enables of regulator and count going below 0. I would have to simulate this error to get the warning message. I don't think it is worth the effort. Best regards, Krzysztof > >> The patch moves code for getting and enabling the regulator from >> exynos_map_dt_data() to probe function because it is really not a part >> of getting Device Tree properties. >> >> Signed-off-by: Krzysztof Kozlowski >> Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe >> failure") >> Cc: >> --- >> drivers/thermal/samsung/exynos_tmu.c | 34 +- >> 1 file changed, 17 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/thermal/samsung/exynos_tmu.c >> b/drivers/thermal/samsung/exynos_tmu.c >> index 0bae8cc6c23a..23f4320f8ef7 100644 >> --- a/drivers/thermal/samsung/exynos_tmu.c >> +++ b/drivers/thermal/samsung/exynos_tmu.c >> @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device >> *pdev) >> struct exynos_tmu_data *data = platform_get_drvdata(pdev); >> struct exynos_tmu_platform_data *pdata; >> struct resource res; >> - int ret; >> >> if (!data || !pdev->dev.of_node) >> return -ENODEV; >> >> - /* >> -* Try enabling the regulator if found >> -* TODO: Add regulator as an SOC feature, so that regulator enable >> -* is a compulsory call. >> -*/ >> - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >> - if (!IS_ERR(data->regulator)) { >> - ret = regulator_enable(data->regulator); >> - if (ret) { >> - dev_err(&pdev->dev, "failed to enable vtmu\n"); >> - return ret; >> - } >> - } else { >> - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >> - } >> - >> data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); >> if (data->id < 0) >> data->id = 0; >> @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device >> *pdev) >> 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 >> +* is a compulsory call. >> +*/ >> + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >> + if (!IS_ERR(data->regulator)) { >> + ret = regulator_enable(data->regulator); >> + if (ret) { >> + dev_err(&pdev->dev, "failed to enable vtmu\n"); >> + return ret; >> + } >> + } else { >> + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >> + } >> + >> ret = exynos_map_dt_data(pdev); >> if (ret) >> goto err_sensor; >> -- >> 1.9.1 >> >> >> ___ >> linux-arm-kernel mailing list >> linux-arm-ker...@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure
Hello, On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski wrote: > During probe if the regulator could not be enabled, the error exit path > would still disable it. This could lead to unbalanced counter of > regulator enable/disable. > Do you see a regulator unbalanced reported here during boot? You may want to add that to commit message. > The patch moves code for getting and enabling the regulator from > exynos_map_dt_data() to probe function because it is really not a part > of getting Device Tree properties. > > Signed-off-by: Krzysztof Kozlowski > Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe > failure") > Cc: > --- > drivers/thermal/samsung/exynos_tmu.c | 34 +- > 1 file changed, 17 insertions(+), 17 deletions(-) > > diff --git a/drivers/thermal/samsung/exynos_tmu.c > b/drivers/thermal/samsung/exynos_tmu.c > index 0bae8cc6c23a..23f4320f8ef7 100644 > --- a/drivers/thermal/samsung/exynos_tmu.c > +++ b/drivers/thermal/samsung/exynos_tmu.c > @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device > *pdev) > struct exynos_tmu_data *data = platform_get_drvdata(pdev); > struct exynos_tmu_platform_data *pdata; > struct resource res; > - int ret; > > if (!data || !pdev->dev.of_node) > return -ENODEV; > > - /* > -* Try enabling the regulator if found > -* TODO: Add regulator as an SOC feature, so that regulator enable > -* is a compulsory call. > -*/ > - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > - if (!IS_ERR(data->regulator)) { > - ret = regulator_enable(data->regulator); > - if (ret) { > - dev_err(&pdev->dev, "failed to enable vtmu\n"); > - return ret; > - } > - } else { > - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); > - } > - > data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); > if (data->id < 0) > data->id = 0; > @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device > *pdev) > 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 > +* is a compulsory call. > +*/ > + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > + if (!IS_ERR(data->regulator)) { > + ret = regulator_enable(data->regulator); > + if (ret) { > + dev_err(&pdev->dev, "failed to enable vtmu\n"); > + return ret; > + } > + } else { > + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); > + } > + > ret = exynos_map_dt_data(pdev); > if (ret) > goto err_sensor; > -- > 1.9.1 > > > ___ > linux-arm-kernel mailing list > linux-arm-ker...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- Regards, Alim -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure
During probe if the regulator could not be enabled, the error exit path would still disable it. This could lead to unbalanced counter of regulator enable/disable. The patch moves code for getting and enabling the regulator from exynos_map_dt_data() to probe function because it is really not a part of getting Device Tree properties. Signed-off-by: Krzysztof Kozlowski Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe failure") Cc: --- drivers/thermal/samsung/exynos_tmu.c | 34 +- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index 0bae8cc6c23a..23f4320f8ef7 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device *pdev) struct exynos_tmu_data *data = platform_get_drvdata(pdev); struct exynos_tmu_platform_data *pdata; struct resource res; - int ret; if (!data || !pdev->dev.of_node) return -ENODEV; - /* -* Try enabling the regulator if found -* TODO: Add regulator as an SOC feature, so that regulator enable -* is a compulsory call. -*/ - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); - if (!IS_ERR(data->regulator)) { - ret = regulator_enable(data->regulator); - if (ret) { - dev_err(&pdev->dev, "failed to enable vtmu\n"); - return ret; - } - } else { - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); - } - data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); if (data->id < 0) data->id = 0; @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device *pdev) 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 +* is a compulsory call. +*/ + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); + if (!IS_ERR(data->regulator)) { + ret = regulator_enable(data->regulator); + if (ret) { + dev_err(&pdev->dev, "failed to enable vtmu\n"); + return ret; + } + } else { + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); + } + ret = exynos_map_dt_data(pdev); if (ret) goto err_sensor; -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html