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 void setup_gpt_dev_locked(struct gpt_device *dev, unsigned int mode, unsigned int clksrc, unsigned int clkdiv, unsigned int cmp, void (*func)(unsigned long), unsigned int flags) { __gpt_set_flags(dev, flags | GPT_IN_USE); __gpt_set_mode(dev, mode & GPT_OPMODE_MASK); __gpt_set_clk(dev, clksrc & GPT_CLKSRC_MASK, clkdiv & GPT_CLKDIV_MASK); if (func) __gpt_set_handler(dev, func); if (dev->mode != GPT_FREE_RUN) { __gpt_set_cmp(dev, cmp, 0); if (!(dev->flags & GPT_NOIRQEN)) __gpt_enable_irq(dev); } if (!(dev->flags & GPT_NOAUTOEN)) __gpt_start(dev); }