aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of/address.c
diff options
context:
space:
mode:
authorBenoit Cousson <b-cousson@ti.com>2011-12-05 09:23:55 -0500
committerGrant Likely <grant.likely@secretlab.ca>2012-01-04 02:27:22 -0500
commit35f3da32af0e8970cc41288d4a7e3bd32399900e (patch)
tree67390af46cf0fff8f65e31ac3b07e553cfc2fa16 /drivers/of/address.c
parent93797d87d63d36404907640e4e20bb976bff4744 (diff)
of/address: Add reg-names property to name an iomem resource
Add a reg-names property to allow for reg regions to be reference by name instead of by index. Some devices have multiple register regions which are more naturally referenced by name. If the name is available, use it to name the resource when creating a devices. Otherwise keep the device name. Signed-off-by: Benoit Cousson <b-cousson@ti.com> Cc: Grant Likely <grant.likely@secretlab.ca> Cc: Rob Herring <rob.herring@calxeda.com> [Generalized documentation to be for any -names property] Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'drivers/of/address.c')
-rw-r--r--drivers/of/address.c16
1 files changed, 11 insertions, 5 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