]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/mdio.c
Merge branch 'linux-next' of git://git.infradead.org/ubifs-2.6
[karo-tx-linux.git] / drivers / net / mdio.c
index f2d10abd04035a7b4f05580ff363607396f8cc06..16fbb11d92aca1cf74369058ab373cf60555302b 100644 (file)
@@ -188,6 +188,7 @@ void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio,
                               u32 npage_adv, u32 npage_lpa)
 {
        int reg;
+       u32 speed;
 
        ecmd->transceiver = XCVR_INTERNAL;
        ecmd->phy_address = mdio->prtad;
@@ -290,33 +291,36 @@ void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio,
                if (modes & (ADVERTISED_10000baseT_Full |
                             ADVERTISED_10000baseKX4_Full |
                             ADVERTISED_10000baseKR_Full)) {
-                       ecmd->speed = SPEED_10000;
+                       speed = SPEED_10000;
                        ecmd->duplex = DUPLEX_FULL;
                } else if (modes & (ADVERTISED_1000baseT_Full |
                                    ADVERTISED_1000baseT_Half |
                                    ADVERTISED_1000baseKX_Full)) {
-                       ecmd->speed = SPEED_1000;
+                       speed = SPEED_1000;
                        ecmd->duplex = !(modes & ADVERTISED_1000baseT_Half);
                } else if (modes & (ADVERTISED_100baseT_Full |
                                    ADVERTISED_100baseT_Half)) {
-                       ecmd->speed = SPEED_100;
+                       speed = SPEED_100;
                        ecmd->duplex = !!(modes & ADVERTISED_100baseT_Full);
                } else {
-                       ecmd->speed = SPEED_10;
+                       speed = SPEED_10;
                        ecmd->duplex = !!(modes & ADVERTISED_10baseT_Full);
                }
        } else {
                /* Report forced settings */
                reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD,
                                      MDIO_CTRL1);
-               ecmd->speed = (((reg & MDIO_PMA_CTRL1_SPEED1000) ? 100 : 1) *
-                              ((reg & MDIO_PMA_CTRL1_SPEED100) ? 100 : 10));
+               speed = (((reg & MDIO_PMA_CTRL1_SPEED1000) ? 100 : 1)
+                        * ((reg & MDIO_PMA_CTRL1_SPEED100) ? 100 : 10));
                ecmd->duplex = (reg & MDIO_CTRL1_FULLDPLX ||
-                               ecmd->speed == SPEED_10000);
+                               speed == SPEED_10000);
        }
 
+       ethtool_cmd_speed_set(ecmd, speed);
+
        /* 10GBASE-T MDI/MDI-X */
-       if (ecmd->port == PORT_TP && ecmd->speed == SPEED_10000) {
+       if (ecmd->port == PORT_TP
+           && (ethtool_cmd_speed(ecmd) == SPEED_10000)) {
                switch (mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD,
                                        MDIO_PMA_10GBT_SWAPPOL)) {
                case MDIO_PMA_10GBT_SWAPPOL_ABNX | MDIO_PMA_10GBT_SWAPPOL_CDNX: