diff options
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r-- | kernel/irq/manage.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index cae900a849c4..9ea18879fb62 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -216,13 +216,17 @@ int setup_irq(unsigned int irq, struct irqaction *new) | |||
216 | desc->status |= IRQ_PER_CPU; | 216 | desc->status |= IRQ_PER_CPU; |
217 | #endif | 217 | #endif |
218 | if (!shared) { | 218 | if (!shared) { |
219 | desc->depth = 0; | 219 | desc->status &= ~(IRQ_AUTODETECT | IRQ_WAITING | |
220 | desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | | 220 | IRQ_INPROGRESS); |
221 | IRQ_WAITING | IRQ_INPROGRESS); | 221 | |
222 | if (desc->chip->startup) | 222 | if (!(desc->status & IRQ_NOAUTOEN)) { |
223 | desc->chip->startup(irq); | 223 | desc->depth = 0; |
224 | else | 224 | desc->status &= ~IRQ_DISABLED; |
225 | desc->chip->enable(irq); | 225 | if (desc->chip->startup) |
226 | desc->chip->startup(irq); | ||
227 | else | ||
228 | desc->chip->enable(irq); | ||
229 | } | ||
226 | } | 230 | } |
227 | spin_unlock_irqrestore(&desc->lock, flags); | 231 | spin_unlock_irqrestore(&desc->lock, flags); |
228 | 232 | ||