diff options
-rw-r--r-- | Documentation/devicetree/bindings/resource-names.txt | 54 | ||||
-rw-r--r-- | drivers/of/address.c | 16 | ||||
-rw-r--r-- | drivers/of/irq.c | 11 | ||||
-rw-r--r-- | drivers/spi/Kconfig | 3 |
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 @@ | |||
1 | Some properties contain an ordered list of 1 or more datum which are | ||
2 | normally accessed by index. However, some devices will have multiple | ||
3 | values which are more naturally accessed by name. Device nodes can | ||
4 | include a supplemental property for assigning names to each of the list | ||
5 | items. The names property consists of a list of strings in the same | ||
6 | order as the data in the resource property. | ||
7 | |||
8 | The following supplemental names properties are defined. | ||
9 | |||
10 | Resource Property Supplemental Names Property | ||
11 | ----------------- --------------------------- | ||
12 | reg reg-names | ||
13 | clocks clock-names | ||
14 | interrupts interrupt-names | ||
15 | |||
16 | Usage: | ||
17 | |||
18 | The -names property must be used in conjunction with the normal resource | ||
19 | property. If not it will be ignored. | ||
20 | |||
21 | Examples: | ||
22 | |||
23 | l4-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 | |||
47 | usb { | ||
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 @@ | |||
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; |
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 | ||
333 | config SPI_TEGRA | 333 | config 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 | ||