diff options
| -rw-r--r-- | drivers/misc/Kconfig | 8 | ||||
| -rw-r--r-- | drivers/misc/Makefile | 1 | ||||
| -rw-r--r-- | drivers/misc/dummy-irq.c | 59 | 
3 files changed, 68 insertions, 0 deletions
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index e83fdfe0c8c..69bb79d6dd5 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -93,6 +93,14 @@ config ATMEL_TCB_CLKSRC_BLOCK  	  TC can be used for other purposes, such as PWM generation and  	  interval timing. +config DUMMY_IRQ +	tristate "Dummy IRQ handler" +	default n +	---help--- +	  This module accepts a single 'irq' parameter, which it should register for. +	  The sole purpose of this module is to help with debugging of systems on +	  which spurious IRQs would happen on disabled IRQ vector. +  config IBM_ASM  	tristate "Device driver for IBM RSA service processor"  	depends on X86 && PCI && INPUT diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index 3e2faa0939b..865cbc6a7ae 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_ATMEL_TCLIB)	+= atmel_tclib.o  obj-$(CONFIG_BMP085)		+= bmp085.o  obj-$(CONFIG_BMP085_I2C)	+= bmp085-i2c.o  obj-$(CONFIG_BMP085_SPI)	+= bmp085-spi.o +obj-$(CONFIG_DUMMY_IRQ)		+= dummy-irq.o  obj-$(CONFIG_ICS932S401)	+= ics932s401.o  obj-$(CONFIG_LKDTM)		+= lkdtm.o  obj-$(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 00000000000..7014167e2c6 --- /dev/null +++ b/drivers/misc/dummy-irq.c @@ -0,0 +1,59 @@ +/* + * Dummy IRQ handler driver. + * + * This module only registers itself as a handler that is specified to it + * by the 'irq' parameter. + * + * The sole purpose of this module is to help with debugging of systems on + * which spurious IRQs would happen on disabled IRQ vector. + * + * Copyright (C) 2013 Jiri Kosina + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ +#include <linux/module.h> +#include <linux/irq.h> +#include <linux/interrupt.h> + +static int irq; + +static irqreturn_t dummy_interrupt(int irq, void *dev_id) +{ +	static int count = 0; + +	if (count == 0) { +		printk(KERN_INFO "dummy-irq: interrupt occured on IRQ %d\n", +				irq); +		count++; +	} + +	return IRQ_NONE; +} + +static int __init dummy_irq_init(void) +{ +	if (request_irq(irq, &dummy_interrupt, IRQF_SHARED, "dummy_irq", &irq)) { +		printk(KERN_ERR "dummy-irq: cannot register IRQ %d\n", irq); +		return -EIO; +	} +	printk(KERN_INFO "dummy-irq: registered for IRQ %d\n", irq); +	return 0; +} + +static void __exit dummy_irq_exit(void) +{ +	printk(KERN_INFO "dummy-irq unloaded\n"); +	free_irq(irq, &irq); +} + +module_init(dummy_irq_init); +module_exit(dummy_irq_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Jiri Kosina"); +module_param(irq, uint, 0444); +MODULE_PARM_DESC(irq, "The IRQ to register for");  |