diff options
Diffstat (limited to 'drivers/net/phy/mdio_bus.c')
-rw-r--r-- | drivers/net/phy/mdio_bus.c | 49 |
1 files changed, 49 insertions, 0 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 |