diff options
author | Lennert Buytenhek <buytenh@wantstofly.org> | 2008-09-29 13:12:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-10-08 19:38:41 -0400 |
commit | 2e888103295f47b8fcbf7e9bb8c5da97dd2ecd76 (patch) | |
tree | 210943ed285496352078124fd2a43443b1e5b265 /drivers/net | |
parent | 46abc02175b3c246dd5141d878f565a8725060c9 (diff) |
phylib: add mdiobus_{read,write}
Add mdiobus_{read,write} routines to allow direct reading/writing
of registers on an mii bus without having to go through the PHY
abstraction, and make phy_{read,write} use these primitives.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/phy/mdio_bus.c | 49 | ||||
-rw-r--r-- | drivers/net/phy/phy.c | 49 |
2 files changed, 49 insertions, 49 deletions
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index fb4c0965b152..6671e2da0d57 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c | |||
@@ -211,6 +211,55 @@ struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr) | |||
211 | EXPORT_SYMBOL(mdiobus_scan); | 211 | EXPORT_SYMBOL(mdiobus_scan); |
212 | 212 | ||
213 | /** | 213 | /** |
214 | * mdiobus_read - Convenience function for reading a given MII mgmt register | ||
215 | * @bus: the mii_bus struct | ||
216 | * @addr: the phy address | ||
217 | * @regnum: register number to read | ||
218 | * | ||
219 | * NOTE: MUST NOT be called from interrupt context, | ||
220 | * because the bus read/write functions may wait for an interrupt | ||
221 | * to conclude the operation. | ||
222 | */ | ||
223 | int mdiobus_read(struct mii_bus *bus, int addr, u16 regnum) | ||
224 | { | ||
225 | int retval; | ||
226 | |||
227 | BUG_ON(in_interrupt()); | ||
228 | |||
229 | mutex_lock(&bus->mdio_lock); | ||
230 | retval = bus->read(bus, addr, regnum); | ||
231 | mutex_unlock(&bus->mdio_lock); | ||
232 | |||
233 | return retval; | ||
234 | } | ||
235 | EXPORT_SYMBOL(mdiobus_read); | ||
236 | |||
237 | /** | ||
238 | * mdiobus_write - Convenience function for writing a given MII mgmt register | ||
239 | * @bus: the mii_bus struct | ||
240 | * @addr: the phy address | ||
241 | * @regnum: register number to write | ||
242 | * @val: value to write to @regnum | ||
243 | * | ||
244 | * NOTE: MUST NOT be called from interrupt context, | ||
245 | * because the bus read/write functions may wait for an interrupt | ||
246 | * to conclude the operation. | ||
247 | */ | ||
248 | int mdiobus_write(struct mii_bus *bus, int addr, u16 regnum, u16 val) | ||
249 | { | ||
250 | int err; | ||
251 | |||
252 | BUG_ON(in_interrupt()); | ||
253 | |||
254 | mutex_lock(&bus->mdio_lock); | ||
255 | err = bus->write(bus, addr, regnum, val); | ||
256 | mutex_unlock(&bus->mdio_lock); | ||
257 | |||
258 | return err; | ||
259 | } | ||
260 | EXPORT_SYMBOL(mdiobus_write); | ||
261 | |||
262 | /** | ||
214 | * mdio_bus_match - determine if given PHY driver supports the given PHY device | 263 | * mdio_bus_match - determine if given PHY driver supports the given PHY device |
215 | * @dev: target PHY device | 264 | * @dev: target PHY device |
216 | * @drv: given PHY driver | 265 | * @drv: given PHY driver |
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 20cc82c78137..df4e6257d4a7 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c | |||
@@ -58,55 +58,6 @@ EXPORT_SYMBOL(phy_print_status); | |||
58 | 58 | ||
59 | 59 | ||
60 | /** | 60 | /** |
61 | * phy_read - Convenience function for reading a given PHY register | ||
62 | * @phydev: the phy_device struct | ||
63 | * @regnum: register number to read | ||
64 | * | ||
65 | * NOTE: MUST NOT be called from interrupt context, | ||
66 | * because the bus read/write functions may wait for an interrupt | ||
67 | * to conclude the operation. | ||
68 | */ | ||
69 | int phy_read(struct phy_device *phydev, u16 regnum) | ||
70 | { | ||
71 | int retval; | ||
72 | struct mii_bus *bus = phydev->bus; | ||
73 | |||
74 | BUG_ON(in_interrupt()); | ||
75 | |||
76 | mutex_lock(&bus->mdio_lock); | ||
77 | retval = bus->read(bus, phydev->addr, regnum); | ||
78 | mutex_unlock(&bus->mdio_lock); | ||
79 | |||
80 | return retval; | ||
81 | } | ||
82 | EXPORT_SYMBOL(phy_read); | ||
83 | |||
84 | /** | ||
85 | * phy_write - Convenience function for writing a given PHY register | ||
86 | * @phydev: the phy_device struct | ||
87 | * @regnum: register number to write | ||
88 | * @val: value to write to @regnum | ||
89 | * | ||
90 | * NOTE: MUST NOT be called from interrupt context, | ||
91 | * because the bus read/write functions may wait for an interrupt | ||
92 | * to conclude the operation. | ||
93 | */ | ||
94 | int phy_write(struct phy_device *phydev, u16 regnum, u16 val) | ||
95 | { | ||
96 | int err; | ||
97 | struct mii_bus *bus = phydev->bus; | ||
98 | |||
99 | BUG_ON(in_interrupt()); | ||
100 | |||
101 | mutex_lock(&bus->mdio_lock); | ||
102 | err = bus->write(bus, phydev->addr, regnum, val); | ||
103 | mutex_unlock(&bus->mdio_lock); | ||
104 | |||
105 | return err; | ||
106 | } | ||
107 | EXPORT_SYMBOL(phy_write); | ||
108 | |||
109 | /** | ||
110 | * phy_clear_interrupt - Ack the phy device's interrupt | 61 | * phy_clear_interrupt - Ack the phy device's interrupt |
111 | * @phydev: the phy_device struct | 62 | * @phydev: the phy_device struct |
112 | * | 63 | * |