diff options
-rw-r--r-- | drivers/net/phy/fixed_phy.c | 29 | ||||
-rw-r--r-- | include/linux/phy_fixed.h | 9 |
2 files changed, 38 insertions, 0 deletions
diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c index a08a3c78ba97..1960b46add65 100644 --- a/drivers/net/phy/fixed_phy.c +++ b/drivers/net/phy/fixed_phy.c | |||
@@ -183,6 +183,35 @@ int fixed_phy_set_link_update(struct phy_device *phydev, | |||
183 | } | 183 | } |
184 | EXPORT_SYMBOL_GPL(fixed_phy_set_link_update); | 184 | EXPORT_SYMBOL_GPL(fixed_phy_set_link_update); |
185 | 185 | ||
186 | int fixed_phy_update_state(struct phy_device *phydev, | ||
187 | const struct fixed_phy_status *status, | ||
188 | const struct fixed_phy_status *changed) | ||
189 | { | ||
190 | struct fixed_mdio_bus *fmb = &platform_fmb; | ||
191 | struct fixed_phy *fp; | ||
192 | |||
193 | if (!phydev || !phydev->bus) | ||
194 | return -EINVAL; | ||
195 | |||
196 | list_for_each_entry(fp, &fmb->phys, node) { | ||
197 | if (fp->addr == phydev->addr) { | ||
198 | #define _UPD(x) if (changed->x) \ | ||
199 | fp->status.x = status->x | ||
200 | _UPD(link); | ||
201 | _UPD(speed); | ||
202 | _UPD(duplex); | ||
203 | _UPD(pause); | ||
204 | _UPD(asym_pause); | ||
205 | #undef _UPD | ||
206 | fixed_phy_update_regs(fp); | ||
207 | return 0; | ||
208 | } | ||
209 | } | ||
210 | |||
211 | return -ENOENT; | ||
212 | } | ||
213 | EXPORT_SYMBOL(fixed_phy_update_state); | ||
214 | |||
186 | int fixed_phy_add(unsigned int irq, int phy_addr, | 215 | int fixed_phy_add(unsigned int irq, int phy_addr, |
187 | struct fixed_phy_status *status) | 216 | struct fixed_phy_status *status) |
188 | { | 217 | { |
diff --git a/include/linux/phy_fixed.h b/include/linux/phy_fixed.h index 7e75bfe37cc7..fe5732d53eda 100644 --- a/include/linux/phy_fixed.h +++ b/include/linux/phy_fixed.h | |||
@@ -21,6 +21,9 @@ extern void fixed_phy_del(int phy_addr); | |||
21 | extern int fixed_phy_set_link_update(struct phy_device *phydev, | 21 | extern int fixed_phy_set_link_update(struct phy_device *phydev, |
22 | int (*link_update)(struct net_device *, | 22 | int (*link_update)(struct net_device *, |
23 | struct fixed_phy_status *)); | 23 | struct fixed_phy_status *)); |
24 | extern int fixed_phy_update_state(struct phy_device *phydev, | ||
25 | const struct fixed_phy_status *status, | ||
26 | const struct fixed_phy_status *changed); | ||
24 | #else | 27 | #else |
25 | static inline int fixed_phy_add(unsigned int irq, int phy_id, | 28 | static inline int fixed_phy_add(unsigned int irq, int phy_id, |
26 | struct fixed_phy_status *status) | 29 | struct fixed_phy_status *status) |
@@ -43,6 +46,12 @@ static inline int fixed_phy_set_link_update(struct phy_device *phydev, | |||
43 | { | 46 | { |
44 | return -ENODEV; | 47 | return -ENODEV; |
45 | } | 48 | } |
49 | static inline int fixed_phy_update_state(struct phy_device *phydev, | ||
50 | const struct fixed_phy_status *status, | ||
51 | const struct fixed_phy_status *changed) | ||
52 | { | ||
53 | return -ENODEV; | ||
54 | } | ||
46 | #endif /* CONFIG_FIXED_PHY */ | 55 | #endif /* CONFIG_FIXED_PHY */ |
47 | 56 | ||
48 | #endif /* __PHY_FIXED_H */ | 57 | #endif /* __PHY_FIXED_H */ |