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); }
/* * 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; }