1
2
3
4
5
6
7
8#ifndef __LINUX_OF_MDIO_H
9#define __LINUX_OF_MDIO_H
10
11#include <linux/phy.h>
12#include <linux/of.h>
13
14#if IS_ENABLED(CONFIG_OF_MDIO)
15extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np);
16extern struct phy_device *of_phy_find_device(struct device_node *phy_np);
17extern struct phy_device *of_phy_connect(struct net_device *dev,
18 struct device_node *phy_np,
19 void (*hndlr)(struct net_device *),
20 u32 flags, phy_interface_t iface);
21extern struct phy_device *
22of_phy_get_and_connect(struct net_device *dev, struct device_node *np,
23 void (*hndlr)(struct net_device *));
24struct phy_device *of_phy_attach(struct net_device *dev,
25 struct device_node *phy_np, u32 flags,
26 phy_interface_t iface);
27
28extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np);
29extern int of_phy_register_fixed_link(struct device_node *np);
30extern void of_phy_deregister_fixed_link(struct device_node *np);
31extern bool of_phy_is_fixed_link(struct device_node *np);
32
33
34static inline int of_mdio_parse_addr(struct device *dev,
35 const struct device_node *np)
36{
37 u32 addr;
38 int ret;
39
40 ret = of_property_read_u32(np, "reg", &addr);
41 if (ret < 0) {
42 dev_err(dev, "%s has invalid PHY address\n", np->full_name);
43 return ret;
44 }
45
46
47 if (addr >= PHY_MAX_ADDR) {
48 dev_err(dev, "%s PHY address %i is too large\n",
49 np->full_name, addr);
50 return -EINVAL;
51 }
52
53 return addr;
54}
55
56#else
57static inline int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
58{
59
60
61
62
63
64 return mdiobus_register(mdio);
65}
66
67static inline struct phy_device *of_phy_find_device(struct device_node *phy_np)
68{
69 return NULL;
70}
71
72static inline struct phy_device *of_phy_connect(struct net_device *dev,
73 struct device_node *phy_np,
74 void (*hndlr)(struct net_device *),
75 u32 flags, phy_interface_t iface)
76{
77 return NULL;
78}
79
80static inline struct phy_device *
81of_phy_get_and_connect(struct net_device *dev, struct device_node *np,
82 void (*hndlr)(struct net_device *))
83{
84 return NULL;
85}
86
87static inline struct phy_device *of_phy_attach(struct net_device *dev,
88 struct device_node *phy_np,
89 u32 flags, phy_interface_t iface)
90{
91 return NULL;
92}
93
94static inline struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np)
95{
96 return NULL;
97}
98
99static inline int of_mdio_parse_addr(struct device *dev,
100 const struct device_node *np)
101{
102 return -ENOSYS;
103}
104static inline int of_phy_register_fixed_link(struct device_node *np)
105{
106 return -ENOSYS;
107}
108static inline void of_phy_deregister_fixed_link(struct device_node *np)
109{
110}
111static inline bool of_phy_is_fixed_link(struct device_node *np)
112{
113 return false;
114}
115#endif
116
117
118#endif
119