From patchwork Mon Aug 23 15:57:57 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Senthilvadivu Guruswamy X-Patchwork-Id: 124641 X-Patchwork-Delegate: khilman@deeprootsystems.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o7NFwQVS016508 for ; Mon, 23 Aug 2010 15:59:06 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754268Ab0HWP6b (ORCPT ); Mon, 23 Aug 2010 11:58:31 -0400 Received: from arroyo.ext.ti.com ([192.94.94.40]:38245 "EHLO arroyo.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754242Ab0HWP6Z (ORCPT ); Mon, 23 Aug 2010 11:58:25 -0400 Received: from dbdp31.itg.ti.com ([172.24.170.98]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id o7NFwEIj028332 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 23 Aug 2010 10:58:16 -0500 Received: from linfarm476.india.ti.com (localhost [127.0.0.1]) by dbdp31.itg.ti.com (8.13.8/8.13.8) with ESMTP id o7NFwB1r001717; Mon, 23 Aug 2010 21:28:11 +0530 (IST) Received: from linfarm476.india.ti.com (localhost [127.0.0.1]) by linfarm476.india.ti.com (8.12.11/8.12.11) with ESMTP id o7NFwB0v011230; Mon, 23 Aug 2010 21:28:11 +0530 Received: (from a0876342@localhost) by linfarm476.india.ti.com (8.12.11/8.12.11/Submit) id o7NFwBRQ011228; Mon, 23 Aug 2010 21:28:11 +0530 From: Guruswamy Senthilvadivu To: linux-omap@vger.kernel.org, tomi.valkeinen@nokia.com, paul@pwsan.com, khilman@ti.com Cc: Senthilvadivu Guruswamy Subject: [PATCH 08/20] Replace clk_enable/disable APIs with HWMOD APIs Date: Mon, 23 Aug 2010 21:27:57 +0530 Message-Id: <1282579089-10487-9-git-send-email-svadivu@ti.com> X-Mailer: git-send-email 1.5.6.6 In-Reply-To: <1282579089-10487-8-git-send-email-svadivu@ti.com> References: <1282579089-10487-1-git-send-email-svadivu@ti.com> <1282579089-10487-2-git-send-email-svadivu@ti.com> <1282579089-10487-3-git-send-email-svadivu@ti.com> <1282579089-10487-4-git-send-email-svadivu@ti.com> <1282579089-10487-5-git-send-email-svadivu@ti.com> <1282579089-10487-6-git-send-email-svadivu@ti.com> <1282579089-10487-7-git-send-email-svadivu@ti.com> <1282579089-10487-8-git-send-email-svadivu@ti.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Mon, 23 Aug 2010 15:59:06 +0000 (UTC) diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index 15d0399..098ff96 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c @@ -61,6 +61,7 @@ struct dss_reg { static struct { struct platform_device *pdev; + struct omap_display_platform_data *pdata; void __iomem *base; int ctx_id; @@ -310,14 +311,26 @@ static unsigned count_clk_bits(enum dss_clock clks) return num_clks; } +static inline void enable_clocks(bool enable) + { + static int use_count; + + use_count += enable ? 1 : -1; + if (use_count < 0) + use_count = 0; + + if (enable && use_count == 1) + dss.pdata->device_enable(dss.pdev); + else if (!enable && use_count == 0) + dss.pdata->device_idle(dss.pdev); +} + static void dss_clk_enable_no_ctx(enum dss_clock clks) { unsigned num_clks = count_clk_bits(clks); - if (clks & DSS_CLK_ICK) - clk_enable(dss.dss_ick); - if (clks & DSS_CLK_FCK1) - clk_enable(dss.dss1_fck); + if ((clks & DSS_CLK_ICK) || (clks & DSS_CLK_FCK1)) + enable_clocks(1); if (clks & DSS_CLK_FCK2) clk_enable(dss.dss2_fck); if (clks & DSS_CLK_54M) @@ -342,10 +355,8 @@ static void dss_clk_disable_no_ctx(enum dss_clock clks) { unsigned num_clks = count_clk_bits(clks); - if (clks & DSS_CLK_ICK) - clk_disable(dss.dss_ick); - if (clks & DSS_CLK_FCK1) - clk_disable(dss.dss1_fck); + if ((clks & DSS_CLK_ICK) || (clks & DSS_CLK_FCK1)) + enable_clocks(0); if (clks & DSS_CLK_FCK2) clk_disable(dss.dss2_fck); if (clks & DSS_CLK_54M) @@ -447,6 +458,7 @@ static int omap_dsshw_probe(struct platform_device *pdev) int r; dss.pdev = pdev; + dss.pdata = dss.pdev->dev.platform_data; r = dss_get_clocks(); if (r)