[lkml]   [2010]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectThreaded irq handler question
    Hi all,

    I have a threaded irq handler attached to a level-triggered gpio
    interrupt line. The check handler checks the status of the gpio line
    and disables the irq line amd returns WAKE_THREAD in that case:

    static irqreturn_t isr_check(int irq, void *p)
    if (gpio_status()) {
    return IRQ_WAKE_THREAD;

    return IRQ_NONE;

    The thread then does some i2c transactions that will eventually
    deassert the gpio line:

    static irqreturn_t isr(int irq, void *p)
    /* do some i2c transfers */
    return IRQ_HANDLED;

    My problem is that this structure does not work, because once I call
    disable_irq_nosync() on the irq in the check handler the thread will
    no longer run because the irq is disabled. However if I don't call
    disable_irq_nosync() I will get endless irqs because the line is
    level-triggered and will not be deasserted until the thread has run.

    Could someone tell me what I'm doing wrong here?


     \ /
      Last update: 2010-04-21 18:37    [W:0.025 / U:3.768 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site