@@ -865,9 +865,15 @@ void phy_start(struct phy_device *phydev)
865
865
}
866
866
EXPORT_SYMBOL (phy_start );
867
867
868
- static void phy_adjust_link (struct phy_device * phydev )
868
+ static void phy_link_up (struct phy_device * phydev )
869
869
{
870
- phydev -> adjust_link (phydev -> attached_dev );
870
+ phydev -> phy_link_change (phydev , true, true);
871
+ phy_led_trigger_change_speed (phydev );
872
+ }
873
+
874
+ static void phy_link_down (struct phy_device * phydev , bool do_carrier )
875
+ {
876
+ phydev -> phy_link_change (phydev , false, do_carrier );
871
877
phy_led_trigger_change_speed (phydev );
872
878
}
873
879
@@ -912,8 +918,7 @@ void phy_state_machine(struct work_struct *work)
912
918
/* If the link is down, give up on negotiation for now */
913
919
if (!phydev -> link ) {
914
920
phydev -> state = PHY_NOLINK ;
915
- netif_carrier_off (phydev -> attached_dev );
916
- phy_adjust_link (phydev );
921
+ phy_link_down (phydev , true);
917
922
break ;
918
923
}
919
924
@@ -925,9 +930,7 @@ void phy_state_machine(struct work_struct *work)
925
930
/* If AN is done, we're running */
926
931
if (err > 0 ) {
927
932
phydev -> state = PHY_RUNNING ;
928
- netif_carrier_on (phydev -> attached_dev );
929
- phy_adjust_link (phydev );
930
-
933
+ phy_link_up (phydev );
931
934
} else if (0 == phydev -> link_timeout -- )
932
935
needs_aneg = true;
933
936
break ;
@@ -952,8 +955,7 @@ void phy_state_machine(struct work_struct *work)
952
955
}
953
956
}
954
957
phydev -> state = PHY_RUNNING ;
955
- netif_carrier_on (phydev -> attached_dev );
956
- phy_adjust_link (phydev );
958
+ phy_link_up (phydev );
957
959
}
958
960
break ;
959
961
case PHY_FORCING :
@@ -963,13 +965,12 @@ void phy_state_machine(struct work_struct *work)
963
965
964
966
if (phydev -> link ) {
965
967
phydev -> state = PHY_RUNNING ;
966
- netif_carrier_on (phydev -> attached_dev );
968
+ phy_link_up (phydev );
967
969
} else {
968
970
if (0 == phydev -> link_timeout -- )
969
971
needs_aneg = true;
972
+ phy_link_down (phydev , false);
970
973
}
971
-
972
- phy_adjust_link (phydev );
973
974
break ;
974
975
case PHY_RUNNING :
975
976
/* Only register a CHANGE if we are polling and link changed
@@ -1001,23 +1002,20 @@ void phy_state_machine(struct work_struct *work)
1001
1002
1002
1003
if (phydev -> link ) {
1003
1004
phydev -> state = PHY_RUNNING ;
1004
- netif_carrier_on (phydev -> attached_dev );
1005
+ phy_link_up (phydev );
1005
1006
} else {
1006
1007
phydev -> state = PHY_NOLINK ;
1007
- netif_carrier_off (phydev -> attached_dev );
1008
+ phy_link_down (phydev , true );
1008
1009
}
1009
1010
1010
- phy_adjust_link (phydev );
1011
-
1012
1011
if (phy_interrupt_is_valid (phydev ))
1013
1012
err = phy_config_interrupt (phydev ,
1014
1013
PHY_INTERRUPT_ENABLED );
1015
1014
break ;
1016
1015
case PHY_HALTED :
1017
1016
if (phydev -> link ) {
1018
1017
phydev -> link = 0 ;
1019
- netif_carrier_off (phydev -> attached_dev );
1020
- phy_adjust_link (phydev );
1018
+ phy_link_down (phydev , true);
1021
1019
do_suspend = true;
1022
1020
}
1023
1021
break ;
@@ -1037,11 +1035,11 @@ void phy_state_machine(struct work_struct *work)
1037
1035
1038
1036
if (phydev -> link ) {
1039
1037
phydev -> state = PHY_RUNNING ;
1040
- netif_carrier_on (phydev -> attached_dev );
1038
+ phy_link_up (phydev );
1041
1039
} else {
1042
1040
phydev -> state = PHY_NOLINK ;
1041
+ phy_link_down (phydev , false);
1043
1042
}
1044
- phy_adjust_link (phydev );
1045
1043
} else {
1046
1044
phydev -> state = PHY_AN ;
1047
1045
phydev -> link_timeout = PHY_AN_TIMEOUT ;
@@ -1053,11 +1051,11 @@ void phy_state_machine(struct work_struct *work)
1053
1051
1054
1052
if (phydev -> link ) {
1055
1053
phydev -> state = PHY_RUNNING ;
1056
- netif_carrier_on (phydev -> attached_dev );
1054
+ phy_link_up (phydev );
1057
1055
} else {
1058
1056
phydev -> state = PHY_NOLINK ;
1057
+ phy_link_down (phydev , false);
1059
1058
}
1060
- phy_adjust_link (phydev );
1061
1059
}
1062
1060
break ;
1063
1061
}
0 commit comments