static void mt_gpt_set_mode(enum clock_event_mode mode, struct clock_event_device *evt) { struct gpt_device *dev = id_to_dev(GPT_CLKEVT_ID); //printk("[%s]entry, mode=%d\n", __func__, mode); switch (mode) { case CLOCK_EVT_MODE_PERIODIC: __gpt_stop(dev); __gpt_set_mode(dev, GPT_REPEAT); __gpt_enable_irq(dev); __gpt_start_from_zero(dev); break; case CLOCK_EVT_MODE_ONESHOT: __gpt_stop(dev); __gpt_set_mode(dev, GPT_ONE_SHOT); __gpt_enable_irq(dev); __gpt_start_from_zero(dev); break; case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: __gpt_stop(dev); __gpt_disable_irq(dev); __gpt_ack_irq(dev); case CLOCK_EVT_MODE_RESUME: break; } }
static int mt_gpt_set_next_event(unsigned long cycles, struct clock_event_device *evt) { struct gpt_device *dev = id_to_dev(GPT_CLKEVT_ID); /* printk("[%s]entry, evt=%lu\n", __func__, cycles); */ __gpt_stop(dev); __gpt_set_cmp(dev, cycles, 0); __gpt_start_from_zero(dev); return 0; }