brcm47xx: b44: fix error handling for dummy phy creation
[openwrt.git] / target / linux / brcm47xx / patches-3.10 / 208-b44-add-dummy-phy-device-if-we-do-not-find-any.patch
index fd51a3f..db6e5e3 100644 (file)
@@ -9,23 +9,21 @@ Subject: [PATCH 9/9] b44: add dummy phy device if we do not find any
 
 --- a/drivers/net/ethernet/broadcom/b44.c
 +++ b/drivers/net/ethernet/broadcom/b44.c
 
 --- a/drivers/net/ethernet/broadcom/b44.c
 +++ b/drivers/net/ethernet/broadcom/b44.c
-@@ -2222,6 +2222,8 @@ static int b44_register_phy_one(struct b
+@@ -2222,6 +2222,7 @@ static int b44_register_phy_one(struct b
        struct ssb_device *sdev = bp->sdev;
        struct phy_device *phydev;
        int err;
        struct ssb_device *sdev = bp->sdev;
        struct phy_device *phydev;
        int err;
-+      bool dummy_phy = false;
 +      struct phy_c45_device_ids c45_ids = {0};
  
        mii_bus = mdiobus_alloc();
        if (!mii_bus) {
 +      struct phy_c45_device_ids c45_ids = {0};
  
        mii_bus = mdiobus_alloc();
        if (!mii_bus) {
-@@ -2256,9 +2258,21 @@ static int b44_register_phy_one(struct b
+@@ -2256,9 +2257,20 @@ static int b44_register_phy_one(struct b
  
        phydev = bp->mii_bus->phy_map[bp->phy_addr];
        if (!phydev) {
 -              dev_err(sdev->dev, "could not find PHY at %i\n", bp->phy_addr);
 -              err = -ENODEV;
 -              goto err_out_mdiobus_unregister;
  
        phydev = bp->mii_bus->phy_map[bp->phy_addr];
        if (!phydev) {
 -              dev_err(sdev->dev, "could not find PHY at %i\n", bp->phy_addr);
 -              err = -ENODEV;
 -              goto err_out_mdiobus_unregister;
-+              dummy_phy = true;
 +              dev_info(sdev->dev, "could not find PHY at %i, create dummy one\n",
 +                       bp->phy_addr);
 +
 +              dev_info(sdev->dev, "could not find PHY at %i, create dummy one\n",
 +                       bp->phy_addr);
 +
@@ -38,27 +36,8 @@ Subject: [PATCH 9/9] b44: add dummy phy device if we do not find any
 +              err = phy_device_register(phydev);
 +              if (err) {
 +                      dev_err(sdev->dev, "failed to register MII bus\n");
 +              err = phy_device_register(phydev);
 +              if (err) {
 +                      dev_err(sdev->dev, "failed to register MII bus\n");
-+                      goto err_out_phy_free;
++                      goto err_out_mdiobus_unregister;
 +              }
        }
  
        err = phy_connect_direct(bp->dev, phydev, &b44_adjust_link,
 +              }
        }
  
        err = phy_connect_direct(bp->dev, phydev, &b44_adjust_link,
-@@ -2266,7 +2280,7 @@ static int b44_register_phy_one(struct b
-       if (err < 0) {
-               dev_err(sdev->dev, "could not attach PHY at %i\n",
-                       bp->phy_addr);
--              goto err_out_mdiobus_unregister;
-+              goto err_out_phy_free;
-       }
-       /* mask with MAC supported features */
-@@ -2288,6 +2302,9 @@ static int b44_register_phy_one(struct b
-       return 0;
-+err_out_phy_free:
-+      if (phydev && dummy_phy)
-+              phy_device_free(phydev);
- err_out_mdiobus_unregister:
-       mdiobus_unregister(mii_bus);