On Wednesday, 26 December 2012, Inki Dae <
inki.dae@samsung.com> wrote:
>
>
> 2012/12/24 Sachin Kamat <
sachin.kamat@linaro.org>
>>
>> This eliminates the need for explicit clk_put and makes the
>> cleanup and exit path code simpler.
>>
>> Cc: Eunchul Kim <
chulspro.kim@samsung.com>
>> Signed-off-by: Sachin Kamat <
sachin.kamat@linaro.org>
>> ---
>> drivers/gpu/drm/exynos/exynos_drm_fimc.c | 46 ++++++-----------------------
>> 1 files changed, 10 insertions(+), 36 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimc.c b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
>> index 972aa70..c4006b8 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fimc.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
>> @@ -1739,64 +1739,50 @@ static int __devinit fimc_probe(struct platform_device *pdev)
>> platform_get_device_id(pdev)->driver_data;
>>
>> /* clock control */
>> - ctx->sclk_fimc_clk = clk_get(dev, "sclk_fimc");
>> + ctx->sclk_fimc_clk = devm_clk_get(dev, "sclk_fimc");
>> if (IS_ERR(ctx->sclk_fimc_clk)) {
>> dev_err(dev, "failed to get src fimc clock.\n");
>> return PTR_ERR(ctx->sclk_fimc_clk);
>> }
>> clk_enable(ctx->sclk_fimc_clk);
>>
>> - ctx->fimc_clk = clk_get(dev, "fimc");
>> + ctx->fimc_clk = devm_clk_get(dev, "fimc");
>> if (IS_ERR(ctx->fimc_clk)) {
>> dev_err(dev, "failed to get fimc clock.\n");
>> clk_disable(ctx->sclk_fimc_clk);
>> - clk_put(ctx->sclk_fimc_clk);
>> return PTR_ERR(ctx->fimc_clk);
>> }
>>
>> - ctx->wb_clk = clk_get(dev, "pxl_async0");
>> + ctx->wb_clk = devm_clk_get(dev, "pxl_async0");
>> if (IS_ERR(ctx->wb_clk)) {
>> dev_err(dev, "failed to get writeback a clock.\n");
>> clk_disable(ctx->sclk_fimc_clk);
>> - clk_put(ctx->sclk_fimc_clk);
>> - clk_put(ctx->fimc_clk);
>> return PTR_ERR(ctx->wb_clk);
>> }
>>
>> - ctx->wb_b_clk = clk_get(dev, "pxl_async1");
>> + ctx->wb_b_clk = devm_clk_get(dev, "pxl_async1");
>> if (IS_ERR(ctx->wb_b_clk)) {
>> dev_err(dev, "failed to get writeback b clock.\n");
>> clk_disable(ctx->sclk_fimc_clk);
>> - clk_put(ctx->sclk_fimc_clk);
>> - clk_put(ctx->fimc_clk);
>> - clk_put(ctx->wb_clk);
>> return PTR_ERR(ctx->wb_b_clk);
>> }
>>
>> - parent_clk = clk_get(dev, ddata->parent_clk);
>> + parent_clk = devm_clk_get(dev, ddata->parent_clk);
>>
>> if (IS_ERR(parent_clk)) {
>> dev_err(dev, "failed to get parent clock.\n");
>> clk_disable(ctx->sclk_fimc_clk);
>> - clk_put(ctx->sclk_fimc_clk);
>> - clk_put(ctx->fimc_clk);
>> - clk_put(ctx->wb_clk);
>> - clk_put(ctx->wb_b_clk);
>> return PTR_ERR(parent_clk);
>> }
>>
>> if (clk_set_parent(ctx->sclk_fimc_clk, parent_clk)) {
>> dev_err(dev, "failed to set parent.\n");
>> - clk_put(parent_clk);
>> + devm_clk_put(dev, parent_clk);
>
> remove the above call. is there any reason that devm_clk_put should be called here?