|
16 | 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17 | 17 | */
|
18 | 18 |
|
19 |
| -#include <asm/prom.h> |
| 19 | +#include <linux/interrupt.h> |
| 20 | +#include <linux/of_irq.h> |
20 | 21 |
|
21 | 22 | #include "pseries.h"
|
22 | 23 |
|
23 | 24 | void request_event_sources_irqs(struct device_node *np,
|
24 | 25 | irq_handler_t handler,
|
25 | 26 | const char *name)
|
26 | 27 | {
|
27 |
| - int i, index, count = 0; |
28 |
| - struct of_phandle_args oirq; |
29 |
| - unsigned int virqs[16]; |
| 28 | + int i, virq, rc; |
30 | 29 |
|
31 |
| - /* First try to do a proper OF tree parsing */ |
32 |
| - for (index = 0; of_irq_parse_one(np, index, &oirq) == 0; |
33 |
| - index++) { |
34 |
| - if (count > 15) |
35 |
| - break; |
36 |
| - virqs[count] = irq_create_of_mapping(&oirq); |
37 |
| - if (!virqs[count]) { |
38 |
| - pr_err("event-sources: Unable to allocate " |
39 |
| - "interrupt number for %pOF\n", |
40 |
| - np); |
41 |
| - WARN_ON(1); |
42 |
| - } else { |
43 |
| - count++; |
44 |
| - } |
45 |
| - } |
| 30 | + for (i = 0; i < 16; i++) { |
| 31 | + virq = of_irq_get(np, i); |
| 32 | + if (virq < 0) |
| 33 | + return; |
| 34 | + if (WARN(!virq, "event-sources: Unable to allocate " |
| 35 | + "interrupt number for %pOF\n", np)) |
| 36 | + continue; |
46 | 37 |
|
47 |
| - /* Now request them */ |
48 |
| - for (i = 0; i < count; i++) { |
49 |
| - if (request_irq(virqs[i], handler, 0, name, NULL)) { |
50 |
| - pr_err("event-sources: Unable to request interrupt " |
51 |
| - "%d for %pOF\n", virqs[i], np); |
52 |
| - WARN_ON(1); |
| 38 | + rc = request_irq(virq, handler, 0, name, NULL); |
| 39 | + if (WARN(rc, "event-sources: Unable to request interrupt %d for %pOF\n", |
| 40 | + virq, np)) |
53 | 41 | return;
|
54 |
| - } |
55 | 42 | }
|
56 | 43 | }
|
57 |
| - |
0 commit comments