diff options
Diffstat (limited to 'drivers/of/of_mdio.c')
| -rw-r--r-- | drivers/of/of_mdio.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index 875b7b6f0d2a..5b3c24f3cde5 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c | |||
| @@ -24,7 +24,11 @@ MODULE_LICENSE("GPL"); | |||
| 24 | 24 | ||
| 25 | static void of_set_phy_supported(struct phy_device *phydev, u32 max_speed) | 25 | static void of_set_phy_supported(struct phy_device *phydev, u32 max_speed) |
| 26 | { | 26 | { |
| 27 | phydev->supported |= PHY_DEFAULT_FEATURES; | 27 | /* The default values for phydev->supported are provided by the PHY |
| 28 | * driver "features" member, we want to reset to sane defaults fist | ||
| 29 | * before supporting higher speeds. | ||
| 30 | */ | ||
| 31 | phydev->supported &= PHY_DEFAULT_FEATURES; | ||
| 28 | 32 | ||
| 29 | switch (max_speed) { | 33 | switch (max_speed) { |
| 30 | default: | 34 | default: |
| @@ -44,7 +48,7 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *chi | |||
| 44 | { | 48 | { |
| 45 | struct phy_device *phy; | 49 | struct phy_device *phy; |
| 46 | bool is_c45; | 50 | bool is_c45; |
| 47 | int rc, prev_irq; | 51 | int rc; |
| 48 | u32 max_speed = 0; | 52 | u32 max_speed = 0; |
| 49 | 53 | ||
| 50 | is_c45 = of_device_is_compatible(child, | 54 | is_c45 = of_device_is_compatible(child, |
| @@ -54,12 +58,14 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *chi | |||
| 54 | if (!phy || IS_ERR(phy)) | 58 | if (!phy || IS_ERR(phy)) |
| 55 | return 1; | 59 | return 1; |
| 56 | 60 | ||
| 57 | if (mdio->irq) { | 61 | rc = irq_of_parse_and_map(child, 0); |
| 58 | prev_irq = mdio->irq[addr]; | 62 | if (rc > 0) { |
| 59 | mdio->irq[addr] = | 63 | phy->irq = rc; |
| 60 | irq_of_parse_and_map(child, 0); | 64 | if (mdio->irq) |
| 61 | if (!mdio->irq[addr]) | 65 | mdio->irq[addr] = rc; |
| 62 | mdio->irq[addr] = prev_irq; | 66 | } else { |
| 67 | if (mdio->irq) | ||
| 68 | phy->irq = mdio->irq[addr]; | ||
| 63 | } | 69 | } |
| 64 | 70 | ||
| 65 | /* Associate the OF node with the device structure so it | 71 | /* Associate the OF node with the device structure so it |
