Devicetree updates for 3.6

A small set of changes for devicetree:
 - Couple of Documentation fixes
 - Addition of new helper function of_node_full_name
 - Improve of_parse_phandle_with_args return values
 - Some NULL related sparse fixes
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQEcBAABAgAGBQJQDwsgAAoJEMhvYp4jgsXiuwUH/Ri6ZSnqHcz4Wa/X4FxvNc3I
 3Xelo/Vt3WLYue3s/+OYiM5FK9+KH8T6x+U79Q4p7vePcfUh6GJII0AUbMeRghkS
 m3FjNd5syzYNJlnDnqdngQYRDpaz8U/SyftjXyMPjJ1VWiyLx/EJQUkj1EEwDLe/
 ZVabppnco3Y6OJpFuETONNvXx5mE7xq86isW5+aYmviMkWSMMwJPf8qofLJ78Dh5
 OAhWuCPRDooz548+Wkabt90qHjF6FU43w5fU7zZW26NT39ptppcbZ2bAXcTYqIIq
 sATp5YSitvwFqO2c1mA/drZ9nrgxDPCaw3qCDyiMdcbWgXqDirz2x7q1iauVHF4=
 =5TZ/
 -----END PGP SIGNATURE-----

Merge tag 'dt-for-3.6' of git://sources.calxeda.com/kernel/linux

Pull devicetree updates from Rob Herring:
 "A small set of changes for devicetree:
   - Couple of Documentation fixes
   - Addition of new helper function of_node_full_name
   - Improve of_parse_phandle_with_args return values
   - Some NULL related sparse fixes"

Grant's busy packing.

* tag 'dt-for-3.6' of git://sources.calxeda.com/kernel/linux:
  of: mtd: nuke useless const qualifier
  devicetree: add helper inline for retrieving a node's full name
  of: return -ENOENT when no property
  usage-model.txt: fix typo machine_init->init_machine
  of: Fix null pointer related warnings in base.c file
  LED: Fix missing semicolon in OF documentation
  of: fix a few typos in the binding documentation
This commit is contained in:
Linus Torvalds 2012-07-24 14:07:22 -07:00
commit f14121ab35
15 changed files with 34 additions and 30 deletions

View File

@ -55,4 +55,4 @@ run-control {
gpios = <&mpc8572 7 0>; gpios = <&mpc8572 7 0>;
default-state = "on"; default-state = "on";
}; };
} };

View File

@ -35,4 +35,4 @@ flash@0 {
uimage@100000 { uimage@100000 {
reg = <0x0100000 0x200000>; reg = <0x0100000 0x200000>;
}; };
]; };

View File

@ -312,7 +312,7 @@ device tree for the NVIDIA Tegra board.
}; };
}; };
At .machine_init() time, Tegra board support code will need to look at At .init_machine() time, Tegra board support code will need to look at
this DT and decide which nodes to create platform_devices for. this DT and decide which nodes to create platform_devices for.
However, looking at the tree, it is not immediately obvious what kind However, looking at the tree, it is not immediately obvious what kind
of device each node represents, or even if a node represents a device of device each node represents, or even if a node represents a device

View File

@ -249,8 +249,7 @@ int pci_read_irq_line(struct pci_dev *pci_dev)
} else { } else {
pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n", pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n",
oirq.size, oirq.specifier[0], oirq.specifier[1], oirq.size, oirq.specifier[0], oirq.specifier[1],
oirq.controller ? oirq.controller->full_name : of_node_full_name(oirq.controller));
"<default>");
virq = irq_create_of_mapping(oirq.controller, oirq.specifier, virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
oirq.size); oirq.size);
@ -1493,8 +1492,7 @@ static void __devinit pcibios_scan_phb(struct pci_controller *hose)
struct pci_bus *bus; struct pci_bus *bus;
struct device_node *node = hose->dn; struct device_node *node = hose->dn;
pr_debug("PCI: Scanning PHB %s\n", pr_debug("PCI: Scanning PHB %s\n", of_node_full_name(node));
node ? node->full_name : "<NO NAME>");
pcibios_setup_phb_resources(hose, &resources); pcibios_setup_phb_resources(hose, &resources);

View File

@ -248,8 +248,7 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)
} else { } else {
pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n", pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n",
oirq.size, oirq.specifier[0], oirq.specifier[1], oirq.size, oirq.specifier[0], oirq.specifier[1],
oirq.controller ? oirq.controller->full_name : of_node_full_name(oirq.controller));
"<default>");
virq = irq_create_of_mapping(oirq.controller, oirq.specifier, virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
oirq.size); oirq.size);
@ -1628,8 +1627,7 @@ void __devinit pcibios_scan_phb(struct pci_controller *hose)
struct device_node *node = hose->dn; struct device_node *node = hose->dn;
int mode; int mode;
pr_debug("PCI: Scanning PHB %s\n", pr_debug("PCI: Scanning PHB %s\n", of_node_full_name(node));
node ? node->full_name : "<NO NAME>");
/* Get some IO space for the new PHB */ /* Get some IO space for the new PHB */
pcibios_setup_phb_io_space(hose); pcibios_setup_phb_io_space(hose);

View File

@ -1294,8 +1294,7 @@ static void __devinit vio_dev_release(struct device *dev)
struct iommu_table *tbl = get_iommu_table_base(dev); struct iommu_table *tbl = get_iommu_table_base(dev);
if (tbl) if (tbl)
iommu_free_table(tbl, dev->of_node ? iommu_free_table(tbl, of_node_full_name(dev->of_node));
dev->of_node->full_name : dev_name(dev));
of_node_put(dev->of_node); of_node_put(dev->of_node);
kfree(to_vio_dev(dev)); kfree(to_vio_dev(dev));
} }
@ -1519,7 +1518,7 @@ static ssize_t devspec_show(struct device *dev,
{ {
struct device_node *of_node = dev->of_node; struct device_node *of_node = dev->of_node;
return sprintf(buf, "%s\n", of_node ? of_node->full_name : "none"); return sprintf(buf, "%s\n", of_node_full_name(of_node));
} }
static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,

View File

@ -551,8 +551,7 @@ static struct iommu_table *cell_get_iommu_table(struct device *dev)
iommu = cell_iommu_for_node(dev_to_node(dev)); iommu = cell_iommu_for_node(dev_to_node(dev));
if (iommu == NULL || list_empty(&iommu->windows)) { if (iommu == NULL || list_empty(&iommu->windows)) {
printk(KERN_ERR "iommu: missing iommu for %s (node %d)\n", printk(KERN_ERR "iommu: missing iommu for %s (node %d)\n",
dev->of_node ? dev->of_node->full_name : "?", of_node_full_name(dev->of_node), dev_to_node(dev));
dev_to_node(dev));
return NULL; return NULL;
} }
window = list_entry(iommu->windows.next, struct iommu_window, list); window = list_entry(iommu->windows.next, struct iommu_window, list);

View File

@ -1134,7 +1134,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
if (!pdn || !PCI_DN(pdn)) { if (!pdn || !PCI_DN(pdn)) {
printk(KERN_WARNING "pci_dma_dev_setup_pSeriesLP: " printk(KERN_WARNING "pci_dma_dev_setup_pSeriesLP: "
"no DMA window found for pci dev=%s dn=%s\n", "no DMA window found for pci dev=%s dn=%s\n",
pci_name(dev), dn? dn->full_name : "<null>"); pci_name(dev), of_node_full_name(dn));
return; return;
} }
pr_debug(" parent is %s\n", pdn->full_name); pr_debug(" parent is %s\n", pdn->full_name);

View File

@ -580,7 +580,7 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
printk("%s: Apply [%s:%x] imap --> [%s:%x]\n", printk("%s: Apply [%s:%x] imap --> [%s:%x]\n",
op->dev.of_node->full_name, op->dev.of_node->full_name,
pp->full_name, this_orig_irq, pp->full_name, this_orig_irq,
(iret ? iret->full_name : "NULL"), irq); of_node_full_name(iret), irq);
if (!iret) if (!iret)
break; break;

View File

@ -173,9 +173,9 @@ struct property *of_find_property(const struct device_node *np,
return NULL; return NULL;
read_lock(&devtree_lock); read_lock(&devtree_lock);
for (pp = np->properties; pp != 0; pp = pp->next) { for (pp = np->properties; pp; pp = pp->next) {
if (of_prop_cmp(pp->name, name) == 0) { if (of_prop_cmp(pp->name, name) == 0) {
if (lenp != 0) if (lenp)
*lenp = pp->length; *lenp = pp->length;
break; break;
} }
@ -497,7 +497,7 @@ struct device_node *of_find_node_with_property(struct device_node *from,
read_lock(&devtree_lock); read_lock(&devtree_lock);
np = from ? from->allnext : allnodes; np = from ? from->allnext : allnodes;
for (; np; np = np->allnext) { for (; np; np = np->allnext) {
for (pp = np->properties; pp != 0; pp = pp->next) { for (pp = np->properties; pp; pp = pp->next) {
if (of_prop_cmp(pp->name, prop_name) == 0) { if (of_prop_cmp(pp->name, prop_name) == 0) {
of_node_get(np); of_node_get(np);
goto out; goto out;
@ -902,7 +902,7 @@ int of_parse_phandle_with_args(struct device_node *np, const char *list_name,
/* Retrieve the phandle list property */ /* Retrieve the phandle list property */
list = of_get_property(np, list_name, &size); list = of_get_property(np, list_name, &size);
if (!list) if (!list)
return -EINVAL; return -ENOENT;
list_end = list + size / sizeof(*list); list_end = list + size / sizeof(*list);
/* Loop over the phandles until all the requested entry is found */ /* Loop over the phandles until all the requested entry is found */
@ -1180,7 +1180,7 @@ static void of_alias_add(struct alias_prop *ap, struct device_node *np,
ap->stem[stem_len] = 0; ap->stem[stem_len] = 0;
list_add_tail(&ap->link, &aliases_lookup); list_add_tail(&ap->link, &aliases_lookup);
pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n", pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n",
ap->alias, ap->stem, ap->id, np ? np->full_name : NULL); ap->alias, ap->stem, ap->id, of_node_full_name(np));
} }
/** /**

View File

@ -255,7 +255,7 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec,
skiplevel: skiplevel:
/* Iterate again with new parent */ /* Iterate again with new parent */
pr_debug(" -> new parent: %s\n", newpar ? newpar->full_name : "<>"); pr_debug(" -> new parent: %s\n", of_node_full_name(newpar));
of_node_put(ipar); of_node_put(ipar);
ipar = newpar; ipar = newpar;
newpar = NULL; newpar = NULL;

View File

@ -32,7 +32,7 @@ static const char *nand_ecc_modes[] = {
* The function gets ecc mode string from property 'nand-ecc-mode', * The function gets ecc mode string from property 'nand-ecc-mode',
* and return its index in nand_ecc_modes table, or errno in error case. * and return its index in nand_ecc_modes table, or errno in error case.
*/ */
const int of_get_nand_ecc_mode(struct device_node *np) int of_get_nand_ecc_mode(struct device_node *np)
{ {
const char *pm; const char *pm;
int err, i; int err, i;

View File

@ -163,6 +163,11 @@ static inline int of_node_to_nid(struct device_node *np) { return -1; }
#define of_node_to_nid of_node_to_nid #define of_node_to_nid of_node_to_nid
#endif #endif
static inline const char* of_node_full_name(struct device_node *np)
{
return np ? np->full_name : "<no-node>";
}
extern struct device_node *of_find_node_by_name(struct device_node *from, extern struct device_node *of_find_node_by_name(struct device_node *from,
const char *name); const char *name);
#define for_each_node_by_name(dn, name) \ #define for_each_node_by_name(dn, name) \
@ -302,6 +307,11 @@ const char *of_prop_next_string(struct property *prop, const char *cur);
#else /* CONFIG_OF */ #else /* CONFIG_OF */
static inline const char* of_node_full_name(struct device_node *np)
{
return "<no-node>";
}
static inline bool of_have_populated_dt(void) static inline bool of_have_populated_dt(void)
{ {
return false; return false;

View File

@ -11,7 +11,7 @@
#ifdef CONFIG_OF_MTD #ifdef CONFIG_OF_MTD
#include <linux/of.h> #include <linux/of.h>
extern const int of_get_nand_ecc_mode(struct device_node *np); int of_get_nand_ecc_mode(struct device_node *np);
int of_get_nand_bus_width(struct device_node *np); int of_get_nand_bus_width(struct device_node *np);
bool of_get_nand_on_flash_bbt(struct device_node *np); bool of_get_nand_on_flash_bbt(struct device_node *np);
#endif #endif

View File

@ -448,7 +448,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain,
} }
pr_debug("irq %lu on domain %s mapped to virtual irq %u\n", pr_debug("irq %lu on domain %s mapped to virtual irq %u\n",
hwirq, domain->of_node ? domain->of_node->full_name : "null", virq); hwirq, of_node_full_name(domain->of_node), virq);
return virq; return virq;
} }
@ -477,7 +477,7 @@ unsigned int irq_create_of_mapping(struct device_node *controller,
return intspec[0]; return intspec[0];
#endif #endif
pr_warning("no irq domain found for %s !\n", pr_warning("no irq domain found for %s !\n",
controller->full_name); of_node_full_name(controller));
return 0; return 0;
} }
@ -725,8 +725,8 @@ static int virq_debug_show(struct seq_file *m, void *private)
data = irq_desc_get_chip_data(desc); data = irq_desc_get_chip_data(desc);
seq_printf(m, data ? "0x%p " : " %p ", data); seq_printf(m, data ? "0x%p " : " %p ", data);
if (desc->irq_data.domain && desc->irq_data.domain->of_node) if (desc->irq_data.domain)
p = desc->irq_data.domain->of_node->full_name; p = of_node_full_name(desc->irq_data.domain->of_node);
else else
p = none; p = none;
seq_printf(m, "%s\n", p); seq_printf(m, "%s\n", p);