diff options
Diffstat (limited to 'arch/arm/kernel/time.c')
| -rw-r--r-- | arch/arm/kernel/time.c | 36 | 
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index fe31b22f18f..af2afb01967 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c @@ -110,6 +110,42 @@ void timer_tick(void)  }  #endif +static void dummy_clock_access(struct timespec *ts) +{ +	ts->tv_sec = 0; +	ts->tv_nsec = 0; +} + +static clock_access_fn __read_persistent_clock = dummy_clock_access; +static clock_access_fn __read_boot_clock = dummy_clock_access;; + +void read_persistent_clock(struct timespec *ts) +{ +	__read_persistent_clock(ts); +} + +void read_boot_clock(struct timespec *ts) +{ +	__read_boot_clock(ts); +} + +int __init register_persistent_clock(clock_access_fn read_boot, +				     clock_access_fn read_persistent) +{ +	/* Only allow the clockaccess functions to be registered once */ +	if (__read_persistent_clock == dummy_clock_access && +	    __read_boot_clock == dummy_clock_access) { +		if (read_boot) +			__read_boot_clock = read_boot; +		if (read_persistent) +			__read_persistent_clock = read_persistent; + +		return 0; +	} + +	return -EINVAL; +} +  #if defined(CONFIG_PM) && !defined(CONFIG_GENERIC_CLOCKEVENTS)  static int timer_suspend(void)  {  |