[1/2] Thermal: exynos: Add clk_{un}prepare APIs

Message ID 1366285079-10395-1-git-send-email-sachin.kamat@linaro.org
State Accepted
Headers show

Commit Message

Sachin Kamat April 18, 2013, 11:37 a.m.
clk_{un}prepare APIs are required to migrate to common
clock framework. While at it convert to use devm_clk_get as
it removes some cleanup code.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Cc: Amit Daniel Kachhap <amit.daniel@samsung.com>
---
 drivers/thermal/exynos_thermal.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Sachin Kamat April 22, 2013, 6:14 p.m. | #1
Hi Eduardo,

Any comments on this series? If possible would like to have this in
3.10 itself as without this TMU support would be broken on exynos
machines due to migration to common clock framework.

On 18 April 2013 17:07, Sachin Kamat <sachin.kamat@linaro.org> wrote:
> clk_{un}prepare APIs are required to migrate to common
> clock framework. While at it convert to use devm_clk_get as
> it removes some cleanup code.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> Cc: Amit Daniel Kachhap <amit.daniel@samsung.com>
> ---
>  drivers/thermal/exynos_thermal.c |   10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/thermal/exynos_thermal.c b/drivers/thermal/exynos_thermal.c
> index e34d842..9df96e5 100644
> --- a/drivers/thermal/exynos_thermal.c
> +++ b/drivers/thermal/exynos_thermal.c
> @@ -937,12 +937,16 @@ static int exynos_tmu_probe(struct platform_device *pdev)
>                 return ret;
>         }
>
> -       data->clk = clk_get(NULL, "tmu_apbif");
> +       data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");
>         if (IS_ERR(data->clk)) {
>                 dev_err(&pdev->dev, "Failed to get clock\n");
>                 return  PTR_ERR(data->clk);
>         }
>
> +       ret = clk_prepare(data->clk);
> +       if (ret)
> +               return ret;
> +
>         if (pdata->type == SOC_ARCH_EXYNOS ||
>                                 pdata->type == SOC_ARCH_EXYNOS4210)
>                 data->soc = pdata->type;
> @@ -994,7 +998,7 @@ static int exynos_tmu_probe(struct platform_device *pdev)
>         return 0;
>  err_clk:
>         platform_set_drvdata(pdev, NULL);
> -       clk_put(data->clk);
> +       clk_unprepare(data->clk);
>         return ret;
>  }
>
> @@ -1006,7 +1010,7 @@ static int exynos_tmu_remove(struct platform_device *pdev)
>
>         exynos_unregister_thermal();
>
> -       clk_put(data->clk);
> +       clk_unprepare(data->clk);
>
>         platform_set_drvdata(pdev, NULL);
>
> --
> 1.7.9.5
>
Eduardo Valentin April 22, 2013, 6:25 p.m. | #2
On 18-04-2013 07:37, Sachin Kamat wrote:
> clk_{un}prepare APIs are required to migrate to common
> clock framework. While at it convert to use devm_clk_get as
> it removes some cleanup code.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> Cc: Amit Daniel Kachhap <amit.daniel@samsung.com>
> ---
>   drivers/thermal/exynos_thermal.c |   10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/thermal/exynos_thermal.c b/drivers/thermal/exynos_thermal.c
> index e34d842..9df96e5 100644
> --- a/drivers/thermal/exynos_thermal.c
> +++ b/drivers/thermal/exynos_thermal.c
> @@ -937,12 +937,16 @@ static int exynos_tmu_probe(struct platform_device *pdev)
>   		return ret;
>   	}
>
> -	data->clk = clk_get(NULL, "tmu_apbif");
> +	data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");

Here you are also changing the sequence from clk_get(NULL, ...) to 
clk_get(&pdev->dev, ...). Is your platform code ready to match to your 
device node?

>   	if (IS_ERR(data->clk)) {
>   		dev_err(&pdev->dev, "Failed to get clock\n");
>   		return  PTR_ERR(data->clk);
>   	}
>
> +	ret = clk_prepare(data->clk);
> +	if (ret)
> +		return ret;
> +
>   	if (pdata->type == SOC_ARCH_EXYNOS ||
>   				pdata->type == SOC_ARCH_EXYNOS4210)
>   		data->soc = pdata->type;
> @@ -994,7 +998,7 @@ static int exynos_tmu_probe(struct platform_device *pdev)
>   	return 0;
>   err_clk:
>   	platform_set_drvdata(pdev, NULL);
> -	clk_put(data->clk);
> +	clk_unprepare(data->clk);
>   	return ret;
>   }
>
> @@ -1006,7 +1010,7 @@ static int exynos_tmu_remove(struct platform_device *pdev)
>
>   	exynos_unregister_thermal();
>
> -	clk_put(data->clk);
> +	clk_unprepare(data->clk);
>
>   	platform_set_drvdata(pdev, NULL);
>
>
Sachin Kamat April 23, 2013, 3:38 a.m. | #3
On 22 April 2013 23:55, Eduardo Valentin <eduardo.valentin@ti.com> wrote:
> On 18-04-2013 07:37, Sachin Kamat wrote:
>>
>> clk_{un}prepare APIs are required to migrate to common
>> clock framework. While at it convert to use devm_clk_get as
>> it removes some cleanup code.
>>
>> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
>> Cc: Amit Daniel Kachhap <amit.daniel@samsung.com>
>> ---
>>   drivers/thermal/exynos_thermal.c |   10 +++++++---
>>   1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/thermal/exynos_thermal.c
>> b/drivers/thermal/exynos_thermal.c
>> index e34d842..9df96e5 100644
>> --- a/drivers/thermal/exynos_thermal.c
>> +++ b/drivers/thermal/exynos_thermal.c
>> @@ -937,12 +937,16 @@ static int exynos_tmu_probe(struct platform_device
>> *pdev)
>>                 return ret;
>>         }
>>
>> -       data->clk = clk_get(NULL, "tmu_apbif");
>> +       data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");
>
>
> Here you are also changing the sequence from clk_get(NULL, ...) to
> clk_get(&pdev->dev, ...). Is your platform code ready to match to your
> device node?

Yes. This has been tested on Exynos4 and 5 DT enabled boards (Origen
4210, 4412 and Arndale).
Eduardo Valentin April 23, 2013, 12:44 p.m. | #4
Rui,

On 22-04-2013 23:38, Sachin Kamat wrote:
> On 22 April 2013 23:55, Eduardo Valentin <eduardo.valentin@ti.com> wrote:
>> On 18-04-2013 07:37, Sachin Kamat wrote:
>>>
>>> clk_{un}prepare APIs are required to migrate to common
>>> clock framework. While at it convert to use devm_clk_get as
>>> it removes some cleanup code.
>>>
>>> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
>>> Cc: Amit Daniel Kachhap <amit.daniel@samsung.com>
>>> ---
>>>    drivers/thermal/exynos_thermal.c |   10 +++++++---
>>>    1 file changed, 7 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/thermal/exynos_thermal.c
>>> b/drivers/thermal/exynos_thermal.c
>>> index e34d842..9df96e5 100644
>>> --- a/drivers/thermal/exynos_thermal.c
>>> +++ b/drivers/thermal/exynos_thermal.c
>>> @@ -937,12 +937,16 @@ static int exynos_tmu_probe(struct platform_device
>>> *pdev)
>>>                  return ret;
>>>          }
>>>
>>> -       data->clk = clk_get(NULL, "tmu_apbif");
>>> +       data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");
>>
>>
>> Here you are also changing the sequence from clk_get(NULL, ...) to
>> clk_get(&pdev->dev, ...). Is your platform code ready to match to your
>> device node?
>
> Yes. This has been tested on Exynos4 and 5 DT enabled boards (Origen
> 4210, 4412 and Arndale).

In this case, this patch looks fine to me.

Acked-by: Eduardo Valentin <eduardo.valentin@ti.com>

>

Patch

diff --git a/drivers/thermal/exynos_thermal.c b/drivers/thermal/exynos_thermal.c
index e34d842..9df96e5 100644
--- a/drivers/thermal/exynos_thermal.c
+++ b/drivers/thermal/exynos_thermal.c
@@ -937,12 +937,16 @@  static int exynos_tmu_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	data->clk = clk_get(NULL, "tmu_apbif");
+	data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");
 	if (IS_ERR(data->clk)) {
 		dev_err(&pdev->dev, "Failed to get clock\n");
 		return  PTR_ERR(data->clk);
 	}
 
+	ret = clk_prepare(data->clk);
+	if (ret)
+		return ret;
+
 	if (pdata->type == SOC_ARCH_EXYNOS ||
 				pdata->type == SOC_ARCH_EXYNOS4210)
 		data->soc = pdata->type;
@@ -994,7 +998,7 @@  static int exynos_tmu_probe(struct platform_device *pdev)
 	return 0;
 err_clk:
 	platform_set_drvdata(pdev, NULL);
-	clk_put(data->clk);
+	clk_unprepare(data->clk);
 	return ret;
 }
 
@@ -1006,7 +1010,7 @@  static int exynos_tmu_remove(struct platform_device *pdev)
 
 	exynos_unregister_thermal();
 
-	clk_put(data->clk);
+	clk_unprepare(data->clk);
 
 	platform_set_drvdata(pdev, NULL);