/*
 * Conditionally install/replace broadcast device
 */
void tick_install_broadcast_device(struct clock_event_device *dev)
{
	struct clock_event_device *cur = tick_broadcast_device.evtdev;

	if (!tick_check_broadcast_device(cur, dev))
		return;

	if (!try_module_get(dev->owner))
		return;

	clockevents_exchange_device(cur, dev);
	if (cur)
		cur->event_handler = clockevents_handle_noop;
	tick_broadcast_device.evtdev = dev;
	if (!cpumask_empty(tick_broadcast_mask))
		tick_broadcast_start_periodic(dev);
	/*
	 * Inform all cpus about this. We might be in a situation
	 * where we did not switch to oneshot mode because the per cpu
	 * devices are affected by CLOCK_EVT_FEAT_C3STOP and the lack
	 * of a oneshot capable broadcast device. Without that
	 * notification the systems stays stuck in periodic mode
	 * forever.
	 */
	if (dev->features & CLOCK_EVT_FEAT_ONESHOT)
		tick_clock_notify();
}
//when we change the cpu clock, we need to call this function to change timer1's parameter.
void cns3xxx_timer1_change_clock(void)
{
	u32 counter=*(volatile unsigned int *) (CNS3XXX_TIMER1_2_3_BASE_VIRT + TIMER1_COUNTER_OFFSET);

	/************ timer1 ************/
#ifdef CONFIG_SILICON
	timer1_reload = NR_CYCLES_PER_TICK;
#else
	timer1_reload = 0x25000;
#endif

	if (timer1_reload < counter) {
		*(volatile unsigned int *) (CNS3XXX_TIMER1_2_3_BASE_VIRT + TIMER1_COUNTER_OFFSET)
			= timer1_reload;
	}

	/* for timer, because CPU clock is changed */
	*(volatile unsigned int *) (CNS3XXX_TIMER1_2_3_BASE_VIRT + TIMER1_AUTO_RELOAD_OFFSET)
			= timer1_reload;

	timer1_cs.mult = clocksource_hz2mult((CNS3XXX_PCLK * MHZ), timer1_cs.shift);
// FIX ME!	
//	timer1_cs.mult_orig = timer1_cs.mult;

	timer1_ce.mult =
		div_sc( (CNS3XXX_PCLK * MHZ), NSEC_PER_SEC, timer1_ce.shift);
	timer1_ce.max_delta_ns = clockevent_delta2ns(0xffffffff, &timer1_ce);
	timer1_ce.min_delta_ns = clockevent_delta2ns(0xf       , &timer1_ce);

	timer1_cs.cycle_last = 0;
//	timer1_cs.cycle_last = clocksource_read(&timer1_cs);
//	timer1_cs.error = 0;
// timer1_cs.xtime_nsec = 0;
//	clocksource_calculate_interval(&timer1_cs, NTP_INTERVAL_LENGTH);

	tick_clock_notify();

	//printk("timer1_reload v22: %u", timer1_reload);
}