|
@@ -462,9 +462,18 @@ __set_irq_handler(unsigned int irq,
|
|
|
if (!handle)
|
|
|
handle = handle_bad_irq;
|
|
|
|
|
|
- if (is_chained && desc->chip == &no_irq_chip)
|
|
|
- printk(KERN_WARNING "Trying to install "
|
|
|
- "chained interrupt type for IRQ%d\n", irq);
|
|
|
+ if (desc->chip == &no_irq_chip) {
|
|
|
+ printk(KERN_WARNING "Trying to install %sinterrupt handler "
|
|
|
+ "for IRQ%d\n", is_chained ? "chained " : " ", irq);
|
|
|
+ /*
|
|
|
+ * Some ARM implementations install a handler for really dumb
|
|
|
+ * interrupt hardware without setting an irq_chip. This worked
|
|
|
+ * with the ARM no_irq_chip but the check in setup_irq would
|
|
|
+ * prevent us to setup the interrupt at all. Switch it to
|
|
|
+ * dummy_irq_chip for easy transition.
|
|
|
+ */
|
|
|
+ desc->chip = &dummy_irq_chip;
|
|
|
+ }
|
|
|
|
|
|
spin_lock_irqsave(&desc->lock, flags);
|
|
|
|