aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/address.c16
-rw-r--r--drivers/of/irq.c11
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 @@
14static struct of_bus *of_match_bus(struct device_node *np); 14static struct of_bus *of_match_bus(struct device_node *np);
15static int __of_address_to_resource(struct device_node *dev, 15static 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}
220EXPORT_SYMBOL_GPL(of_pci_address_to_resource); 220EXPORT_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
530static int __of_address_to_resource(struct device_node *dev, 530static 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}
578EXPORT_SYMBOL_GPL(of_address_to_resource); 584EXPORT_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;