]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/phy/mdio_bus.c
Marvell PHY m88e1111 driver fix
[linux-2.6-omap-h63xx.git] / drivers / net / phy / mdio_bus.c
index fc2f0e695a13a572a2309003243afe3ca685c6b1..963630c65ca940d9dfc59ed57370c54dbfed7847 100644 (file)
@@ -49,13 +49,13 @@ int mdiobus_register(struct mii_bus *bus)
        int i;
        int err = 0;
 
-       spin_lock_init(&bus->mdio_lock);
-
        if (NULL == bus || NULL == bus->name ||
                        NULL == bus->read ||
                        NULL == bus->write)
                return -EINVAL;
 
+       mutex_init(&bus->mdio_lock);
+
        if (bus->reset)
                bus->reset(bus);
 
@@ -91,9 +91,12 @@ int mdiobus_register(struct mii_bus *bus)
 
                        err = device_register(&phydev->dev);
 
-                       if (err)
+                       if (err) {
                                printk(KERN_ERR "phy %d failed to register\n",
                                                i);
+                               phy_device_free(phydev);
+                               phydev = NULL;
+                       }
                }
 
                bus->phy_map[i] = phydev;
@@ -110,10 +113,8 @@ void mdiobus_unregister(struct mii_bus *bus)
        int i;
 
        for (i = 0; i < PHY_MAX_ADDR; i++) {
-               if (bus->phy_map[i]) {
+               if (bus->phy_map[i])
                        device_unregister(&bus->phy_map[i]->dev);
-                       kfree(bus->phy_map[i]);
-               }
        }
 }
 EXPORT_SYMBOL(mdiobus_unregister);