aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/misc/Kconfig8
-rw-r--r--drivers/misc/Makefile1
-rw-r--r--drivers/misc/dummy-irq.c59
3 files changed, 68 insertions, 0 deletions
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index e83fdfe0c8ca..69bb79d6dd54 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -93,6 +93,14 @@ config ATMEL_TCB_CLKSRC_BLOCK
93 TC can be used for other purposes, such as PWM generation and 93 TC can be used for other purposes, such as PWM generation and
94 interval timing. 94 interval timing.
95 95
96config DUMMY_IRQ
97 tristate "Dummy IRQ handler"
98 default n
99 ---help---
100 This module accepts a single 'irq' parameter, which it should register for.
101 The sole purpose of this module is to help with debugging of systems on
102 which spurious IRQs would happen on disabled IRQ vector.
103
96config IBM_ASM 104config IBM_ASM
97 tristate "Device driver for IBM RSA service processor" 105 tristate "Device driver for IBM RSA service processor"
98 depends on X86 && PCI && INPUT 106 depends on X86 && PCI && INPUT
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 3e2faa0939b2..865cbc6a7ae1 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_ATMEL_TCLIB) += atmel_tclib.o
13obj-$(CONFIG_BMP085) += bmp085.o 13obj-$(CONFIG_BMP085) += bmp085.o
14obj-$(CONFIG_BMP085_I2C) += bmp085-i2c.o 14obj-$(CONFIG_BMP085_I2C) += bmp085-i2c.o
15obj-$(CONFIG_BMP085_SPI) += bmp085-spi.o 15obj-$(CONFIG_BMP085_SPI) += bmp085-spi.o
16obj-$(CONFIG_DUMMY_IRQ) += dummy-irq.o
16obj-$(CONFIG_ICS932S401) += ics932s401.o 17obj-$(CONFIG_ICS932S401) += ics932s401.o
17obj-$(CONFIG_LKDTM) += lkdtm.o 18obj-$(CONFIG_LKDTM) += lkdtm.o
18obj-$(CONFIG_TIFM_CORE) += tifm_core.o 19obj-$(CONFIG_TIFM_CORE) += tifm_core.o
diff --git a/drivers/misc/dummy-irq.c b/drivers/misc/dummy-irq.c
new file mode 100644
index 000000000000..7014167e2c61
--- /dev/null
+++ b/drivers/misc/dummy-irq.c
@@ -0,0 +1,59 @@
1/*
2 * Dummy IRQ handler driver.
3 *
4 * This module only registers itself as a handler that is specified to it
5 * by the 'irq' parameter.
6 *
7 * The sole purpose of this module is to help with debugging of systems on
8 * which spurious IRQs would happen on disabled IRQ vector.
9 *
10 * Copyright (C) 2013 Jiri Kosina
11 */
12
13/*
14 * This program is free software; you can redistribute it and/or modify it
15 * under the terms of the GNU General Public License version 2 as published by
16 * the Free Software Foundation.
17 */
18#include <linux/module.h>
19#include <linux/irq.h>
20#include <linux/interrupt.h>
21
22static int irq;
23
24static irqreturn_t dummy_interrupt(int irq, void *dev_id)
25{
26 static int count = 0;
27
28 if (count == 0) {
29 printk(KERN_INFO "dummy-irq: interrupt occured on IRQ %d\n",
30 irq);
31 count++;
32 }
33
34 return IRQ_NONE;
35}
36
37static int __init dummy_irq_init(void)
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
47static void __exit dummy_irq_exit(void)
48{
49 printk(KERN_INFO "dummy-irq unloaded\n");
50 free_irq(irq, &irq);
51}
52
53module_init(dummy_irq_init);
54module_exit(dummy_irq_exit);
55
56MODULE_LICENSE("GPL");
57MODULE_AUTHOR("Jiri Kosina");
58module_param(irq, uint, 0444);
59MODULE_PARM_DESC(irq, "The IRQ to register for");