From: Omar Ramirez Luna <omar.ramirez@ti.com>
To: linux-omap <linux-omap@vger.kernel.org>
Cc: Ameya Palande <ameya.palande@nokia.com>,
Hiroshi Doyu <Hiroshi.DOYU@nokia.com>,
Felipe Contreras <felipe.contreras@nokia.com>,
Nishanth Menon <nm@ti.com>,
Omar Ramirez Luna <omar.ramirez@ti.com>
Subject: [PATCH v2] DSPBRIDGE: function to get the type of clock requested by dsp
Date: Tue, 27 Apr 2010 20:29:17 -0500 [thread overview]
Message-ID: <1272418167-12630-10-git-send-email-omar.ramirez@ti.com> (raw)
In-Reply-To: <1272418167-12630-9-git-send-email-omar.ramirez@ti.com>
DSP can request between 5 types of clocks: IVA2, GPT (5-8), WDT (3),
MCBSP (1-5) or SSI clock. This function will be useful in case
a specific clock framework is associated with the clock.
Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com>
---
drivers/dsp/bridge/services/clk.c | 89 ++++++++++++++++++++++++++++---------
1 files changed, 68 insertions(+), 21 deletions(-)
diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c
index e35b929..d5c3d4e 100644
--- a/drivers/dsp/bridge/services/clk.c
+++ b/drivers/dsp/bridge/services/clk.c
@@ -40,6 +40,13 @@
#define SSI_SIDLE_SMARTIDLE (2 << 3)
#define SSI_MIDLE_NOIDLE (1 << 12)
+/* Clk types requested by the dsp */
+#define IVA2_CLK 0
+#define GPT_CLK 1
+#define WDT_CLK 2
+#define MCBSP_CLK 3
+#define SSI_CLK 4
+
struct dsp_clk_t {
struct clk *clk_handle;
const char *clk_name;
@@ -76,6 +83,26 @@ static struct dsp_clk_t dsp_clks[] = {
{NULL, ""}
};
+static s8 get_clk_type(u8 id)
+{
+ s8 type;
+
+ if (id == DSP_CLK_IVA2_CK)
+ type = IVA2_CLK;
+ else if (id <= DSP_CLK_GPT8_ICK)
+ type = GPT_CLK;
+ else if (id <= DSP_CLK_WDT3_ICK)
+ type = WDT_CLK;
+ else if (id <= DSP_CLK_MCBSP5_ICK)
+ type = MCBSP_CLK;
+ else if (id < DSP_CLK_SSI_ICK)
+ type = SSI_CLK;
+ else
+ type = -1;
+
+ return type;
+}
+
/*
* ======== dsp_clk_exit ========
* Purpose:
@@ -141,23 +168,33 @@ dsp_status dsp_clk_enable(IN enum dsp_clk_id clk_id)
dsp_status status = DSP_SOK;
struct clk *clk_handle;
- DBC_REQUIRE(clk_id < DSP_CLK_NOT_DEFINED);
+ switch (get_clk_type(clk_id)) {
+ case IVA2_CLK:
+ case GPT_CLK:
+ case MCBSP_CLK:
+ case WDT_CLK:
+ case SSI_CLK:
+ clk_handle = dsp_clks[clk_id].clk_handle;
+ if (clk_enable(clk_handle)) {
+ pr_err("dsp_clk_enable: failed to Enable CLK %s, "
+ "CLK dev id = %d\n", dsp_clks[clk_id].clk_name,
+ dsp_clks[clk_id].id);
+ status = -EPERM;
+ }
- clk_handle = dsp_clks[clk_id].clk_handle;
- if (clk_enable(clk_handle)) {
- pr_err("dsp_clk_enable: failed to Enable CLK %s, "
- "CLK dev id = %d\n",
- dsp_clks[clk_id].clk_name,
- dsp_clks[clk_id].id);
- status = -EPERM;
+ /*
+ * The SSI module need to configured not to have the Forced
+ * idle for master interface. If it is set to forced idle,
+ * the SSI module is transitioning to standby thereby causing
+ * the client in the DSP hang waiting for the SSI module to
+ * be active after enabling the clocks
+ */
+ if (clk_id == DSP_CLK_SSI_ICK)
+ ssi_clk_prepare(true);
+ break;
+ default:
+ dev_err(bridge, "Invalid clock id for enable\n");
}
- /* The SSI module need to configured not to have the Forced idle for
- * master interface. If it is set to forced idle, the SSI module is
- * transitioning to standby thereby causing the client in the DSP hang
- * waiting for the SSI module to be active after enabling the clocks
- */
- if (clk_id == DSP_CLK_SSI_FCK)
- ssi_clk_prepare(true);
return status;
}
@@ -175,12 +212,22 @@ dsp_status dsp_clk_disable(IN enum dsp_clk_id clk_id)
DBC_REQUIRE(clk_id < DSP_CLK_NOT_DEFINED);
- clk_handle = dsp_clks[clk_id].clk_handle;
-
- if (clk_id == DSP_CLK_SSI_ICK)
- ssi_clk_prepare(false);
-
- clk_disable(clk_handle);
+ switch (get_clk_type(clk_id)) {
+ case IVA2_CLK:
+ case GPT_CLK:
+ case MCBSP_CLK:
+ case WDT_CLK:
+ case SSI_CLK:
+ clk_handle = dsp_clks[clk_id].clk_handle;
+
+ if (clk_id == DSP_CLK_SSI_ICK)
+ ssi_clk_prepare(false);
+
+ clk_disable(clk_handle);
+ break;
+ default:
+ dev_err(bridge, "Invalid clock id for disable\n");
+ }
return status;
}
--
1.6.0.4
next prev parent reply other threads:[~2010-04-28 1:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-28 1:29 [PATCH v2] generic clk module removal Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove clk_handle from drv interface Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: fail if clk handle is NULL Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Now actually fail if a clk handle is wrong Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Rename services_clk_* to dsp_clk_* Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove unused clock sys_ck Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove function clk_set32k_hz Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove clk_get_use_cnt Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: trivial clock cleanup for unused code Omar Ramirez Luna
2010-04-28 1:29 ` Omar Ramirez Luna [this message]
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: iva2 clock handling Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: use dm timer framework for gpt timers Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: use omap mcbsp to enable mcbsp clocks Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: remove wdt3 from dsp control Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: dsp interface to enable ssi clocks Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: use one call for both ick and fck clocks Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Move MCBSP_CLOCKS code to a common place Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: Balance the number of enable/disable Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: move clk to dsp-clock Omar Ramirez Luna
2010-04-28 1:29 ` [PATCH v2] DSPBRIDGE: reorganize the code to handle peripheral clocks Omar Ramirez Luna
2010-04-28 7:46 ` [PATCH v2] DSPBRIDGE: use dm timer framework for gpt timers Felipe Contreras
2010-04-28 14:15 ` Omar Ramirez Luna
2010-04-28 16:29 ` Kevin Hilman
2010-04-28 16:36 ` Nishanth Menon
2010-04-28 17:00 ` Omar Ramirez Luna
2010-04-28 17:11 ` Vladimir Pantelic
2010-04-28 17:22 ` Nishanth Menon
2010-04-28 17:59 ` Kevin Hilman
2010-04-28 18:56 ` Nishanth Menon
2010-04-28 19:52 ` Vladimir Pantelic
2010-04-28 19:57 ` Nishanth Menon
2010-04-28 20:50 ` Kevin Hilman
2010-04-29 13:40 ` Benoit Cousson
2010-04-29 14:12 ` Kevin Hilman
2010-04-28 17:02 ` Uribe de Leon, Armando
2010-04-28 17:04 ` Felipe Contreras
2010-04-28 1:34 ` [PATCH v2] generic clk module removal Nishanth Menon
2010-04-28 13:55 ` Omar Ramirez Luna
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1272418167-12630-10-git-send-email-omar.ramirez@ti.com \
--to=omar.ramirez@ti.com \
--cc=Hiroshi.DOYU@nokia.com \
--cc=ameya.palande@nokia.com \
--cc=felipe.contreras@nokia.com \
--cc=linux-omap@vger.kernel.org \
--cc=nm@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.