root/drivers/misc/dummy-irq.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dummy_interrupt
  2. dummy_irq_init
  3. dummy_irq_exit

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Dummy IRQ handler driver.
   4  *
   5  * This module only registers itself as a handler that is specified to it
   6  * by the 'irq' parameter.
   7  *
   8  * The sole purpose of this module is to help with debugging of systems on
   9  * which spurious IRQs would happen on disabled IRQ vector.
  10  *
  11  * Copyright (C) 2013 Jiri Kosina
  12  */
  13 
  14 #include <linux/module.h>
  15 #include <linux/irq.h>
  16 #include <linux/interrupt.h>
  17 
  18 static int irq = -1;
  19 
  20 static irqreturn_t dummy_interrupt(int irq, void *dev_id)
  21 {
  22         static int count = 0;
  23 
  24         if (count == 0) {
  25                 printk(KERN_INFO "dummy-irq: interrupt occurred on IRQ %d\n",
  26                                 irq);
  27                 count++;
  28         }
  29 
  30         return IRQ_NONE;
  31 }
  32 
  33 static int __init dummy_irq_init(void)
  34 {
  35         if (irq < 0) {
  36                 printk(KERN_ERR "dummy-irq: no IRQ given.  Use irq=N\n");
  37                 return -EIO;
  38         }
  39         if (request_irq(irq, &dummy_interrupt, IRQF_SHARED, "dummy_irq", &irq)) {
  40                 printk(KERN_ERR "dummy-irq: cannot register IRQ %d\n", irq);
  41                 return -EIO;
  42         }
  43         printk(KERN_INFO "dummy-irq: registered for IRQ %d\n", irq);
  44         return 0;
  45 }
  46 
  47 static void __exit dummy_irq_exit(void)
  48 {
  49         printk(KERN_INFO "dummy-irq unloaded\n");
  50         free_irq(irq, &irq);
  51 }
  52 
  53 module_init(dummy_irq_init);
  54 module_exit(dummy_irq_exit);
  55 
  56 MODULE_LICENSE("GPL");
  57 MODULE_AUTHOR("Jiri Kosina");
  58 module_param_hw(irq, uint, irq, 0444);
  59 MODULE_PARM_DESC(irq, "The IRQ to register for");
  60 MODULE_DESCRIPTION("Dummy IRQ handler driver");

/* [<][>][^][v][top][bottom][index][help] */