diff options
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/address.c | 16 | ||||
-rw-r--r-- | drivers/of/irq.c | 11 |
2 files changed, 21 insertions, 6 deletions
diff --git a/drivers/of/address.c b/drivers/of/address.c index 72c33fbe451d..66d96f14c274 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c | |||
@@ -14,7 +14,7 @@ | |||
14 | static struct of_bus *of_match_bus(struct device_node *np); | 14 | static struct of_bus *of_match_bus(struct device_node *np); |
15 | static int __of_address_to_resource(struct device_node *dev, | 15 | static int __of_address_to_resource(struct device_node *dev, |
16 | const __be32 *addrp, u64 size, unsigned int flags, | 16 | const __be32 *addrp, u64 size, unsigned int flags, |
17 | struct resource *r); | 17 | const char *name, struct resource *r); |
18 | 18 | ||
19 | /* Debug utility */ | 19 | /* Debug utility */ |
20 | #ifdef DEBUG | 20 | #ifdef DEBUG |
@@ -215,7 +215,7 @@ int of_pci_address_to_resource(struct device_node *dev, int bar, | |||
215 | addrp = of_get_pci_address(dev, bar, &size, &flags); | 215 | addrp = of_get_pci_address(dev, bar, &size, &flags); |
216 | if (addrp == NULL) | 216 | if (addrp == NULL) |
217 | return -EINVAL; | 217 | return -EINVAL; |
218 | return __of_address_to_resource(dev, addrp, size, flags, r); | 218 | return __of_address_to_resource(dev, addrp, size, flags, NULL, r); |
219 | } | 219 | } |
220 | EXPORT_SYMBOL_GPL(of_pci_address_to_resource); | 220 | EXPORT_SYMBOL_GPL(of_pci_address_to_resource); |
221 | #endif /* CONFIG_PCI */ | 221 | #endif /* CONFIG_PCI */ |
@@ -529,7 +529,7 @@ EXPORT_SYMBOL(of_get_address); | |||
529 | 529 | ||
530 | static int __of_address_to_resource(struct device_node *dev, | 530 | static int __of_address_to_resource(struct device_node *dev, |
531 | const __be32 *addrp, u64 size, unsigned int flags, | 531 | const __be32 *addrp, u64 size, unsigned int flags, |
532 | struct resource *r) | 532 | const char *name, struct resource *r) |
533 | { | 533 | { |
534 | u64 taddr; | 534 | u64 taddr; |
535 | 535 | ||
@@ -551,7 +551,8 @@ static int __of_address_to_resource(struct device_node *dev, | |||
551 | r->end = taddr + size - 1; | 551 | r->end = taddr + size - 1; |
552 | } | 552 | } |
553 | r->flags = flags; | 553 | r->flags = flags; |
554 | r->name = dev->full_name; | 554 | r->name = name ? name : dev->full_name; |
555 | |||
555 | return 0; | 556 | return 0; |
556 | } | 557 | } |
557 | 558 | ||
@@ -569,11 +570,16 @@ int of_address_to_resource(struct device_node *dev, int index, | |||
569 | const __be32 *addrp; | 570 | const __be32 *addrp; |
570 | u64 size; | 571 | u64 size; |
571 | unsigned int flags; | 572 | unsigned int flags; |
573 | const char *name = NULL; | ||
572 | 574 | ||
573 | addrp = of_get_address(dev, index, &size, &flags); | 575 | addrp = of_get_address(dev, index, &size, &flags); |
574 | if (addrp == NULL) | 576 | if (addrp == NULL) |
575 | return -EINVAL; | 577 | return -EINVAL; |
576 | return __of_address_to_resource(dev, addrp, size, flags, r); | 578 | |
579 | /* Get optional "reg-names" property to add a name to a resource */ | ||
580 | of_property_read_string_index(dev, "reg-names", index, &name); | ||
581 | |||
582 | return __of_address_to_resource(dev, addrp, size, flags, name, r); | ||
577 | } | 583 | } |
578 | EXPORT_SYMBOL_GPL(of_address_to_resource); | 584 | EXPORT_SYMBOL_GPL(of_address_to_resource); |
579 | 585 | ||
diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 0f0cfa3bca30..9cf00602f566 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c | |||
@@ -341,9 +341,18 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r) | |||
341 | /* Only dereference the resource if both the | 341 | /* Only dereference the resource if both the |
342 | * resource and the irq are valid. */ | 342 | * resource and the irq are valid. */ |
343 | if (r && irq) { | 343 | if (r && irq) { |
344 | const char *name = NULL; | ||
345 | |||
346 | /* | ||
347 | * Get optional "interrupts-names" property to add a name | ||
348 | * to the resource. | ||
349 | */ | ||
350 | of_property_read_string_index(dev, "interrupt-names", index, | ||
351 | &name); | ||
352 | |||
344 | r->start = r->end = irq; | 353 | r->start = r->end = irq; |
345 | r->flags = IORESOURCE_IRQ; | 354 | r->flags = IORESOURCE_IRQ; |
346 | r->name = dev->full_name; | 355 | r->name = name ? name : dev->full_name; |
347 | } | 356 | } |
348 | 357 | ||
349 | return irq; | 358 | return irq; |