From patchwork Wed Apr 28 15:29:54 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: omar ramirez X-Patchwork-Id: 95701 X-Patchwork-Delegate: omar.ramirez@ti.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o3SFPFMf018387 for ; Wed, 28 Apr 2010 15:25:19 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755026Ab0D1PZI (ORCPT ); Wed, 28 Apr 2010 11:25:08 -0400 Received: from devils.ext.ti.com ([198.47.26.153]:50197 "EHLO devils.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755016Ab0D1PZA (ORCPT ); Wed, 28 Apr 2010 11:25:00 -0400 Received: from dlep36.itg.ti.com ([157.170.170.91]) by devils.ext.ti.com (8.13.7/8.13.7) with ESMTP id o3SFOt3e009411 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 28 Apr 2010 10:24:55 -0500 Received: from legion.dal.design.ti.com (localhost [127.0.0.1]) by dlep36.itg.ti.com (8.13.8/8.13.8) with ESMTP id o3SFOtlW015267; Wed, 28 Apr 2010 10:24:55 -0500 (CDT) Received: from Matrix (matrix.am.dhcp.ti.com [128.247.75.166]) by legion.dal.design.ti.com (8.11.7p1+Sun/8.11.7) with ESMTP id o3SFOtZ24992; Wed, 28 Apr 2010 10:24:55 -0500 (CDT) Received: by Matrix (Postfix, from userid 1003) id 2F3B11663DA; Wed, 28 Apr 2010 10:29:58 -0500 (CDT) From: Omar Ramirez Luna To: linux-omap Cc: Ameya Palande , Hiroshi Doyu , Felipe Contreras , Nishanth Menon , Omar Ramirez Luna Subject: [PATCH v2 16/19] DSPBRIDGE: Move MCBSP_CLOCKS code to a common place Date: Wed, 28 Apr 2010 10:29:54 -0500 Message-Id: <1272468597-6748-17-git-send-email-omar.ramirez@ti.com> X-Mailer: git-send-email 1.5.4.3 In-Reply-To: <1272468597-6748-16-git-send-email-omar.ramirez@ti.com> References: <1272468597-6748-1-git-send-email-omar.ramirez@ti.com> <1272468597-6748-2-git-send-email-omar.ramirez@ti.com> <1272468597-6748-3-git-send-email-omar.ramirez@ti.com> <1272468597-6748-4-git-send-email-omar.ramirez@ti.com> <1272468597-6748-5-git-send-email-omar.ramirez@ti.com> <1272468597-6748-6-git-send-email-omar.ramirez@ti.com> <1272468597-6748-7-git-send-email-omar.ramirez@ti.com> <1272468597-6748-8-git-send-email-omar.ramirez@ti.com> <1272468597-6748-9-git-send-email-omar.ramirez@ti.com> <1272468597-6748-10-git-send-email-omar.ramirez@ti.com> <1272468597-6748-11-git-send-email-omar.ramirez@ti.com> <1272468597-6748-12-git-send-email-omar.ramirez@ti.com> <1272468597-6748-13-git-send-email-omar.ramirez@ti.com> <1272468597-6748-14-git-send-email-omar.ramirez@ti.com> <1272468597-6748-15-git-send-email-omar.ramirez@ti.com> <1272468597-6748-16-git-send-email-omar.ramirez@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]); Wed, 28 Apr 2010 15:25:19 +0000 (UTC) diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c index 9a439c7..763a599 100644 --- a/drivers/dsp/bridge/services/clk.c +++ b/drivers/dsp/bridge/services/clk.c @@ -25,6 +25,10 @@ #include #include #include +#include +#include +#include +#include "_tiomap.h" /* ----------------------------------- Trace & Debug */ #include @@ -124,6 +128,52 @@ void dsp_clk_init(void) ssi.sst_fck, ssi.ssr_fck, ssi.ick); } +static void mcbsp_clk_prepare(bool flag, u8 id) +{ + struct cfg_hostres *resources; + struct dev_object *hdev_object = NULL; + struct wmd_dev_context *wmd_context = NULL; + u32 val; + + hdev_object = (struct dev_object *)drv_get_first_dev_object(); + if (!hdev_object) + return; + + dev_get_wmd_context(hdev_object, &wmd_context); + if (!wmd_context) + return; + + resources = wmd_context->resources; + if (!resources) + return; + + if (flag) { + if (id == DSP_CLK_MCBSP1) { + /* set MCBSP1_CLKS, on McBSP1 ON */ + val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); + val |= 1 << 2; + __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); + } else if (id == DSP_CLK_MCBSP2) { + /* set MCBSP2_CLKS, on McBSP2 ON */ + val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); + val |= 1 << 6; + __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); + } + } else { + if (id == DSP_CLK_MCBSP1) { + /* clear MCBSP1_CLKS, on McBSP1 OFF */ + val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); + val &= ~(1 << 2); + __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); + } else if (id == DSP_CLK_MCBSP2) { + /* clear MCBSP2_CLKS, on McBSP2 OFF */ + val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); + val &= ~(1 << 6); + __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); + } + } +} + /* * ======== dsp_clk_enable ======== * Purpose: @@ -142,6 +192,7 @@ dsp_status dsp_clk_enable(IN enum dsp_clk_id clk_id) timer[clk_id] = omap_dm_timer_request_specific(DMT_ID(clk_id)); break; case MCBSP_CLK: + mcbsp_clk_prepare(true, clk_id); omap_mcbsp_set_io_type(MCBSP_ID(clk_id), OMAP_MCBSP_POLL_IO); omap_mcbsp_request(MCBSP_ID(clk_id)); break; @@ -187,6 +238,7 @@ dsp_status dsp_clk_disable(IN enum dsp_clk_id clk_id) omap_dm_timer_free(timer[clk_id]); break; case MCBSP_CLK: + mcbsp_clk_prepare(false, clk_id); omap_mcbsp_free(MCBSP_ID(clk_id)); break; case WDT_CLK: diff --git a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c index 879f99e..6d1d557 100644 --- a/drivers/dsp/bridge/wmd/tiomap3430_pwr.c +++ b/drivers/dsp/bridge/wmd/tiomap3430_pwr.c @@ -288,16 +288,10 @@ dsp_status dsp_peripheral_clk_ctrl(struct wmd_dev_context *dev_context, u32 tmp_index; u32 dsp_per_clks_before; dsp_status status = DSP_SOK; - struct cfg_hostres *resources = dev_context->resources; - u32 value; dsp_per_clks_before = dev_context->dsp_per_clks; ext_clk = (u32) *((u32 *) pargs); - - if (!resources) - return -EPERM; - ext_clk_id = ext_clk & MBX_PM_CLK_IDMASK; /* process the power message -- TODO, keep it in a separate function */ @@ -317,21 +311,6 @@ dsp_status dsp_peripheral_clk_ctrl(struct wmd_dev_context *dev_context, ext_clk_cmd = (ext_clk >> MBX_PM_CLK_CMDSHIFT) & MBX_PM_CLK_CMDMASK; switch (ext_clk_cmd) { case BPWR_DISABLE_CLOCK: - if (bpwr_clkid[clk_id_index] == BPWR_MCBSP1) { - /* clear MCBSP1_CLKS, on McBSP1 OFF */ - value = __raw_readl( - resources->dw_sys_ctrl_base + 0x274); - value &= ~(1 << 2); - __raw_writel(value, - resources->dw_sys_ctrl_base + 0x274); - } else if (bpwr_clkid[clk_id_index] == BPWR_MCBSP2) { - /* clear MCBSP2_CLKS, on McBSP2 OFF */ - value = __raw_readl( - resources->dw_sys_ctrl_base + 0x274); - value &= ~(1 << 6); - __raw_writel(value, - resources->dw_sys_ctrl_base + 0x274); - } status = dsp_clk_disable(bpwr_clks[clk_id_index].clk); dsp_clk_wakeup_event_ctrl(bpwr_clks[clk_id_index].clk_id, false); @@ -342,21 +321,6 @@ dsp_status dsp_peripheral_clk_ctrl(struct wmd_dev_context *dev_context, break; case BPWR_ENABLE_CLOCK: status = dsp_clk_enable(bpwr_clks[clk_id_index].clk); - if (bpwr_clkid[clk_id_index] == BPWR_MCBSP1) { - /* set MCBSP1_CLKS, on McBSP1 ON */ - value = __raw_readl( - resources->dw_sys_ctrl_base + 0x274); - value |= 1 << 2; - __raw_writel(value, - resources->dw_sys_ctrl_base + 0x274); - } else if (bpwr_clkid[clk_id_index] == BPWR_MCBSP2) { - /* set MCBSP2_CLKS, on McBSP2 ON */ - value = __raw_readl( - resources->dw_sys_ctrl_base + 0x274); - value |= 1 << 6; - __raw_writel(value, - resources->dw_sys_ctrl_base + 0x274); - } dsp_clk_wakeup_event_ctrl(bpwr_clks[clk_id_index].clk_id, true); if (DSP_SUCCEEDED(status)) (dev_context->dsp_per_clks) |= (1 << clk_id_index); @@ -454,30 +418,9 @@ dsp_status dsp_peripheral_clocks_disable(struct wmd_dev_context *dev_context, { u32 clk_idx; dsp_status status = DSP_SOK; - struct cfg_hostres *resources = dev_context->resources; - u32 value; - - if (!resources) - return -EPERM; for (clk_idx = 0; clk_idx < MBX_PM_MAX_RESOURCES; clk_idx++) { if (((dev_context->dsp_per_clks) >> clk_idx) & 0x01) { - if (bpwr_clkid[clk_idx] == BPWR_MCBSP1) { - /* clear MCBSP1_CLKS, on McBSP1 OFF */ - value = __raw_readl(resources->dw_sys_ctrl_base - + 0x274); - value &= ~(1 << 2); - __raw_writel(value, resources->dw_sys_ctrl_base - + 0x274); - } else if (bpwr_clkid[clk_idx] == BPWR_MCBSP2) { - /* clear MCBSP2_CLKS, on McBSP2 OFF */ - value = __raw_readl(resources->dw_sys_ctrl_base - + 0x274); - value &= ~(1 << 6); - __raw_writel(value, resources->dw_sys_ctrl_base - + 0x274); - } - /* Disables the clocks of the peripheral */ status = dsp_clk_disable(bpwr_clks[clk_idx].clk); } @@ -494,31 +437,11 @@ dsp_status dsp_peripheral_clocks_enable(struct wmd_dev_context *dev_context, { u32 clk_idx; dsp_status clk_status = -EPERM; - struct cfg_hostres *resources = dev_context->resources; - u32 value; - - if (!resources) - return -EPERM; for (clk_idx = 0; clk_idx < MBX_PM_MAX_RESOURCES; clk_idx++) { if (((dev_context->dsp_per_clks) >> clk_idx) & 0x01) { /* Enable the clocks of the peripheral */ clk_status = dsp_clk_enable(bpwr_clks[clk_idx].clk); - if (bpwr_clkid[clk_idx] == BPWR_MCBSP1) { - /* set MCBSP1_CLKS, on McBSP1 ON */ - value = __raw_readl(resources->dw_sys_ctrl_base - + 0x274); - value |= 1 << 2; - __raw_writel(value, resources->dw_sys_ctrl_base - + 0x274); - } else if (bpwr_clkid[clk_idx] == BPWR_MCBSP2) { - /* set MCBSP2_CLKS, on McBSP2 ON */ - value = __raw_readl(resources->dw_sys_ctrl_base - + 0x274); - value |= 1 << 6; - __raw_writel(value, resources->dw_sys_ctrl_base - + 0x274); - } } } return clk_status;