}
 EXPORT_SYMBOL(phy_sfp_probe);
 
+static bool phy_drv_supports_irq(struct phy_driver *phydrv)
+{
+       return phydrv->config_intr && phydrv->handle_interrupt;
+}
+
 /**
  * phy_attach_direct - attach a network device to a given PHY device pointer
  * @dev: network device to attach
        if (phydev->dev_flags & PHY_F_NO_IRQ)
                phydev->irq = PHY_POLL;
 
+       if (!phy_drv_supports_irq(phydev->drv) && phy_interrupt_is_valid(phydev))
+               phydev->irq = PHY_POLL;
+
        /* Port is set to PORT_TP by default and the actual PHY driver will set
         * it to different value depending on the PHY configuration. If we have
         * the generic PHY driver we can't figure it out, thus set the old
 }
 EXPORT_SYMBOL(phy_get_internal_delay);
 
-static bool phy_drv_supports_irq(struct phy_driver *phydrv)
-{
-       return phydrv->config_intr && phydrv->handle_interrupt;
-}
-
 static int phy_led_set_brightness(struct led_classdev *led_cdev,
                                  enum led_brightness value)
 {