| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * OF helpers for the MDIO (Ethernet PHY) API |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (c) 2009 Secret Lab Technologies, Ltd. |
|---|
| 5 | | - * |
|---|
| 6 | | - * This file is released under the GPLv2 |
|---|
| 7 | 6 | */ |
|---|
| 8 | 7 | |
|---|
| 9 | 8 | #ifndef __LINUX_OF_MDIO_H |
|---|
| 10 | 9 | #define __LINUX_OF_MDIO_H |
|---|
| 11 | 10 | |
|---|
| 11 | +#include <linux/device.h> |
|---|
| 12 | 12 | #include <linux/phy.h> |
|---|
| 13 | 13 | #include <linux/of.h> |
|---|
| 14 | 14 | |
|---|
| 15 | 15 | #if IS_ENABLED(CONFIG_OF_MDIO) |
|---|
| 16 | | -extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); |
|---|
| 17 | | -extern struct phy_device *of_phy_find_device(struct device_node *phy_np); |
|---|
| 18 | | -extern struct phy_device *of_phy_connect(struct net_device *dev, |
|---|
| 19 | | - struct device_node *phy_np, |
|---|
| 20 | | - void (*hndlr)(struct net_device *), |
|---|
| 21 | | - u32 flags, phy_interface_t iface); |
|---|
| 22 | | -extern struct phy_device * |
|---|
| 16 | +bool of_mdiobus_child_is_phy(struct device_node *child); |
|---|
| 17 | +int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); |
|---|
| 18 | +int devm_of_mdiobus_register(struct device *dev, struct mii_bus *mdio, |
|---|
| 19 | + struct device_node *np); |
|---|
| 20 | +struct mdio_device *of_mdio_find_device(struct device_node *np); |
|---|
| 21 | +struct phy_device *of_phy_find_device(struct device_node *phy_np); |
|---|
| 22 | +struct phy_device * |
|---|
| 23 | +of_phy_connect(struct net_device *dev, struct device_node *phy_np, |
|---|
| 24 | + void (*hndlr)(struct net_device *), u32 flags, |
|---|
| 25 | + phy_interface_t iface); |
|---|
| 26 | +struct phy_device * |
|---|
| 23 | 27 | of_phy_get_and_connect(struct net_device *dev, struct device_node *np, |
|---|
| 24 | 28 | void (*hndlr)(struct net_device *)); |
|---|
| 25 | | -struct phy_device *of_phy_attach(struct net_device *dev, |
|---|
| 26 | | - struct device_node *phy_np, u32 flags, |
|---|
| 27 | | - phy_interface_t iface); |
|---|
| 29 | +struct phy_device * |
|---|
| 30 | +of_phy_attach(struct net_device *dev, struct device_node *phy_np, |
|---|
| 31 | + u32 flags, phy_interface_t iface); |
|---|
| 28 | 32 | |
|---|
| 29 | | -extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); |
|---|
| 30 | | -extern int of_phy_register_fixed_link(struct device_node *np); |
|---|
| 31 | | -extern void of_phy_deregister_fixed_link(struct device_node *np); |
|---|
| 32 | | -extern bool of_phy_is_fixed_link(struct device_node *np); |
|---|
| 33 | | - |
|---|
| 33 | +struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); |
|---|
| 34 | +int of_phy_register_fixed_link(struct device_node *np); |
|---|
| 35 | +void of_phy_deregister_fixed_link(struct device_node *np); |
|---|
| 36 | +bool of_phy_is_fixed_link(struct device_node *np); |
|---|
| 37 | +int of_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, |
|---|
| 38 | + struct device_node *child, u32 addr); |
|---|
| 34 | 39 | |
|---|
| 35 | 40 | static inline int of_mdio_parse_addr(struct device *dev, |
|---|
| 36 | 41 | const struct device_node *np) |
|---|
| .. | .. |
|---|
| 55 | 60 | } |
|---|
| 56 | 61 | |
|---|
| 57 | 62 | #else /* CONFIG_OF_MDIO */ |
|---|
| 63 | +static inline bool of_mdiobus_child_is_phy(struct device_node *child) |
|---|
| 64 | +{ |
|---|
| 65 | + return false; |
|---|
| 66 | +} |
|---|
| 67 | + |
|---|
| 58 | 68 | static inline int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) |
|---|
| 59 | 69 | { |
|---|
| 60 | 70 | /* |
|---|
| .. | .. |
|---|
| 63 | 73 | */ |
|---|
| 64 | 74 | |
|---|
| 65 | 75 | return mdiobus_register(mdio); |
|---|
| 76 | +} |
|---|
| 77 | + |
|---|
| 78 | +static inline int devm_of_mdiobus_register(struct device *dev, |
|---|
| 79 | + struct mii_bus *mdio, |
|---|
| 80 | + struct device_node *np) |
|---|
| 81 | +{ |
|---|
| 82 | + return devm_mdiobus_register(dev, mdio); |
|---|
| 83 | +} |
|---|
| 84 | + |
|---|
| 85 | +static inline struct mdio_device *of_mdio_find_device(struct device_node *np) |
|---|
| 86 | +{ |
|---|
| 87 | + return NULL; |
|---|
| 66 | 88 | } |
|---|
| 67 | 89 | |
|---|
| 68 | 90 | static inline struct phy_device *of_phy_find_device(struct device_node *phy_np) |
|---|
| .. | .. |
|---|
| 113 | 135 | { |
|---|
| 114 | 136 | return false; |
|---|
| 115 | 137 | } |
|---|
| 138 | + |
|---|
| 139 | +static inline int of_mdiobus_phy_device_register(struct mii_bus *mdio, |
|---|
| 140 | + struct phy_device *phy, |
|---|
| 141 | + struct device_node *child, u32 addr) |
|---|
| 142 | +{ |
|---|
| 143 | + return -ENOSYS; |
|---|
| 144 | +} |
|---|
| 116 | 145 | #endif |
|---|
| 117 | 146 | |
|---|
| 118 | 147 | |
|---|