This fixes a regression introduced by
commit 0d2e778e38e0ddffab4bb2b0e9ed2ad5165c4bf7
"net: phy: replace PHY_HAS_INTERRUPT with a check for
config_intr and ack_interrupt".

This assumes that a PHY cannot trigger interrupt unless
it has .config_intr() or .ack_interrupt() implemented.
A later patch makes the code assume both need to be
implemented for interrupts to be present.

But this PHY (which is inside a DSA) will happily
fire interrupts without either callback.

Implement a dummy callback for .config_intr() and
.ack_interrupt() as a workaround.

Tested on the RTL8366RB on D-Link DIR-685.

Fixes: 0d2e778e38e0 ("net: phy: replace PHY_HAS_INTERRUPT with a check for 
config_intr and ack_interrupt")
Cc: Heiner Kallweit <hkallwe...@gmail.com>
Signed-off-by: Linus Walleij <linus.wall...@linaro.org>
---
 drivers/net/phy/realtek.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index c6010fb1aa0f..31372be44570 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -211,6 +211,17 @@ static int rtl8366rb_config_init(struct phy_device *phydev)
        return ret;
 }
 
+static int rtl8366rb_ack_interrupt(struct phy_device *phydev)
+{
+       return 0;
+}
+
+static int rtl8366rb_config_intr(struct phy_device *phydev)
+{
+       /* Dummy function to make sure we get interrupts */
+       return 0;
+}
+
 static struct phy_driver realtek_drvs[] = {
        {
                PHY_ID_MATCH_EXACT(0x00008201),
@@ -282,6 +293,8 @@ static struct phy_driver realtek_drvs[] = {
                .name           = "RTL8366RB Gigabit Ethernet",
                .features       = PHY_GBIT_FEATURES,
                .config_init    = &rtl8366rb_config_init,
+               .ack_interrupt  = &rtl8366rb_ack_interrupt,
+               .config_intr    = &rtl8366rb_config_intr,
                .suspend        = genphy_suspend,
                .resume         = genphy_resume,
        },
-- 
2.20.1

Reply via email to