Lines Matching full:timer
2 * Samsung exynos4210 Pulse Width Modulation Timer
27 #include "qemu/timer.h"
88 /* timer struct */
90 uint32_t id; /* timer id */
91 qemu_irq irq; /* local timer irq */
92 uint32_t freq; /* timer frequency */
94 /* use ptimer.c to represent count down timer */
95 ptimer_state *ptimer; /* timer */
117 Exynos4210PWM timer[EXYNOS4210_PWM_TIMERS_NUM]; member
144 VMSTATE_STRUCT_ARRAY(timer, Exynos4210PWMState,
154 * for s->timer[id].ptimer.
159 freq = s->timer[id].freq; in exynos4210_pwm_update_freq()
161 s->timer[id].freq = 24000000 / in exynos4210_pwm_update_freq()
165 s->timer[id].freq = 24000000 / in exynos4210_pwm_update_freq()
170 if (freq != s->timer[id].freq) { in exynos4210_pwm_update_freq()
171 ptimer_set_freq(s->timer[id].ptimer, s->timer[id].freq); in exynos4210_pwm_update_freq()
172 DPRINTF("freq=%uHz\n", s->timer[id].freq); in exynos4210_pwm_update_freq()
186 DPRINTF("timer %u tick\n", id); in exynos4210_pwm_tick()
193 DPRINTF("timer %u IRQ\n", id); in exynos4210_pwm_tick()
194 qemu_irq_raise(p->timer[id].irq); in exynos4210_pwm_tick()
197 /* reload timer */ in exynos4210_pwm_tick()
205 DPRINTF("auto reload timer %u count to %x\n", id, in exynos4210_pwm_tick()
206 p->timer[id].reg_tcntb); in exynos4210_pwm_tick()
207 ptimer_set_count(p->timer[id].ptimer, p->timer[id].reg_tcntb); in exynos4210_pwm_tick()
208 ptimer_run(p->timer[id].ptimer, 1); in exynos4210_pwm_tick()
210 /* stop timer, set status to STOP, see Basic Timer Operation */ in exynos4210_pwm_tick()
212 ptimer_stop(p->timer[id].ptimer); in exynos4210_pwm_tick()
239 value = s->timer[index].reg_tcntb; in exynos4210_pwm_read()
245 value = s->timer[index].reg_tcmpb; in exynos4210_pwm_read()
251 value = ptimer_get_count(s->timer[index].ptimer); in exynos4210_pwm_read()
285 ptimer_transaction_begin(s->timer[i].ptimer); in exynos4210_pwm_write()
286 exynos4210_pwm_update_freq(s, s->timer[i].id); in exynos4210_pwm_write()
287 ptimer_transaction_commit(s->timer[i].ptimer); in exynos4210_pwm_write()
293 ptimer_transaction_begin(s->timer[i].ptimer); in exynos4210_pwm_write()
301 /* this will start timer to run, this ok, because in exynos4210_pwm_write()
302 * during processing start bit timer will be stopped in exynos4210_pwm_write()
304 ptimer_set_count(s->timer[i].ptimer, s->timer[i].reg_tcntb); in exynos4210_pwm_write()
305 DPRINTF("set timer %d count to %x\n", i, in exynos4210_pwm_write()
306 s->timer[i].reg_tcntb); in exynos4210_pwm_write()
312 ptimer_run(s->timer[i].ptimer, 1); in exynos4210_pwm_write()
313 DPRINTF("run timer %d\n", i); in exynos4210_pwm_write()
319 ptimer_stop(s->timer[i].ptimer); in exynos4210_pwm_write()
320 DPRINTF("stop timer %d\n", i); in exynos4210_pwm_write()
322 ptimer_transaction_commit(s->timer[i].ptimer); in exynos4210_pwm_write()
330 s->timer[index].reg_tcntb = value; in exynos4210_pwm_write()
336 s->timer[index].reg_tcmpb = value; in exynos4210_pwm_write()
346 qemu_irq_lower(s->timer[i].irq); in exynos4210_pwm_write()
363 * Set default values to timer fields and registers
374 s->timer[i].reg_tcmpb = 0; in exynos4210_pwm_reset()
375 s->timer[i].reg_tcntb = 0; in exynos4210_pwm_reset()
377 ptimer_transaction_begin(s->timer[i].ptimer); in exynos4210_pwm_reset()
378 exynos4210_pwm_update_freq(s, s->timer[i].id); in exynos4210_pwm_reset()
379 ptimer_stop(s->timer[i].ptimer); in exynos4210_pwm_reset()
380 ptimer_transaction_commit(s->timer[i].ptimer); in exynos4210_pwm_reset()
391 * PWM timer initialization
400 sysbus_init_irq(dev, &s->timer[i].irq); in exynos4210_pwm_init()
401 s->timer[i].ptimer = ptimer_init(exynos4210_pwm_tick, in exynos4210_pwm_init()
402 &s->timer[i], in exynos4210_pwm_init()
404 s->timer[i].id = i; in exynos4210_pwm_init()
405 s->timer[i].parent = s; in exynos4210_pwm_init()
419 ptimer_free(s->timer[i].ptimer); in exynos4210_pwm_finalize()