提交 81d48f0a 编写于 作者: L Linus Torvalds

Merge tags 'devicetree-for-linus' and 'spi-for-linus' of git://git.secretlab.ca/git/linux-2.6

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
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";
};
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
static struct of_bus *of_match_bus(struct device_node *np); static struct of_bus *of_match_bus(struct device_node *np);
static int __of_address_to_resource(struct device_node *dev, static int __of_address_to_resource(struct device_node *dev,
const __be32 *addrp, u64 size, unsigned int flags, const __be32 *addrp, u64 size, unsigned int flags,
struct resource *r); const char *name, struct resource *r);
/* Debug utility */ /* Debug utility */
#ifdef DEBUG #ifdef DEBUG
...@@ -215,7 +215,7 @@ int of_pci_address_to_resource(struct device_node *dev, int bar, ...@@ -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); addrp = of_get_pci_address(dev, bar, &size, &flags);
if (addrp == NULL) if (addrp == NULL)
return -EINVAL; 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); EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI */
...@@ -529,7 +529,7 @@ EXPORT_SYMBOL(of_get_address); ...@@ -529,7 +529,7 @@ EXPORT_SYMBOL(of_get_address);
static int __of_address_to_resource(struct device_node *dev, static int __of_address_to_resource(struct device_node *dev,
const __be32 *addrp, u64 size, unsigned int flags, const __be32 *addrp, u64 size, unsigned int flags,
struct resource *r) const char *name, struct resource *r)
{ {
u64 taddr; u64 taddr;
...@@ -551,7 +551,8 @@ static int __of_address_to_resource(struct device_node *dev, ...@@ -551,7 +551,8 @@ static int __of_address_to_resource(struct device_node *dev,
r->end = taddr + size - 1; r->end = taddr + size - 1;
} }
r->flags = flags; r->flags = flags;
r->name = dev->full_name; r->name = name ? name : dev->full_name;
return 0; return 0;
} }
...@@ -569,11 +570,16 @@ int of_address_to_resource(struct device_node *dev, int index, ...@@ -569,11 +570,16 @@ int of_address_to_resource(struct device_node *dev, int index,
const __be32 *addrp; const __be32 *addrp;
u64 size; u64 size;
unsigned int flags; unsigned int flags;
const char *name = NULL;
addrp = of_get_address(dev, index, &size, &flags); addrp = of_get_address(dev, index, &size, &flags);
if (addrp == NULL) if (addrp == NULL)
return -EINVAL; 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); EXPORT_SYMBOL_GPL(of_address_to_resource);
......
...@@ -341,9 +341,18 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r) ...@@ -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 /* Only dereference the resource if both the
* resource and the irq are valid. */ * resource and the irq are valid. */
if (r && irq) { 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->start = r->end = irq;
r->flags = IORESOURCE_IRQ; r->flags = IORESOURCE_IRQ;
r->name = dev->full_name; r->name = name ? name : dev->full_name;
} }
return irq; return irq;
......
...@@ -332,8 +332,7 @@ config SPI_STMP3XXX ...@@ -332,8 +332,7 @@ config SPI_STMP3XXX
config SPI_TEGRA config SPI_TEGRA
tristate "Nvidia Tegra SPI controller" tristate "Nvidia Tegra SPI controller"
depends on ARCH_TEGRA depends on ARCH_TEGRA && TEGRA_SYSTEM_DMA
select TEGRA_SYSTEM_DMA
help help
SPI driver for NVidia Tegra SoCs SPI driver for NVidia Tegra SoCs
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册