lkml.org 
[lkml]   [2016]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.2.y-ckt 083/211] thermal: exynos: Fix unbalanced regulator disable on probe failure
    Date
    4.2.8-ckt1 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Krzysztof Kozlowski <k.kozlowski@samsung.com>

    commit 824ead03b78403a21449cb7eb153a4344cd3b4c8 upstream.

    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.

    Acked-by: Lukasz Majewski <l.majewski@samsung.com>
    Tested-by: Lukasz Majewski <l.majewski@samsung.com>
    Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
    Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
    Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe failure")
    Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    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 af68d06..e39265b 100644
    --- a/drivers/thermal/samsung/exynos_tmu.c
    +++ b/drivers/thermal/samsung/exynos_tmu.c
    @@ -1169,27 +1169,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;
    @@ -1313,6 +1296,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


    \
     
     \ /
      Last update: 2016-01-05 22:01    [W:4.365 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site