コード例 #1
0
ファイル: rk28_timer.c プロジェクト: huanglin/hl_1_18
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;
}
コード例 #2
0
ファイル: rk28_timer.c プロジェクト: huanglin/hl_1_18
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;
}
コード例 #3
0
ファイル: rk28_timer.c プロジェクト: huanglin/hl_1_18
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;
}
コード例 #4
0
ファイル: timer_cpu.c プロジェクト: jwq2011/kernel_rk3066
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;
}
コード例 #5
0
ファイル: rk28_timer.c プロジェクト: huanglin/hl_1_18
/* 
 * 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; 
}
コード例 #6
0
ファイル: rk28_timer.c プロジェクト: huanglin/hl_1_18
irqreturn_t rockchip_timer3_interrupt(int irq, void *dev_id)
{
        debug_gpio_reverse();
        RK_TIMER_INT_CLEAR(TIMER_CLKUSB);
        return IRQ_HANDLED;
}