提交 35f3da32 编写于 作者: B Benoit Cousson 提交者: Grant Likely

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: NBenoit 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: NGrant Likely <grant.likely@secretlab.ca>
上级 93797d87
Some properties contain an ordered list of 1 or more datum which are
normally accessed by index. However, some devices will have multiple
values which are more naturally accessed by name. Device nodes can
include a supplemental property for assigning names to each of the list
items. The names property consists of a list of strings in the same
order as the data in the resource property.
The following supplemental names properties are defined.
Resource Property Supplemental Names Property
----------------- ---------------------------
reg reg-names
clocks clock-names
interrupts interrupt-names
Usage:
The -names property must be used in conjunction with the normal resource
property. If not it will be ignored.
Examples:
l4-abe {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <1>;
ranges = <0 0 0x48000000 0x00001000>, /* MPU path */
<1 0 0x49000000 0x00001000>; /* L3 path */
mcasp {
compatible = "ti,mcasp";
reg = <0 0x10 0x10>, <0 0x20 0x10>,
<1 0x10 0x10>, <1 0x20 0x10>;
reg-names = "mpu", "dat",
"dma", "dma_dat";
};
timer {
compatible = "ti,timer";
reg = <0 0x40 0x10>, <1 0x40 0x10>;
reg-names = "mpu", "dma";
};
};
usb {
compatible = "ti,usb-host";
reg = <0x4a064000 0x800>, <0x4a064800 0x200>,
<0x4a064c00 0x200>;
reg-names = "config", "ohci", "ehci";
};
......@@ -14,7 +14,7 @@
static struct of_bus *of_match_bus(struct device_node *np);
static int __of_address_to_resource(struct device_node *dev,
const __be32 *addrp, u64 size, unsigned int flags,
struct resource *r);
const char *name, struct resource *r);
/* Debug utility */
#ifdef DEBUG
......@@ -215,7 +215,7 @@ int of_pci_address_to_resource(struct device_node *dev, int bar,
addrp = of_get_pci_address(dev, bar, &size, &flags);
if (addrp == NULL)
return -EINVAL;
return __of_address_to_resource(dev, addrp, size, flags, r);
return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
}
EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
#endif /* CONFIG_PCI */
......@@ -529,7 +529,7 @@ EXPORT_SYMBOL(of_get_address);
static int __of_address_to_resource(struct device_node *dev,
const __be32 *addrp, u64 size, unsigned int flags,
struct resource *r)
const char *name, struct resource *r)
{
u64 taddr;
......@@ -551,7 +551,8 @@ static int __of_address_to_resource(struct device_node *dev,
r->end = taddr + size - 1;
}
r->flags = flags;
r->name = dev->full_name;
r->name = name ? name : dev->full_name;
return 0;
}
......@@ -569,11 +570,16 @@ int of_address_to_resource(struct device_node *dev, int index,
const __be32 *addrp;
u64 size;
unsigned int flags;
const char *name = NULL;
addrp = of_get_address(dev, index, &size, &flags);
if (addrp == NULL)
return -EINVAL;
return __of_address_to_resource(dev, addrp, size, flags, r);
/* Get optional "reg-names" property to add a name to a resource */
of_property_read_string_index(dev, "reg-names", index, &name);
return __of_address_to_resource(dev, addrp, size, flags, name, r);
}
EXPORT_SYMBOL_GPL(of_address_to_resource);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册