예제 #1
0
static void s5p_tick_timer_setup(void)
{
	unsigned long rate;

	rate = clk_get_rate(clk_event);
	s5p_tick_timer_start((rate / HZ) - 1, 1);
}
static void  s5p_init_dynamic_tick_timer(unsigned long rate)
{
	tick_timer_mode = 1;

	s5p_tick_timer_stop();

	s5p_tick_timer_start((rate / HZ) - 1, 1);

	clockevent_tick_timer.mult = div_sc(rate, NSEC_PER_SEC,
					    clockevent_tick_timer.shift);
	clockevent_tick_timer.max_delta_ns =
		clockevent_delta2ns(-1, &clockevent_tick_timer);
	clockevent_tick_timer.min_delta_ns =
		clockevent_delta2ns(1, &clockevent_tick_timer);

	clockevent_tick_timer.cpumask = cpumask_of(0);
	clockevents_register_device(&clockevent_tick_timer);

	printk(KERN_INFO "mult[%lu]\n",
			(long unsigned int)clockevent_tick_timer.mult);
	printk(KERN_INFO "max_delta_ns[%lu]\n",
			(long unsigned int)clockevent_tick_timer.max_delta_ns);
	printk(KERN_INFO "min_delta_ns[%lu]\n",
			(long unsigned int)clockevent_tick_timer.min_delta_ns);
	printk(KERN_INFO "rate[%lu]\n",
			(long unsigned int)rate);
	printk(KERN_INFO "HZ[%d]\n", HZ);
}
예제 #3
0
/*
 * RTC tick : count down to zero, interrupt, reload
 */
static int s5p_tick_set_next_event(unsigned long cycles,
				   struct clock_event_device *evt)
{
	/* printk(KERN_INFO "%d\n", cycles); */
	if  (cycles == 0)	/* Should be larger than 0 */
		cycles = 1;
	s5p_tick_timer_start(cycles, 0);
	return 0;
}