void imx233_timrot_setup(unsigned timer_nr, bool reload, unsigned count, unsigned src, unsigned prescale, bool polarity, imx233_timer_fn_t fn) { int oldstatus = disable_interrupt_save(IRQ_FIQ_STATUS); /* only enable interrupt if function is set */ bool irq = fn != NULL; timer_fns[timer_nr] = fn; /* make sure we start from stop state */ HW_TIMROT_TIMCTRLn(timer_nr) = BF_OR2(TIMROT_TIMCTRLn, SELECT(BV_TIMROT_TIMCTRLn_SELECT__NEVER_TICK), UPDATE(1)); /* write count and take effect immediately with UPDATE * manual says count-1 for reload timers */ HW_TIMROT_TIMCOUNTn(timer_nr) = reload ? count - 1 : count; /* start timer */ HW_TIMROT_TIMCTRLn(timer_nr) = BF_OR6(TIMROT_TIMCTRLn, SELECT(src), PRESCALE(prescale), POLARITY(polarity), RELOAD(reload), IRQ(irq), IRQ_EN(irq)); imx233_icoll_enable_interrupt(INT_SRC_TIMER(timer_nr), irq); restore_interrupt(oldstatus); }
{ "ssp2_err", INT_SRC_SSP2_ERROR }, { "vdd5v", INT_SRC_VDD5V }, { "dac_dma", INT_SRC_DAC_DMA }, { "dac_err", INT_SRC_DAC_ERROR }, { "adc_dma", INT_SRC_ADC_DMA }, { "adc_err", INT_SRC_ADC_ERROR }, { "usbctrl", INT_SRC_USB_CTRL }, { "ssp1_dma", INT_SRC_SSP1_DMA }, { "ssp1_err", INT_SRC_SSP1_ERROR }, { "gpio0", INT_SRC_GPIO0 }, { "gpio1", INT_SRC_GPIO1 }, { "gpio2", INT_SRC_GPIO2 }, { "ssp2_dma", INT_SRC_SSP2_DMA }, { "i2c_dma", INT_SRC_I2C_DMA }, { "i2c_err", INT_SRC_I2C_ERROR }, { "timer0", INT_SRC_TIMER(0) }, { "timer1", INT_SRC_TIMER(1) }, { "timer2", INT_SRC_TIMER(2) }, { "timer3", INT_SRC_TIMER(3) }, { "touch_det", INT_SRC_TOUCH_DETECT }, { "lradc_ch0", INT_SRC_LRADC_CHx(0) }, { "lradc_ch1", INT_SRC_LRADC_CHx(1) }, { "lradc_ch2", INT_SRC_LRADC_CHx(2) }, { "lradc_ch3", INT_SRC_LRADC_CHx(3) }, { "lradc_ch4", INT_SRC_LRADC_CHx(4) }, { "lradc_ch5", INT_SRC_LRADC_CHx(5) }, { "lradc_ch6", INT_SRC_LRADC_CHx(6) }, { "lradc_ch7", INT_SRC_LRADC_CHx(7) }, { "lcdif_dma", INT_SRC_LCDIF_DMA }, { "lcdif_err", INT_SRC_LCDIF_ERROR }, { "rtc_1msec", INT_SRC_RTC_1MSEC },
void imx233_timrot_set_priority(unsigned timer_nr, unsigned prio) { imx233_icoll_set_priority(INT_SRC_TIMER(timer_nr), prio); }