irqreturn_t rockchip_timer_clockuser_interrupt(int irq, void *dev_id) { RK_TIMER_INT_CLEAR(TIMER_CLKUSB); RK_TIMER_DISABLE(TIMER_CLKUSB); if(g_user_callback) g_user_callback(); return IRQ_HANDLED; }
irqreturn_t clock_source_interrupt(int irq, void *dev_id) { //int int_pending ; //rockchip_timer_read(); //int_pending = RK_TIMER_INTS_READ(TIMER_CLKSRC); RK_TIMER_INT_CLEAR(TIMER_CLKSRC); //S_INFO("%s::count=0x%x,int=%d\n" , __func__ , RK_TIMER_GETCOUNT(TIMER_CLKSRC),int_pending ); return IRQ_HANDLED; }
irqreturn_t rockchip_timer_clockevent_interrupt(int irq, void *dev_id) { struct clock_event_device *evt = dev_id; //debug_gpio_reverse(); RK_TIMER_INT_CLEAR(TIMER_CLKEVT); if( evt->mode != CLOCK_EVT_MODE_PERIODIC ) RK_TIMER_DISABLE(TIMER_CLKEVT); evt->event_handler(evt); return IRQ_HANDLED; }
static irqreturn_t rk29_timer_clockevent_interrupt(int irq, void *dev_id) { struct clock_event_device *evt = dev_id; RK_TIMER_INT_CLEAR(TIMER_CLKEVT); if (evt->mode == CLOCK_EVT_MODE_ONESHOT) RK_TIMER_DISABLE(TIMER_CLKEVT); evt->event_handler(evt); return IRQ_HANDLED; }
/* * return 1:need to quit suspend , 0 :reenter suspend * 20091010,由于拔掉USB会产生我们不希望的中断,因此USB只能通过 * VBUS的变化来判断,不能通过中断判断. * 关于VBUS的判断,统一放到 dwc_otg_pcd.c 文件里面. */ int rockchip_timer_clocksource_irq_checkandclear( void ) { unsigned int t0,t; volatile unsigned int *intc_reg = (volatile unsigned int *)(INTC_BASE_ADDR_VA); // +0x28 #if 0 printk("intc regs0:\n0x%08x 0x%08x 0x%08x 0x%08x\n" "0x%08x 0x%08x 0x%08x 0x%08x\n" "0x%08x 0x%08x 0x%08x 0x%08x\n" "0x%08x 0x%08x\n" , intc_reg[0],intc_reg[1],intc_reg[2],intc_reg[3], intc_reg[4],intc_reg[5],intc_reg[6],intc_reg[7], intc_reg[8],intc_reg[9],intc_reg[10],intc_reg[11], intc_reg[12],intc_reg[13] ); t0 = intc_reg[IRQ_REG_MASKSTATUS_L/4]; t = intc_reg[IRQ_REG_MASKSTATUS_H/4]; //debug_gpio_reverse(); printk("irq0=0x%x!,irq1=0x%x(%d)!\n" , t0 , t , (t>>IRQ_NR_TIMER2)&1 ); if( t0 == 0 && t == 0 ) { intc_reg[IRQ_REG_INTEN_L/4] = (1<<IRQ_NR_GPIO1); intc_reg[IRQ_REG_INTEN_H/4] = 0; } printk("intc regs1:\n0x%08x 0x%08x 0x%08x 0x%08x\n" "0x%08x 0x%08x 0x%08x 0x%08x\n" "0x%08x 0x%08x 0x%08x 0x%08x\n" "0x%08x 0x%08x\n" , intc_reg[0],intc_reg[1],intc_reg[2],intc_reg[3], intc_reg[4],intc_reg[5],intc_reg[6],intc_reg[7], intc_reg[8],intc_reg[9],intc_reg[10],intc_reg[11], intc_reg[12],intc_reg[13] ); #else t0 = intc_reg[IRQ_REG_MASKSTATUS_L/4]; t = intc_reg[IRQ_REG_MASKSTATUS_H/4]; #endif S_INFO("wake up,t0=0x%x,t1=0x%x\n" , t0,t); /* clock source irq */ if( t0&(1<<(IRQ_NR_TIMER1+TIMER_CLKEVT)) ) { RK_TIMER_INT_CLEAR(TIMER_CLKEVT); rktimer_update_suspend_ms(CHECK_VBUS_MS); t0 &= ~(1<<(IRQ_NR_TIMER1+TIMER_CLKEVT)); // remove for test deep sleep and wakeup. } /* 20091103,HSL@RK,all irq must be handle !*/ t0 |= (t&0xffff); return t0; }
irqreturn_t rockchip_timer3_interrupt(int irq, void *dev_id) { debug_gpio_reverse(); RK_TIMER_INT_CLEAR(TIMER_CLKUSB); return IRQ_HANDLED; }