lkml.org 
[lkml]   [2010]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectThreaded irq handler question
    From
    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()) {
    disable_irq_nosync(irq);
    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 */
    enable_irq(irq);
    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?

    Thanks,


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