aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/resource-names.txt54
-rw-r--r--drivers/of/address.c16
-rw-r--r--drivers/of/irq.c11
-rw-r--r--drivers/spi/Kconfig3
4 files changed, 76 insertions, 8 deletions
diff --git a/Documentation/devicetree/bindings/resource-names.txt b/Documentation/devicetree/bindings/resource-names.txt
new file mode 100644
index 000000000000..e280fef6f265
--- /dev/null
+++ b/Documentation/devicetree/bindings/resource-names.txt
@@ -0,0 +1,54 @@
1Some properties contain an ordered list of 1 or more datum which are
2normally accessed by index. However, some devices will have multiple
3values which are more naturally accessed by name. Device nodes can
4include a supplemental property for assigning names to each of the list
5items. The names property consists of a list of strings in the same
6order as the data in the resource property.
7
8The following supplemental names properties are defined.
9
10Resource Property Supplemental Names Property
11----------------- ---------------------------
12reg reg-names
13clocks clock-names
14interrupts interrupt-names
15
16Usage:
17
18The -names property must be used in conjunction with the normal resource
19property. If not it will be ignored.
20
21Examples:
22
23l4-abe {
24 compatible = "simple-bus";
25 #address-cells = <2>;
26 #size-cells = <1>;
27 ranges = <0 0 0x48000000 0x00001000>, /* MPU path */
28 <1 0 0x49000000 0x00001000>; /* L3 path */
29 mcasp {
30 compatible = "ti,mcasp";
31 reg = <0 0x10 0x10>, <0 0x20 0x10>,
32 <1 0x10 0x10>, <1 0x20 0x10>;
33 reg-names = "mpu", "dat",
34 "dma", "dma_dat";
35 interrupts = <11>, <12>;
36 interrupt-names = "rx", "tx";
37 };
38
39 timer {
40 compatible = "ti,timer";
41 reg = <0 0x40 0x10>, <1 0x40 0x10>;
42 reg-names = "mpu", "dma";
43 };
44};
45
46
47usb {
48 compatible = "ti,usb-host";
49 reg = <0x4a064000 0x800>, <0x4a064800 0x200>,
50 <0x4a064c00 0x200>;
51 reg-names = "config", "ohci", "ehci";
52 interrupts = <14>, <15>;
53 interrupt-names = "ohci", "ehci";
54};
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;
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index 561a832417b8..3f9a47ec67dc 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -332,8 +332,7 @@ config SPI_STMP3XXX
332 332
333config SPI_TEGRA 333config SPI_TEGRA
334 tristate "Nvidia Tegra SPI controller" 334 tristate "Nvidia Tegra SPI controller"
335 depends on ARCH_TEGRA 335 depends on ARCH_TEGRA && TEGRA_SYSTEM_DMA
336 select TEGRA_SYSTEM_DMA
337 help 336 help
338 SPI driver for NVidia Tegra SoCs 337 SPI driver for NVidia Tegra SoCs
339 338