diff options
author | Gary King <gking@nvidia.com> | 2010-05-17 19:47:39 -0700 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-05-17 19:49:24 -0700 |
commit | 80d5c87843a64fa49f520701c6c2959bb46c0004 (patch) | |
tree | 7d343cbde4983b58e811812f6363370176d19001 | |
parent | b8261a455d683a787c2d0f30930d6f5b99b0cbf4 (diff) |
[ARM/tegra] suspend: move initialization into a dedicated function
perform resource acquisition in a dedicated init-time function, to
eliminate sleeping-inside-spinlock problems.
Change-Id: If0b54a329c316314e78a6f7aa2c678a45dc298c3
-rw-r--r-- | arch/arm/mach-tegra/board.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/common.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/suspend.c | 16 |
3 files changed, 11 insertions, 7 deletions
diff --git a/arch/arm/mach-tegra/board.h b/arch/arm/mach-tegra/board.h index 3d06354136f2..06ea725f3ef0 100644 --- a/arch/arm/mach-tegra/board.h +++ b/arch/arm/mach-tegra/board.h @@ -27,6 +27,7 @@ void __init tegra_common_init(void); void __init tegra_map_common_io(void); void __init tegra_init_irq(void); void __init tegra_init_clock(void); +void __init tegra_init_suspend(void); extern struct sys_timer tegra_timer; #endif diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index b3b42004f3ac..751dd09c3f0d 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -66,6 +66,7 @@ void __init tegra_common_init(void) nvmap_add_carveout_heap(TEGRA_IRAM_BASE, TEGRA_IRAM_SIZE, "iram", NVMEM_HEAP_CARVEOUT_IRAM); tegra_init_clock(); + tegra_init_suspend(); tegra_init_cache(); tegra_dma_init(); arm_pm_restart = tegra_machine_restart; diff --git a/arch/arm/mach-tegra/suspend.c b/arch/arm/mach-tegra/suspend.c index c22d00044e40..982648e84128 100644 --- a/arch/arm/mach-tegra/suspend.c +++ b/arch/arm/mach-tegra/suspend.c @@ -80,19 +80,21 @@ static void __iomem *tmrus = IO_ADDRESS(TEGRA_TMRUS_BASE); #define FLOW_CTRL_CPU_CSR 0x8 #define FLOW_CTRL_CPU1_CSR 0x18 +static struct clk *tegra_pclk = NULL; + +void __init tegra_init_suspend(void) +{ + tegra_pclk = clk_get_sys(NULL, "pclk"); + BUG_ON(!tegra_pclk); +} + static void set_powergood_time(unsigned int us) { static int last_pclk = 0; - static struct clk *clk = NULL; unsigned long long ticks; unsigned long long pclk; - if (!clk) { - clk = clk_get_sys(NULL, "pclk"); - BUG_ON(!clk); - } - - pclk = clk_get_rate(clk); + pclk = clk_get_rate(tegra_pclk); if (pclk != last_pclk) { ticks = (us * pclk) + 999999ull; do_div(ticks, 1000000); |