lantiq: Add support for linux 4.1
[openwrt/openwrt.git] / target / linux / lantiq / patches-4.1 / 0026-NET-multi-phy-support.patch
diff --git a/target/linux/lantiq/patches-4.1/0026-NET-multi-phy-support.patch b/target/linux/lantiq/patches-4.1/0026-NET-multi-phy-support.patch
new file mode 100644 (file)
index 0000000..2967bae
--- /dev/null
@@ -0,0 +1,53 @@
+From c6feeeb407a3b8a6597ae377ba4dd138e185e3dd Mon Sep 17 00:00:00 2001
+From: John Crispin <blogic@openwrt.org>
+Date: Sun, 27 Jul 2014 09:38:50 +0100
+Subject: [PATCH 26/36] NET: multi phy support
+
+Signed-off-by: John Crispin <blogic@openwrt.org>
+---
+ drivers/net/phy/phy.c |    9 ++++++---
+ include/linux/phy.h   |    1 +
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/phy/phy.c
++++ b/drivers/net/phy/phy.c
+@@ -855,7 +855,8 @@ void phy_state_machine(struct work_struc
+               /* If the link is down, give up on negotiation for now */
+               if (!phydev->link) {
+                       phydev->state = PHY_NOLINK;
+-                      netif_carrier_off(phydev->attached_dev);
++                      if (!phydev->no_auto_carrier_off)
++                              netif_carrier_off(phydev->attached_dev);
+                       phydev->adjust_link(phydev->attached_dev);
+                       break;
+               }
+@@ -928,7 +929,8 @@ void phy_state_machine(struct work_struc
+                       netif_carrier_on(phydev->attached_dev);
+               } else {
+                       phydev->state = PHY_NOLINK;
+-                      netif_carrier_off(phydev->attached_dev);
++                      if (!phydev->no_auto_carrier_off)
++                              netif_carrier_off(phydev->attached_dev);
+               }
+               phydev->adjust_link(phydev->attached_dev);
+@@ -940,7 +942,8 @@ void phy_state_machine(struct work_struc
+       case PHY_HALTED:
+               if (phydev->link) {
+                       phydev->link = 0;
+-                      netif_carrier_off(phydev->attached_dev);
++                      if (!phydev->no_auto_carrier_off)
++                              netif_carrier_off(phydev->attached_dev);
+                       phydev->adjust_link(phydev->attached_dev);
+                       do_suspend = true;
+               }
+--- a/include/linux/phy.h
++++ b/include/linux/phy.h
+@@ -367,6 +367,7 @@ struct phy_device {
+       bool is_internal;
+       bool has_fixups;
+       bool suspended;
++      bool no_auto_carrier_off;
+       enum phy_state state;