diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-08-16 14:31:29 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-08-16 14:31:29 -0400 |
| commit | 15a063f78eba39e1b040b2c4cab422980b58219a (patch) | |
| tree | 1f1578dbc642ccf706ac5fb151fa66c07c546729 /drivers | |
| parent | 1dd8372d350583b0acc8d7cfd7a1dee05e1942dc (diff) | |
| parent | fa75ce649ee2600b117631f8794e0e7dbedb1d68 (diff) | |
Merge tag 'sh-for-linus' of git://github.com/pmundt/linux-sh
Pull SuperH fixes from Paul Mundt.
* tag 'sh-for-linus' of git://github.com/pmundt/linux-sh:
sh: intc: Handle domain association for sparseirq pre-allocated vectors.
sh: sh7269: Fix LCD pinmux
sh: dma: fix request_irq usage
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/sh/intc/core.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c index 2374468615ed..32c26d795ed0 100644 --- a/drivers/sh/intc/core.c +++ b/drivers/sh/intc/core.c | |||
| @@ -324,8 +324,16 @@ int __init register_intc_controller(struct intc_desc *desc) | |||
| 324 | 324 | ||
| 325 | res = irq_create_identity_mapping(d->domain, irq); | 325 | res = irq_create_identity_mapping(d->domain, irq); |
| 326 | if (unlikely(res)) { | 326 | if (unlikely(res)) { |
| 327 | pr_err("can't get irq_desc for %d\n", irq); | 327 | if (res == -EEXIST) { |
| 328 | continue; | 328 | res = irq_domain_associate(d->domain, irq, irq); |
| 329 | if (unlikely(res)) { | ||
| 330 | pr_err("domain association failure\n"); | ||
| 331 | continue; | ||
| 332 | } | ||
| 333 | } else { | ||
| 334 | pr_err("can't identity map IRQ %d\n", irq); | ||
| 335 | continue; | ||
| 336 | } | ||
| 329 | } | 337 | } |
| 330 | 338 | ||
| 331 | intc_irq_xlate_set(irq, vect->enum_id, d); | 339 | intc_irq_xlate_set(irq, vect->enum_id, d); |
| @@ -345,8 +353,19 @@ int __init register_intc_controller(struct intc_desc *desc) | |||
| 345 | */ | 353 | */ |
| 346 | res = irq_create_identity_mapping(d->domain, irq2); | 354 | res = irq_create_identity_mapping(d->domain, irq2); |
| 347 | if (unlikely(res)) { | 355 | if (unlikely(res)) { |
| 348 | pr_err("can't get irq_desc for %d\n", irq2); | 356 | if (res == -EEXIST) { |
| 349 | continue; | 357 | res = irq_domain_associate(d->domain, |
| 358 | irq, irq); | ||
| 359 | if (unlikely(res)) { | ||
| 360 | pr_err("domain association " | ||
| 361 | "failure\n"); | ||
| 362 | continue; | ||
| 363 | } | ||
| 364 | } else { | ||
| 365 | pr_err("can't identity map IRQ %d\n", | ||
| 366 | irq); | ||
| 367 | continue; | ||
| 368 | } | ||
| 350 | } | 369 | } |
| 351 | 370 | ||
| 352 | vect2->enum_id = 0; | 371 | vect2->enum_id = 0; |
