@@ -153,19 +153,32 @@ struct dp83869_private {
153153 int mode ;
154154};
155155
156+ static int dp83869_config_aneg (struct phy_device * phydev )
157+ {
158+ struct dp83869_private * dp83869 = phydev -> priv ;
159+
160+ if (dp83869 -> mode != DP83869_RGMII_1000_BASE )
161+ return genphy_config_aneg (phydev );
162+
163+ return genphy_c37_config_aneg (phydev );
164+ }
165+
156166static int dp83869_read_status (struct phy_device * phydev )
157167{
158168 struct dp83869_private * dp83869 = phydev -> priv ;
169+ bool changed ;
159170 int ret ;
160171
172+ if (dp83869 -> mode == DP83869_RGMII_1000_BASE )
173+ return genphy_c37_read_status (phydev , & changed );
174+
161175 ret = genphy_read_status (phydev );
162176 if (ret )
163177 return ret ;
164178
165- if (linkmode_test_bit ( ETHTOOL_LINK_MODE_FIBRE_BIT , phydev -> supported ) ) {
179+ if (dp83869 -> mode == DP83869_RGMII_100_BASE ) {
166180 if (phydev -> link ) {
167- if (dp83869 -> mode == DP83869_RGMII_100_BASE )
168- phydev -> speed = SPEED_100 ;
181+ phydev -> speed = SPEED_100 ;
169182 } else {
170183 phydev -> speed = SPEED_UNKNOWN ;
171184 phydev -> duplex = DUPLEX_UNKNOWN ;
@@ -898,6 +911,7 @@ static int dp83869_phy_reset(struct phy_device *phydev)
898911 .soft_reset = dp83869_phy_reset, \
899912 .config_intr = dp83869_config_intr, \
900913 .handle_interrupt = dp83869_handle_interrupt, \
914+ .config_aneg = dp83869_config_aneg, \
901915 .read_status = dp83869_read_status, \
902916 .get_tunable = dp83869_get_tunable, \
903917 .set_tunable = dp83869_set_tunable, \
0 commit comments