lkml.org 
[lkml]   [2015]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 3.19.y-ckt 084/164] thermal: exynos: Fix unbalanced regulator disable on probe failure
    From
    Date
    W dniu 03.12.2015 o 01:58, Kamal Mostafa pisze:
    > 3.19.8-ckt11 -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 | 33 ++++++++++++++++-----------------
    > 1 file changed, 16 insertions(+), 17 deletions(-)

    This patch shouldn't be backported before 4.2. It fixes a bug introduced
    in 4.2: 5f09a5cbd14a.

    For kernels <4.2 this bug does not exist but fortunately the patch looks
    harmless. Anyway I think that still it shouldn't be ported for <4.2.

    Best regards,
    Krzysztof


    >
    > diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
    > index 7da2fdc..26f8e86 100644
    > --- a/drivers/thermal/samsung/exynos_tmu.c
    > +++ b/drivers/thermal/samsung/exynos_tmu.c
    > @@ -729,27 +729,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;
    > @@ -849,6 +832,22 @@ static int exynos_tmu_probe(struct platform_device *pdev)
    > platform_set_drvdata(pdev, data);
    > mutex_init(&data->lock);
    >
    > + /*
    > + * 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)
    > return ret;
    >



    \
     
     \ /
      Last update: 2015-12-09 14:41    [W:4.112 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site