| From 0b6eb1e68290243d439ee330ea8d0b239a5aec69 Mon Sep 17 00:00:00 2001 |
| From: John Crispin <blogic@openwrt.org> |
| Date: Sun, 27 Jul 2014 09:38:50 +0100 |
| Subject: [PATCH 34/53] 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 |
| @@ -554,7 +554,10 @@ static int phy_check_link_status(struct |
| phy_link_up(phydev); |
| } else if (!phydev->link && phydev->state != PHY_NOLINK) { |
| phydev->state = PHY_NOLINK; |
| - phy_link_down(phydev, true); |
| + if (!phydev->no_auto_carrier_off) |
| + phy_link_down(phydev, true); |
| + else |
| + phy_link_down(phydev, false); |
| } |
| |
| return 0; |
| @@ -982,7 +985,10 @@ void phy_state_machine(struct work_struc |
| case PHY_HALTED: |
| if (phydev->link) { |
| phydev->link = 0; |
| - phy_link_down(phydev, true); |
| + if (!phydev->no_auto_carrier_off) |
| + phy_link_down(phydev, true); |
| + else |
| + phy_link_down(phydev, false); |
| } |
| do_suspend = true; |
| break; |
| --- a/include/linux/phy.h |
| +++ b/include/linux/phy.h |
| @@ -380,6 +380,7 @@ struct phy_device { |
| unsigned suspended_by_mdio_bus:1; |
| unsigned sysfs_links:1; |
| unsigned loopback_enabled:1; |
| + unsigned no_auto_carrier_off:1; |
| |
| unsigned autoneg:1; |
| /* The most recently read link state */ |