diff options
author | Petri Gynther <pgynther@google.com> | 2014-10-06 14:38:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-07 13:06:45 -0400 |
commit | fd2ef0ba3071c92ac6272ab22ea3f2b16d88a4eb (patch) | |
tree | e9d32e03bc599e39fb55b1b79269cbc08ae3ba20 /drivers | |
parent | 02c0fc1b8f41e6e895d6573615ba8ff549b685d2 (diff) |
net: phy: adjust fixed_phy_register() return value
Adjust fixed_phy_register() to return struct phy_device *, so that
it becomes easy to use fixed PHYs without device tree support:
phydev = fixed_phy_register(PHY_POLL, &fixed_phy_status, NULL);
fixed_phy_set_link_update(phydev, fixed_phy_link_update);
phy_connect_direct(netdev, phydev, handler_fn, phy_interface);
This change is a prerequisite for modifying bcmgenet driver to work
without a device tree on Broadcom's MIPS-based 7xxx platforms.
Signed-off-by: Petri Gynther <pgynther@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/phy/fixed.c | 16 | ||||
-rw-r--r-- | drivers/of/of_mdio.c | 7 |
2 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c index 5b19fbbda6d4..47872caa0081 100644 --- a/drivers/net/phy/fixed.c +++ b/drivers/net/phy/fixed.c | |||
@@ -233,9 +233,9 @@ EXPORT_SYMBOL_GPL(fixed_phy_del); | |||
233 | static int phy_fixed_addr; | 233 | static int phy_fixed_addr; |
234 | static DEFINE_SPINLOCK(phy_fixed_addr_lock); | 234 | static DEFINE_SPINLOCK(phy_fixed_addr_lock); |
235 | 235 | ||
236 | int fixed_phy_register(unsigned int irq, | 236 | struct phy_device *fixed_phy_register(unsigned int irq, |
237 | struct fixed_phy_status *status, | 237 | struct fixed_phy_status *status, |
238 | struct device_node *np) | 238 | struct device_node *np) |
239 | { | 239 | { |
240 | struct fixed_mdio_bus *fmb = &platform_fmb; | 240 | struct fixed_mdio_bus *fmb = &platform_fmb; |
241 | struct phy_device *phy; | 241 | struct phy_device *phy; |
@@ -246,19 +246,19 @@ int fixed_phy_register(unsigned int irq, | |||
246 | spin_lock(&phy_fixed_addr_lock); | 246 | spin_lock(&phy_fixed_addr_lock); |
247 | if (phy_fixed_addr == PHY_MAX_ADDR) { | 247 | if (phy_fixed_addr == PHY_MAX_ADDR) { |
248 | spin_unlock(&phy_fixed_addr_lock); | 248 | spin_unlock(&phy_fixed_addr_lock); |
249 | return -ENOSPC; | 249 | return ERR_PTR(-ENOSPC); |
250 | } | 250 | } |
251 | phy_addr = phy_fixed_addr++; | 251 | phy_addr = phy_fixed_addr++; |
252 | spin_unlock(&phy_fixed_addr_lock); | 252 | spin_unlock(&phy_fixed_addr_lock); |
253 | 253 | ||
254 | ret = fixed_phy_add(PHY_POLL, phy_addr, status); | 254 | ret = fixed_phy_add(PHY_POLL, phy_addr, status); |
255 | if (ret < 0) | 255 | if (ret < 0) |
256 | return ret; | 256 | return ERR_PTR(ret); |
257 | 257 | ||
258 | phy = get_phy_device(fmb->mii_bus, phy_addr, false); | 258 | phy = get_phy_device(fmb->mii_bus, phy_addr, false); |
259 | if (!phy || IS_ERR(phy)) { | 259 | if (!phy || IS_ERR(phy)) { |
260 | fixed_phy_del(phy_addr); | 260 | fixed_phy_del(phy_addr); |
261 | return -EINVAL; | 261 | return ERR_PTR(-EINVAL); |
262 | } | 262 | } |
263 | 263 | ||
264 | of_node_get(np); | 264 | of_node_get(np); |
@@ -269,10 +269,10 @@ int fixed_phy_register(unsigned int irq, | |||
269 | phy_device_free(phy); | 269 | phy_device_free(phy); |
270 | of_node_put(np); | 270 | of_node_put(np); |
271 | fixed_phy_del(phy_addr); | 271 | fixed_phy_del(phy_addr); |
272 | return ret; | 272 | return ERR_PTR(ret); |
273 | } | 273 | } |
274 | 274 | ||
275 | return 0; | 275 | return phy; |
276 | } | 276 | } |
277 | 277 | ||
278 | static int __init fixed_mdio_bus_init(void) | 278 | static int __init fixed_mdio_bus_init(void) |
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index a85d80012993..1bd43053b8c7 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c | |||
@@ -286,6 +286,7 @@ int of_phy_register_fixed_link(struct device_node *np) | |||
286 | struct device_node *fixed_link_node; | 286 | struct device_node *fixed_link_node; |
287 | const __be32 *fixed_link_prop; | 287 | const __be32 *fixed_link_prop; |
288 | int len; | 288 | int len; |
289 | struct phy_device *phy; | ||
289 | 290 | ||
290 | /* New binding */ | 291 | /* New binding */ |
291 | fixed_link_node = of_get_child_by_name(np, "fixed-link"); | 292 | fixed_link_node = of_get_child_by_name(np, "fixed-link"); |
@@ -299,7 +300,8 @@ int of_phy_register_fixed_link(struct device_node *np) | |||
299 | status.asym_pause = of_property_read_bool(fixed_link_node, | 300 | status.asym_pause = of_property_read_bool(fixed_link_node, |
300 | "asym-pause"); | 301 | "asym-pause"); |
301 | of_node_put(fixed_link_node); | 302 | of_node_put(fixed_link_node); |
302 | return fixed_phy_register(PHY_POLL, &status, np); | 303 | phy = fixed_phy_register(PHY_POLL, &status, np); |
304 | return IS_ERR(phy) ? PTR_ERR(phy) : 0; | ||
303 | } | 305 | } |
304 | 306 | ||
305 | /* Old binding */ | 307 | /* Old binding */ |
@@ -310,7 +312,8 @@ int of_phy_register_fixed_link(struct device_node *np) | |||
310 | status.speed = be32_to_cpu(fixed_link_prop[2]); | 312 | status.speed = be32_to_cpu(fixed_link_prop[2]); |
311 | status.pause = be32_to_cpu(fixed_link_prop[3]); | 313 | status.pause = be32_to_cpu(fixed_link_prop[3]); |
312 | status.asym_pause = be32_to_cpu(fixed_link_prop[4]); | 314 | status.asym_pause = be32_to_cpu(fixed_link_prop[4]); |
313 | return fixed_phy_register(PHY_POLL, &status, np); | 315 | phy = fixed_phy_register(PHY_POLL, &status, np); |
316 | return IS_ERR(phy) ? PTR_ERR(phy) : 0; | ||
314 | } | 317 | } |
315 | 318 | ||
316 | return -ENODEV; | 319 | return -ENODEV; |