title: detecting interrupt on GPIO in kernel module
body: <p>I am toggling the input into a GPIO line on my BeagleBone from high to low every 500 ms using an Atmel uC. I have registered a handler for this in my Linux Kernel Module, but the handler is not being called for some reason. </p>
  
  <p>My module code is -</p>
  
  <pre><code>#define GPIO 54
  #define GPIO_INT_NAME  "gpio_int"
  
  #define GPIO_HIGH gpio_get_value(GPIO)
  #define GPIO_LOW (gpio_get_value(GPIO) == 0)
  short int irq_any_gpio    = 0;
  int count =0;
  
  enum { falling, rising } type; 
  static irqreturn_t r_irq_handler(int irq, void *dev_id)
   {
        count++;
      printk(KERN_DEBUG "interrupt received (irq: %d)\n", irq);
          if (irq == gpio_to_irq(GPIO)) 
      {
  
          type = GPIO_LOW ? falling : rising;
  
          if(type == falling)
          {
              printk("gpio pin is low\n");    
          }
          else
              printk("gpio pin is high\n");
  
      }
  
      return IRQ_HANDLED;
  }
  
  
  void r_int_config(void) {
  
     if (gpio_request(GPIO, GPIO_INT_NAME )) 
     {
        printk("GPIO request failure: %s\n", GPIO_INT_NAME );
        return;
     }
  
     if ( (irq_any_gpio = gpio_to_irq(GPIO)) &lt; 0 ) {
        printk("GPIO to IRQ mapping failure %s\n",GPIO_INT_NAME );
        return;
     }
  
     printk(KERN_NOTICE "Mapped int %d\n", irq_any_gpio);
  
     if (request_irq(irq_any_gpio,(irq_handler_t ) r_irq_handler, IRQF_TRIGGER_HIGH, GPIO_INT_NAME, NULL)) 
     {
        printk("Irq Request failure\n");
        return;
     }
  
     return;
  }
  
  void r_int_release(void) {
  
     free_irq(gpio_to_irq(GPIO), NULL);
      gpio_free(GPIO);;
     return;
  }
  
  int init_module(void)
  {
          printk("&lt;1&gt;Hello World\n"); 
      r_int_config();
          return 0;
  }
  </code></pre>
  
  <p>On calling insmod interrupt_test.ko, i get the following message</p>
  
  <pre><code>[   76.594543] Hello World                                                      
  [   76.597137] Mapped int 214  
  </code></pre>
  
  <p>But now when I start toggling the input into this gpio pin, the interrupt handler doesn't get called and the message (interrupt received is not being displayed).</p>
  
  <p>How do I solve this ? What's causing the problem?</p>