net: phy: genphy: Allow overwriting features
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 21 May 2014 13:29:44 +0000 (15:29 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 May 2014 19:43:02 +0000 (15:43 -0400)
of_set_phy_supported allows overwiting hardware capabilities of
a phy with values from the devicetree. This does not work with
the genphy driver though because the genphys config_init function
will overwrite all values adjusted by of_set_phy_supported. Fix
this by initialising the genphy features in the phy_driver struct
and in config_init just limit the features to the ones the hardware
can actually support. The resulting features are a subset of the
devicetree specified features and the hardware features.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy_device.c

index 466ae3e..fc569ea 100644 (file)
@@ -1072,9 +1072,6 @@ int genphy_config_init(struct phy_device *phydev)
        int val;
        u32 features;
 
-       /* For now, I'll claim that the generic driver supports
-        * all possible port types
-        */
        features = (SUPPORTED_TP | SUPPORTED_MII
                        | SUPPORTED_AUI | SUPPORTED_FIBRE |
                        SUPPORTED_BNC);
@@ -1107,8 +1104,8 @@ int genphy_config_init(struct phy_device *phydev)
                        features |= SUPPORTED_1000baseT_Half;
        }
 
-       phydev->supported = features;
-       phydev->advertising = features;
+       phydev->supported &= features;
+       phydev->advertising &= features;
 
        return 0;
 }
@@ -1296,7 +1293,9 @@ static struct phy_driver genphy_driver[] = {
        .name           = "Generic PHY",
        .soft_reset     = genphy_soft_reset,
        .config_init    = genphy_config_init,
-       .features       = 0,
+       .features       = PHY_GBIT_FEATURES | SUPPORTED_MII |
+                         SUPPORTED_AUI | SUPPORTED_FIBRE |
+                         SUPPORTED_BNC,
        .config_aneg    = genphy_config_aneg,
        .aneg_done      = genphy_aneg_done,
        .read_status    = genphy_read_status,