Commit ed625b91 authored by Omar Ramirez Luna's avatar Omar Ramirez Luna Committed by Greg Kroah-Hartman

staging: tidspbridge: request dmtimer clocks on init

Given that dm timer framework doesn't support request of clocks
by soft | hard irqs because some recent changes, tidspbridge needs
to request its clocks on init and enable/disable them on demand.

This was first seen on 3.2-rc1.
Signed-off-by: default avatarOmar Ramirez Luna <omar.ramirez@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 0a7e22e6
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
/* Bridge GPT id (1 - 4), DM Timer id (5 - 8) */ /* Bridge GPT id (1 - 4), DM Timer id (5 - 8) */
#define DMT_ID(id) ((id) + 4) #define DMT_ID(id) ((id) + 4)
#define DM_TIMER_CLOCKS 4
/* Bridge MCBSP id (6 - 10), OMAP Mcbsp id (0 - 4) */ /* Bridge MCBSP id (6 - 10), OMAP Mcbsp id (0 - 4) */
#define MCBSP_ID(id) ((id) - 6) #define MCBSP_ID(id) ((id) - 6)
...@@ -114,8 +115,13 @@ static s8 get_clk_type(u8 id) ...@@ -114,8 +115,13 @@ static s8 get_clk_type(u8 id)
*/ */
void dsp_clk_exit(void) void dsp_clk_exit(void)
{ {
int i;
dsp_clock_disable_all(dsp_clocks); dsp_clock_disable_all(dsp_clocks);
for (i = 0; i < DM_TIMER_CLOCKS; i++)
omap_dm_timer_free(timer[i]);
clk_put(iva2_clk); clk_put(iva2_clk);
clk_put(ssi.sst_fck); clk_put(ssi.sst_fck);
clk_put(ssi.ssr_fck); clk_put(ssi.ssr_fck);
...@@ -130,9 +136,13 @@ void dsp_clk_exit(void) ...@@ -130,9 +136,13 @@ void dsp_clk_exit(void)
void dsp_clk_init(void) void dsp_clk_init(void)
{ {
static struct platform_device dspbridge_device; static struct platform_device dspbridge_device;
int i, id;
dspbridge_device.dev.bus = &platform_bus_type; dspbridge_device.dev.bus = &platform_bus_type;
for (i = 0, id = 5; i < DM_TIMER_CLOCKS; i++, id++)
timer[i] = omap_dm_timer_request_specific(id);
iva2_clk = clk_get(&dspbridge_device.dev, "iva2_ck"); iva2_clk = clk_get(&dspbridge_device.dev, "iva2_ck");
if (IS_ERR(iva2_clk)) if (IS_ERR(iva2_clk))
dev_err(bridge, "failed to get iva2 clock %p\n", iva2_clk); dev_err(bridge, "failed to get iva2 clock %p\n", iva2_clk);
...@@ -204,8 +214,7 @@ int dsp_clk_enable(enum dsp_clk_id clk_id) ...@@ -204,8 +214,7 @@ int dsp_clk_enable(enum dsp_clk_id clk_id)
clk_enable(iva2_clk); clk_enable(iva2_clk);
break; break;
case GPT_CLK: case GPT_CLK:
timer[clk_id - 1] = status = omap_dm_timer_start(timer[clk_id - 1]);
omap_dm_timer_request_specific(DMT_ID(clk_id));
break; break;
#ifdef CONFIG_OMAP_MCBSP #ifdef CONFIG_OMAP_MCBSP
case MCBSP_CLK: case MCBSP_CLK:
...@@ -281,7 +290,7 @@ int dsp_clk_disable(enum dsp_clk_id clk_id) ...@@ -281,7 +290,7 @@ int dsp_clk_disable(enum dsp_clk_id clk_id)
clk_disable(iva2_clk); clk_disable(iva2_clk);
break; break;
case GPT_CLK: case GPT_CLK:
omap_dm_timer_free(timer[clk_id - 1]); status = omap_dm_timer_stop(timer[clk_id - 1]);
break; break;
#ifdef CONFIG_OMAP_MCBSP #ifdef CONFIG_OMAP_MCBSP
case MCBSP_CLK: case MCBSP_CLK:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment