Loading arch/arm/mach-at91rm9200/time.c +30 −14 Original line number Diff line number Diff line Loading @@ -90,6 +90,20 @@ static struct irqaction at91rm9200_timer_irq = { .handler = at91rm9200_timer_interrupt }; void at91rm9200_timer_reset(void) { last_crtr = 0; /* Real time counter incremented every 30.51758 microseconds */ at91_sys_write(AT91_ST_RTMR, 1); /* Set Period Interval timer */ at91_sys_write(AT91_ST_PIMR, LATCH); /* Enable Period Interval Timer interrupt */ at91_sys_write(AT91_ST_IER, AT91_ST_PITS); } /* * Set up timer interrupt. */ Loading @@ -99,28 +113,30 @@ void __init at91rm9200_timer_init(void) at91_sys_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); (void) at91_sys_read(AT91_ST_SR); /* Clear any pending interrupts */ /* * Make IRQs happen for the system timer. */ /* Make IRQs happen for the system timer */ setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq); /* Set initial alarm to 0 */ at91_sys_write(AT91_ST_RTAR, 0); /* Real time counter incremented every 30.51758 microseconds */ at91_sys_write(AT91_ST_RTMR, 1); /* Set Period Interval timer */ at91_sys_write(AT91_ST_PIMR, LATCH); /* Change the kernel's 'tick' value to 10009 usec. (the default is 10000) */ tick_usec = (LATCH * 1000000) / CLOCK_TICK_RATE; /* Enable Period Interval Timer interrupt */ at91_sys_write(AT91_ST_IER, AT91_ST_PITS); /* Initialize and enable the timer interrupt */ at91rm9200_timer_reset(); } #ifdef CONFIG_PM static void at91rm9200_timer_suspend(void) { /* disable Period Interval Timer interrupt */ at91_sys_write(AT91_ST_IDR, AT91_ST_PITS); } #else #define at91rm9200_timer_suspend NULL #endif struct sys_timer at91rm9200_timer = { .init = at91rm9200_timer_init, .offset = at91rm9200_gettimeoffset, .suspend = at91rm9200_timer_suspend, .resume = at91rm9200_timer_reset, }; Loading
arch/arm/mach-at91rm9200/time.c +30 −14 Original line number Diff line number Diff line Loading @@ -90,6 +90,20 @@ static struct irqaction at91rm9200_timer_irq = { .handler = at91rm9200_timer_interrupt }; void at91rm9200_timer_reset(void) { last_crtr = 0; /* Real time counter incremented every 30.51758 microseconds */ at91_sys_write(AT91_ST_RTMR, 1); /* Set Period Interval timer */ at91_sys_write(AT91_ST_PIMR, LATCH); /* Enable Period Interval Timer interrupt */ at91_sys_write(AT91_ST_IER, AT91_ST_PITS); } /* * Set up timer interrupt. */ Loading @@ -99,28 +113,30 @@ void __init at91rm9200_timer_init(void) at91_sys_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); (void) at91_sys_read(AT91_ST_SR); /* Clear any pending interrupts */ /* * Make IRQs happen for the system timer. */ /* Make IRQs happen for the system timer */ setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq); /* Set initial alarm to 0 */ at91_sys_write(AT91_ST_RTAR, 0); /* Real time counter incremented every 30.51758 microseconds */ at91_sys_write(AT91_ST_RTMR, 1); /* Set Period Interval timer */ at91_sys_write(AT91_ST_PIMR, LATCH); /* Change the kernel's 'tick' value to 10009 usec. (the default is 10000) */ tick_usec = (LATCH * 1000000) / CLOCK_TICK_RATE; /* Enable Period Interval Timer interrupt */ at91_sys_write(AT91_ST_IER, AT91_ST_PITS); /* Initialize and enable the timer interrupt */ at91rm9200_timer_reset(); } #ifdef CONFIG_PM static void at91rm9200_timer_suspend(void) { /* disable Period Interval Timer interrupt */ at91_sys_write(AT91_ST_IDR, AT91_ST_PITS); } #else #define at91rm9200_timer_suspend NULL #endif struct sys_timer at91rm9200_timer = { .init = at91rm9200_timer_init, .offset = at91rm9200_gettimeoffset, .suspend = at91rm9200_timer_suspend, .resume = at91rm9200_timer_reset, };