diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-25 13:46:56 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-25 13:46:56 -0700 | 
| commit | 7b6181e06841f5ad15c4ff708b967b4db65a64de (patch) | |
| tree | bdfcf5b74b692f76581156e452d268b64c795200 /arch/arm/mach-omap2/pm-debug.c | |
| parent | 72e58063d63c5f0a7bf65312f1e3a5ed9bb5c2ff (diff) | |
| parent | bc487fb341af05120bccb9f59ce76302391dcc77 (diff) | |
| download | olio-linux-3.10-7b6181e06841f5ad15c4ff708b967b4db65a64de.tar.xz olio-linux-3.10-7b6181e06841f5ad15c4ff708b967b4db65a64de.zip  | |
Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
* 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6: (163 commits)
  omap: complete removal of machine_desc.io_pg_offst and .phys_io
  omap: UART: fix wakeup registers for OMAP24xx UART2
  omap: Fix spotty MMC voltages
  ASoC: OMAP4: MCPDM: Remove unnecessary include of plat/control.h
  serial: omap-serial: fix signess error
  OMAP3: DMA: Errata i541: sDMA FIFO draining does not finish
  omap: dma: Fix buffering disable bit setting for omap24xx
  omap: serial: Fix the boot-up crash/reboot without CONFIG_PM
  OMAP3: PM: fix scratchpad memory accesses for off-mode
  omap4: pandaboard: enable the ehci port on pandaboard
  omap4: pandaboard: Fix the init if CONFIG_MMC_OMAP_HS is not set
  omap4: pandaboard: remove unused hsmmc definition
  OMAP: McBSP: Remove null omap44xx ops comment
  OMAP: McBSP: Swap CLKS source definition
  OMAP: McBSP: Fix CLKR and FSR signal muxing
  OMAP2+: clock: reduce the amount of standard debugging while disabling unused clocks
  OMAP: control: move plat-omap/control.h to mach-omap2/control.h
  OMAP: split plat-omap/common.c
  OMAP: McBSP: implement functional clock switching via clock framework
  OMAP: McBSP: implement McBSP CLKR and FSR signal muxing via mach-omap2/mcbsp.c
  ...
Fixed up trivial conflicts in arch/arm/mach-omap2/
{board-zoom-peripherals.c,devices.c} as per Tony
Diffstat (limited to 'arch/arm/mach-omap2/pm-debug.c')
| -rw-r--r-- | arch/arm/mach-omap2/pm-debug.c | 44 | 
1 files changed, 38 insertions, 6 deletions
diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 723b44e252f..5e81517a7af 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -31,12 +31,17 @@  #include <plat/board.h>  #include <plat/powerdomain.h>  #include <plat/clockdomain.h> +#include <plat/dmtimer.h>  #include "prm.h"  #include "cm.h"  #include "pm.h"  int omap2_pm_debug; +u32 enable_off_mode; +u32 sleep_while_idle; +u32 wakeup_timer_seconds; +u32 wakeup_timer_milliseconds;  #define DUMP_PRM_MOD_REG(mod, reg)    \  	regs[reg_count].name = #mod "." #reg; \ @@ -162,7 +167,7 @@ void omap2_pm_dump(int mode, int resume, unsigned int us)  static void pm_dbg_regset_store(u32 *ptr); -struct dentry *pm_dbg_dir; +static struct dentry *pm_dbg_dir;  static int pm_dbg_init_done; @@ -349,6 +354,23 @@ void pm_dbg_update_time(struct powerdomain *pwrdm, int prev)  	pwrdm->timer = t;  } +void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds) +{ +	u32 tick_rate, cycles; + +	if (!seconds && !milliseconds) +		return; + +	tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup)); +	cycles = tick_rate * seconds + tick_rate * milliseconds / 1000; +	omap_dm_timer_stop(gptimer_wakeup); +	omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles); + +	pr_info("PM: Resume timer in %u.%03u secs" +		" (%d ticks at %d ticks/sec.)\n", +		seconds, milliseconds, cycles, tick_rate); +} +  static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user)  {  	struct seq_file *s = (struct seq_file *)user; @@ -494,8 +516,10 @@ int pm_dbg_regset_init(int reg_set)  static int pwrdm_suspend_get(void *data, u64 *val)  { -	int ret; -	ret = omap3_pm_get_suspend_state((struct powerdomain *)data); +	int ret = -EINVAL; + +	if (cpu_is_omap34xx()) +		ret = omap3_pm_get_suspend_state((struct powerdomain *)data);  	*val = ret;  	if (ret >= 0) @@ -505,7 +529,10 @@ static int pwrdm_suspend_get(void *data, u64 *val)  static int pwrdm_suspend_set(void *data, u64 val)  { -	return omap3_pm_set_suspend_state((struct powerdomain *)data, (int)val); +	if (cpu_is_omap34xx()) +		return omap3_pm_set_suspend_state( +			(struct powerdomain *)data, (int)val); +	return -EINVAL;  }  DEFINE_SIMPLE_ATTRIBUTE(pwrdm_suspend_fops, pwrdm_suspend_get, @@ -553,8 +580,10 @@ static int option_set(void *data, u64 val)  	*option = val; -	if (option == &enable_off_mode) -		omap3_pm_off_mode_enable(val); +	if (option == &enable_off_mode) { +		if (cpu_is_omap34xx()) +			omap3_pm_off_mode_enable(val); +	}  	return 0;  } @@ -609,6 +638,9 @@ static int __init pm_dbg_init(void)  				   &sleep_while_idle, &pm_dbg_option_fops);  	(void) debugfs_create_file("wakeup_timer_seconds", S_IRUGO | S_IWUGO, d,  				   &wakeup_timer_seconds, &pm_dbg_option_fops); +	(void) debugfs_create_file("wakeup_timer_milliseconds", +			S_IRUGO | S_IWUGO, d, &wakeup_timer_milliseconds, +			&pm_dbg_option_fops);  	pm_dbg_init_done = 1;  	return 0;  |