diff options
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/of_mdio.c | 22 | ||||
-rw-r--r-- | drivers/of/platform.c | 18 |
2 files changed, 34 insertions, 6 deletions
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index d5a57a9..8fb13ba 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c @@ -247,3 +247,25 @@ struct phy_device *of_phy_connect_fixed_link(struct net_device *dev, return IS_ERR(phy) ? NULL : phy; } EXPORT_SYMBOL(of_phy_connect_fixed_link); + +/** + * of_phy_attach - Attach to a PHY without starting the state machine + * @dev: pointer to net_device claiming the phy + * @phy_np: Node pointer for the PHY + * @flags: flags to pass to the PHY + * @iface: PHY data interface type + */ +struct phy_device *of_phy_attach(struct net_device *dev, + struct device_node *phy_np, + u32 flags, + phy_interface_t iface) +{ + struct phy_device *phy = of_phy_find_device(phy_np); + + if (!phy) + return NULL; + + return phy_attach_direct(dev, phy, flags, iface) ? NULL : phy; +} +EXPORT_SYMBOL(of_phy_attach); + diff --git a/drivers/of/platform.c b/drivers/of/platform.c index f6dcde2..f849ae3 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -148,6 +148,18 @@ struct platform_device *of_device_alloc(struct device_node *np, if (!dev) return NULL; + dev->dev.of_node = of_node_get(np); + if (bus_id) + dev_set_name(&dev->dev, "%s", bus_id); + else + of_device_make_bus_id(&dev->dev); + + if (kset_find_obj(dev->dev.kobj.kset, kobject_name(&dev->dev.kobj))) { + kfree(dev); + of_node_put(np); + return NULL; + } + /* count the io and irq resources */ if (of_can_translate_address(np)) while (of_address_to_resource(np, num_reg, &temp_res) == 0) @@ -171,17 +183,11 @@ struct platform_device *of_device_alloc(struct device_node *np, WARN_ON(of_irq_to_resource_table(np, res, num_irq) != num_irq); } - dev->dev.of_node = of_node_get(np); #if defined(CONFIG_MICROBLAZE) dev->dev.dma_mask = &dev->archdata.dma_mask; #endif dev->dev.parent = parent; - if (bus_id) - dev_set_name(&dev->dev, "%s", bus_id); - else - of_device_make_bus_id(&dev->dev); - return dev; } EXPORT_SYMBOL(of_device_alloc); |