|
@@ -27,11 +27,33 @@ struct phy_device *of_phy_attach(struct net_device *dev,
|
|
|
phy_interface_t iface);
|
|
|
|
|
|
extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np);
|
|
|
-extern int of_mdio_parse_addr(struct device *dev, const struct device_node *np);
|
|
|
extern int of_phy_register_fixed_link(struct device_node *np);
|
|
|
extern void of_phy_deregister_fixed_link(struct device_node *np);
|
|
|
extern bool of_phy_is_fixed_link(struct device_node *np);
|
|
|
|
|
|
+
|
|
|
+static inline int of_mdio_parse_addr(struct device *dev,
|
|
|
+ const struct device_node *np)
|
|
|
+{
|
|
|
+ u32 addr;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = of_property_read_u32(np, "reg", &addr);
|
|
|
+ if (ret < 0) {
|
|
|
+ dev_err(dev, "%s has invalid PHY address\n", np->full_name);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* A PHY must have a reg property in the range [0-31] */
|
|
|
+ if (addr >= PHY_MAX_ADDR) {
|
|
|
+ dev_err(dev, "%s PHY address %i is too large\n",
|
|
|
+ np->full_name, addr);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return addr;
|
|
|
+}
|
|
|
+
|
|
|
#else /* CONFIG_OF_MDIO */
|
|
|
static inline int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
|
|
{
|