aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Likely <grant.likely@secretlab.ca>2010-04-13 19:12:28 -0400
committerGrant Likely <grant.likely@secretlab.ca>2010-04-28 20:20:57 -0400
commitd706c1b050274b3bf97d7cb0542c0d070c9ccb8b (patch)
tree9104c28f9028589cc4b95d8846dfc3288dcbf289
parentefb2e014fc4f2675011b802e1a84bf9a58756004 (diff)
driver-core: Add device node pointer to struct device
Currently, platforms using CONFIG_OF add a 'struct device_node *of_node' to dev->archdata. However, with CONFIG_OF becoming generic for all architectures, it makes sense for commonality to move it out of archdata and into struct device proper. This patch adds a struct device_node *of_node member to struct device and updates all locations which currently write the device_node pointer into archdata to also update dev->of_node. Subsequent patches will modify callers to use the archdata location and ultimately remove the archdata member entirely. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Greg Kroah-Hartman <gregkh@suse.de> CC: Michal Simek <monstr@monstr.eu> CC: Greg Kroah-Hartman <gregkh@suse.de> CC: Benjamin Herrenschmidt <benh@kernel.crashing.org> CC: "David S. Miller" <davem@davemloft.net> CC: Stephen Rothwell <sfr@canb.auug.org.au> CC: Jeremy Kerr <jeremy.kerr@canonical.com> CC: microblaze-uclinux@itee.uq.edu.au CC: linux-kernel@vger.kernel.org CC: linuxppc-dev@ozlabs.org CC: sparclinux@vger.kernel.org
-rw-r--r--arch/microblaze/kernel/of_device.c1
-rw-r--r--arch/powerpc/kernel/of_device.c1
-rw-r--r--arch/powerpc/kernel/pci-common.c3
-rw-r--r--arch/powerpc/kernel/vio.c3
-rw-r--r--arch/powerpc/platforms/ps3/system-bus.c1
-rw-r--r--arch/sparc/kernel/of_device_32.c1
-rw-r--r--arch/sparc/kernel/of_device_64.c1
-rw-r--r--arch/sparc/kernel/pci.c1
-rw-r--r--drivers/of/of_mdio.c1
-rw-r--r--drivers/of/of_spi.c1
-rw-r--r--include/linux/device.h4
11 files changed, 16 insertions, 2 deletions
diff --git a/arch/microblaze/kernel/of_device.c b/arch/microblaze/kernel/of_device.c
index 9a0f7632c47c..f6c521898ebf 100644
--- a/arch/microblaze/kernel/of_device.c
+++ b/arch/microblaze/kernel/of_device.c
@@ -54,6 +54,7 @@ struct of_device *of_device_alloc(struct device_node *np,
54 dev->dev.parent = parent; 54 dev->dev.parent = parent;
55 dev->dev.release = of_release_dev; 55 dev->dev.release = of_release_dev;
56 dev->dev.archdata.of_node = np; 56 dev->dev.archdata.of_node = np;
57 dev->dev.of_node = np;
57 58
58 if (bus_id) 59 if (bus_id)
59 dev_set_name(&dev->dev, bus_id); 60 dev_set_name(&dev->dev, bus_id);
diff --git a/arch/powerpc/kernel/of_device.c b/arch/powerpc/kernel/of_device.c
index a359cb08e900..9577e6f4e3bf 100644
--- a/arch/powerpc/kernel/of_device.c
+++ b/arch/powerpc/kernel/of_device.c
@@ -74,6 +74,7 @@ struct of_device *of_device_alloc(struct device_node *np,
74 dev->dev.parent = parent; 74 dev->dev.parent = parent;
75 dev->dev.release = of_release_dev; 75 dev->dev.release = of_release_dev;
76 dev->dev.archdata.of_node = np; 76 dev->dev.archdata.of_node = np;
77 dev->dev.of_node = np;
77 78
78 if (bus_id) 79 if (bus_id)
79 dev_set_name(&dev->dev, "%s", bus_id); 80 dev_set_name(&dev->dev, "%s", bus_id);
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index 0c0567e58409..88da282047c3 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -1097,8 +1097,9 @@ void __devinit pcibios_setup_bus_devices(struct pci_bus *bus)
1097 if (dev->is_added) 1097 if (dev->is_added)
1098 continue; 1098 continue;
1099 1099
1100 /* Setup OF node pointer in archdata */ 1100 /* Setup OF node pointer in the device */
1101 sd->of_node = pci_device_to_OF_node(dev); 1101 sd->of_node = pci_device_to_OF_node(dev);
1102 dev->dev.of_node = pci_device_to_OF_node(dev);
1102 1103
1103 /* Fixup NUMA node as it may not be setup yet by the generic 1104 /* Fixup NUMA node as it may not be setup yet by the generic
1104 * code and is needed by the DMA init 1105 * code and is needed by the DMA init
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index 82237176a2a3..d6708da114ee 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -1230,7 +1230,8 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
1230 if (unit_address != NULL) 1230 if (unit_address != NULL)
1231 viodev->unit_address = *unit_address; 1231 viodev->unit_address = *unit_address;
1232 } 1232 }
1233 viodev->dev.archdata.of_node = of_node_get(of_node); 1233 viodev->dev.of_node = of_node_get(of_node);
1234 viodev->dev.archdata.of_node = viodev->dev.of_node;
1234 1235
1235 if (firmware_has_feature(FW_FEATURE_CMO)) 1236 if (firmware_has_feature(FW_FEATURE_CMO))
1236 vio_cmo_set_dma_ops(viodev); 1237 vio_cmo_set_dma_ops(viodev);
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c
index 6d09f5e3e7e4..e546c86a539b 100644
--- a/arch/powerpc/platforms/ps3/system-bus.c
+++ b/arch/powerpc/platforms/ps3/system-bus.c
@@ -766,6 +766,7 @@ int ps3_system_bus_device_register(struct ps3_system_bus_device *dev)
766 BUG(); 766 BUG();
767 }; 767 };
768 768
769 dev->core.of_node = NULL;
769 dev->core.archdata.of_node = NULL; 770 dev->core.archdata.of_node = NULL;
770 set_dev_node(&dev->core, 0); 771 set_dev_node(&dev->core, 0);
771 772
diff --git a/arch/sparc/kernel/of_device_32.c b/arch/sparc/kernel/of_device_32.c
index da527b33ebc7..4926c1babd84 100644
--- a/arch/sparc/kernel/of_device_32.c
+++ b/arch/sparc/kernel/of_device_32.c
@@ -348,6 +348,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
348 sd->prom_node = dp; 348 sd->prom_node = dp;
349 sd->op = op; 349 sd->op = op;
350 350
351 op->dev.of_node = dp;
351 op->node = dp; 352 op->node = dp;
352 353
353 op->clock_freq = of_getintprop_default(dp, "clock-frequency", 354 op->clock_freq = of_getintprop_default(dp, "clock-frequency",
diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c
index b3d4cb5d21b3..5bc74161667c 100644
--- a/arch/sparc/kernel/of_device_64.c
+++ b/arch/sparc/kernel/of_device_64.c
@@ -643,6 +643,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
643 sd->prom_node = dp; 643 sd->prom_node = dp;
644 sd->op = op; 644 sd->op = op;
645 645
646 op->dev.of_node = dp;
646 op->node = dp; 647 op->node = dp;
647 648
648 op->clock_freq = of_getintprop_default(dp, "clock-frequency", 649 op->clock_freq = of_getintprop_default(dp, "clock-frequency",
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index 5ac539a5930f..0c920147b4ef 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -262,6 +262,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
262 sd->stc = &pbm->stc; 262 sd->stc = &pbm->stc;
263 sd->host_controller = pbm; 263 sd->host_controller = pbm;
264 sd->prom_node = node; 264 sd->prom_node = node;
265 dev->dev.of_node = node;
265 sd->op = op = of_find_device_by_node(node); 266 sd->op = op = of_find_device_by_node(node);
266 sd->numa_node = pbm->numa_node; 267 sd->numa_node = pbm->numa_node;
267 268
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 18ecae4a4375..12090f57dc87 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -80,6 +80,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
80 * can be looked up later */ 80 * can be looked up later */
81 of_node_get(child); 81 of_node_get(child);
82 dev_archdata_set_node(&phy->dev.archdata, child); 82 dev_archdata_set_node(&phy->dev.archdata, child);
83 phy->dev.of_node = child;
83 84
84 /* All data is now stored in the phy struct; register it */ 85 /* All data is now stored in the phy struct; register it */
85 rc = phy_device_register(phy); 86 rc = phy_device_register(phy);
diff --git a/drivers/of/of_spi.c b/drivers/of/of_spi.c
index f65f48b98448..f3119a0836af 100644
--- a/drivers/of/of_spi.c
+++ b/drivers/of/of_spi.c
@@ -79,6 +79,7 @@ void of_register_spi_devices(struct spi_master *master, struct device_node *np)
79 79
80 /* Store a pointer to the node in the device structure */ 80 /* Store a pointer to the node in the device structure */
81 of_node_get(nc); 81 of_node_get(nc);
82 spi->dev.of_node = nc;
82 spi->dev.archdata.of_node = nc; 83 spi->dev.archdata.of_node = nc;
83 84
84 /* Register the new device */ 85 /* Register the new device */
diff --git a/include/linux/device.h b/include/linux/device.h
index 182192892d45..7a968bdb02e2 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -34,6 +34,7 @@ struct class;
34struct class_private; 34struct class_private;
35struct bus_type; 35struct bus_type;
36struct bus_type_private; 36struct bus_type_private;
37struct device_node;
37 38
38struct bus_attribute { 39struct bus_attribute {
39 struct attribute attr; 40 struct attribute attr;
@@ -433,6 +434,9 @@ struct device {
433 override */ 434 override */
434 /* arch specific additions */ 435 /* arch specific additions */
435 struct dev_archdata archdata; 436 struct dev_archdata archdata;
437#ifdef CONFIG_OF
438 struct device_node *of_node;
439#endif
436 440
437 dev_t devt; /* dev_t, creates the sysfs "dev" */ 441 dev_t devt; /* dev_t, creates the sysfs "dev" */
438 442