aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2013-03-20 19:21:21 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-03-25 16:22:32 -0400
commit54f69b92f037f4ff5779e5645ab714dee5b59095 (patch)
treecd935d3d36afbe0627a64c0774b662696c9c06d7 /drivers/misc
parent4c6e22b8a93ef038b70661e590de250a09417af7 (diff)
dummy-irq: introduce a dummy IRQ handler driver
This module accepts a single 'irq' parameter, which it should register for. Its sole purpose is to help with debugging of IRQ sharing problems, by force-enabling IRQ that would otherwise be disabled. Suggested-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Jiri Kosina <jkosina@suse.cz> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc')
-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");