phy: fix the use of PHY_IGNORE_INTERRUPT
authorFlorian Fainelli <f.fainelli@gmail.com>
Sun, 19 May 2013 22:53:42 +0000 (22:53 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 20 May 2013 21:13:08 +0000 (14:13 -0700)
commit2c7b49212a86f13697281a4dace2cb96aec71d6b
tree315bc489f7c0ee3a9c55ae86041bc1846acc2a05
parent45e983414334f217c60bd04d39d6f5ec2d8d7bb4
phy: fix the use of PHY_IGNORE_INTERRUPT

When a PHY device is registered with the special IRQ value
PHY_IGNORE_INTERRUPT (-2) it will not properly be handled by the PHY
library:

- it continues to poll its register, while we do not want this
  because such PHY link events or register changes are serviced by an
  Ethernet MAC
- it will still try to configure PHY interrupts at the PHY level, such
  interrupts do not exist at the PHY but at the MAC level
- the state machine only handles PHY_POLL, but should also handle
  PHY_IGNORE_INTERRUPT similarly

This patch updates the PHY state machine and initialization paths to
account for the specific PHY_IGNORE_INTERRUPT. Based on an earlier patch
by Thomas Petazzoni, and reworked to add the missing bits. Add a helper
phy_interrupt_is_valid() which specifically tests for a PHY interrupt
not to be PHY_POLL or PHY_IGNORE_INTERRUPT and use it throughout the
code.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy.c
drivers/net/phy/phy_device.c
include/linux/phy.h