From patchwork Mon Apr 8 11:07:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vikas C Sajjan X-Patchwork-Id: 2408531 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork2.kernel.org (Postfix) with ESMTP id 54EE2DFB78 for ; Mon, 8 Apr 2013 13:22:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 14480E626C for ; Mon, 8 Apr 2013 06:22:50 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pd0-f177.google.com (mail-pd0-f177.google.com [209.85.192.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 3F9DBE6127 for ; Mon, 8 Apr 2013 04:07:59 -0700 (PDT) Received: by mail-pd0-f177.google.com with SMTP id u11so3185531pdi.36 for ; Mon, 08 Apr 2013 04:07:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer :x-gm-message-state; bh=LVeu5zhVSmApfUfdpl8Niganc4ew1qQzuyT+gNgDg0A=; b=mi35faiF7xBwNCRCpVYS7sGQTHqUBxbEKPI2HurXx2vDBCR86Ylage4IVVXzaq0tAG skcvJ0PSopEhFxcWVPi/MS0nW0AJdPLErjkw1RoZnX4Glx5OyHJ8yh9UUD5Z21VlCInv NJE2k2Wu9UaCmcmqpLdyd1mN35n5NiMht9XDmc4IJXus+guOknjY/Iuhrio3L52fE880 fqIetN4Q2u7mwN76u8JjkdKCG7j5dQA81cXUpw+26vkI6tNe51Y2bCPmygE2FWwD9zSb /NkDRYCGGrJWeFzxEkBzSbhl3AKOl2aP571TTqjv1vqUMAg7iWaPCHERCiA/yDsixF5D eb0g== X-Received: by 10.66.254.136 with SMTP id ai8mr35783276pad.26.1365419278504; Mon, 08 Apr 2013 04:07:58 -0700 (PDT) Received: from localhost.localdomain ([115.113.119.130]) by mx.google.com with ESMTPS id pa2sm37874152pac.9.2013.04.08.04.07.53 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 08 Apr 2013 04:07:57 -0700 (PDT) From: Vikas Sajjan To: dri-devel@lists.freedesktop.org Subject: [PATCH v4] drm/exynos: prepare FIMD clocks Date: Mon, 8 Apr 2013 16:37:45 +0530 Message-Id: <1365419265-21238-1-git-send-email-vikas.sajjan@linaro.org> X-Mailer: git-send-email 1.7.9.5 X-Gm-Message-State: ALoCoQnwDp1fXzDxaQ0IFSQn0NcC6+eMpjCRix9AbaYSUAX9DLFYmm9T6ln673PYMwrFUTarDnP4 X-Mailman-Approved-At: Mon, 08 Apr 2013 06:22:38 -0700 Cc: kgene.kim@samsung.com, patches@linaro.org, linux-samsung-soc@vger.kernel.org, linaro-kernel@lists.linaro.org, linux-media@vger.kernel.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org While migrating to common clock framework (CCF), I found that the FIMD clocks were pulled down by the CCF. If CCF finds any clock(s) which has NOT been claimed by any of the drivers, then such clock(s) are PULLed low by CCF. Calling clk_prepare() for FIMD clocks fixes the issue. This patch also replaces clk_disable() with clk_unprepare() during exit, since clk_prepare() is called in fimd_probe(). Signed-off-by: Vikas Sajjan --- Changes since v3: - added clk_prepare() in fimd_probe() and clk_unprepare() in fimd_remove() as suggested by Viresh Kumar Changes since v2: - moved clk_prepare_enable() and clk_disable_unprepare() from fimd_probe() to fimd_clock() as suggested by Inki Dae Changes since v1: - added error checking for clk_prepare_enable() and also replaced clk_disable() with clk_disable_unprepare() during exit. --- drivers/gpu/drm/exynos/exynos_drm_fimd.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 9537761..aa22370 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -934,6 +934,16 @@ static int fimd_probe(struct platform_device *pdev) return ret; } + ret = clk_prepare(ctx->bus_clk); + if (ret < 0) + return ret; + + ret = clk_prepare(ctx->lcd_clk); + if (ret < 0) { + clk_unprepare(ctx->bus_clk); + return ret; + } + ctx->vidcon0 = pdata->vidcon0; ctx->vidcon1 = pdata->vidcon1; ctx->default_win = pdata->default_win; @@ -981,8 +991,8 @@ static int fimd_remove(struct platform_device *pdev) if (ctx->suspended) goto out; - clk_disable(ctx->lcd_clk); - clk_disable(ctx->bus_clk); + clk_unprepare(ctx->lcd_clk); + clk_unprepare(ctx->bus_clk); pm_runtime_set_suspended(dev); pm_runtime_put_sync(dev);