Merge tags 'devicetree-for-linus' and 'spi-for-linus' of git://git.secretlab.ca/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 14 Jan 2012 21:25:55 +0000 (13:25 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 14 Jan 2012 21:25:55 +0000 (13:25 -0800)
2nd set of device tree changes and SPI bug fixes for v3.3

* tag 'devicetree-for-linus' of git://git.secretlab.ca/git/linux-2.6:
  of/irq: Add interrupts-names property to name an irq resource
  of/address: Add reg-names property to name an iomem resource

* tag 'spi-for-linus' of git://git.secretlab.ca/git/linux-2.6:
  spi/tegra: depend instead of select TEGRA_SYSTEM_DMA

Documentation/devicetree/bindings/resource-names.txt [new file with mode: 0644]
drivers/of/address.c
drivers/of/irq.c
drivers/spi/Kconfig

diff --git a/Documentation/devicetree/bindings/resource-names.txt b/Documentation/devicetree/bindings/resource-names.txt
new file mode 100644 (file)
index 0000000..e280fef
--- /dev/null
@@ -0,0 +1,54 @@
+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";
+               interrupts = <11>, <12>;
+               interrupt-names = "rx", "tx";
+       };
+
+       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";
+       interrupts = <14>, <15>;
+       interrupt-names = "ohci", "ehci";
+};
index 72c33fbe451d6c31f1b50d0f38ced362d5258210..66d96f14c274e890d26d9435643210f48f7bdd35 100644 (file)
@@ -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);
 
index 0f0cfa3bca301e2d824ad64ebdaba23d6c617825..9cf00602f5665b289d1279666504af0010a3fa0f 100644 (file)
@@ -341,9 +341,18 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
        /* Only dereference the resource if both the
         * resource and the irq are valid. */
        if (r && irq) {
+               const char *name = NULL;
+
+               /*
+                * Get optional "interrupts-names" property to add a name
+                * to the resource.
+                */
+               of_property_read_string_index(dev, "interrupt-names", index,
+                                             &name);
+
                r->start = r->end = irq;
                r->flags = IORESOURCE_IRQ;
-               r->name = dev->full_name;
+               r->name = name ? name : dev->full_name;
        }
 
        return irq;
index 561a832417b8968195638aba58edbfe3edd988e7..3f9a47ec67dc814764bbee0d22bdd03f7680400a 100644 (file)
@@ -332,8 +332,7 @@ config SPI_STMP3XXX
 
 config SPI_TEGRA
        tristate "Nvidia Tegra SPI controller"
-       depends on ARCH_TEGRA
-       select TEGRA_SYSTEM_DMA
+       depends on ARCH_TEGRA && TEGRA_SYSTEM_DMA
        help
          SPI driver for NVidia Tegra SoCs