| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- Index: linux-2.6.23.17/drivers/net/phy/fixed.c
- ===================================================================
- --- linux-2.6.23.17.orig/drivers/net/phy/fixed.c
- +++ linux-2.6.23.17/drivers/net/phy/fixed.c
- @@ -189,6 +189,19 @@ static struct phy_driver fixed_mdio_driv
- .driver = { .owner = THIS_MODULE,},
- };
-
- +static void fixed_mdio_release (struct device * dev)
- +{
- + struct phy_device *phydev = container_of(dev, struct phy_device, dev);
- + struct mii_bus *bus = phydev->bus;
- + struct fixed_info *fixed = bus->priv;
- +
- + kfree(phydev);
- + kfree(bus->dev);
- + kfree(bus);
- + kfree(fixed->regs);
- + kfree(fixed);
- +}
- +
- /*-----------------------------------------------------------------------------
- * This func is used to create all the necessary stuff, bind
- * the fixed phy driver and register all it on the mdio_bus_type.
- @@ -224,6 +237,12 @@ static int fixed_mdio_register_device(in
- }
-
- fixed->regs = kzalloc(MII_REGS_NUM*sizeof(int), GFP_KERNEL);
- + if (NULL == fixed->regs) {
- + kfree(dev);
- + kfree(new_bus);
- + kfree(fixed);
- + return -ENOMEM;
- + }
- fixed->regs_num = MII_REGS_NUM;
- fixed->phy_status.speed = speed;
- fixed->phy_status.duplex = duplex;
- @@ -252,8 +271,11 @@ static int fixed_mdio_register_device(in
- fixed->phydev = phydev;
-
- if(NULL == phydev) {
- - err = -ENOMEM;
- - goto device_create_fail;
- + kfree(dev);
- + kfree(new_bus);
- + kfree(fixed->regs);
- + kfree(fixed);
- + return -ENOMEM;
- }
-
- phydev->irq = PHY_IGNORE_INTERRUPT;
- @@ -265,8 +287,33 @@ static int fixed_mdio_register_device(in
- else
- snprintf(phydev->dev.bus_id, BUS_ID_SIZE,
- "fixed@%d:%d", speed, duplex);
- +
- phydev->bus = new_bus;
-
- +#if 1
- + phydev->dev.driver = &fixed_mdio_driver.driver;
- + phydev->dev.release = fixed_mdio_release;
- +
- + err = phydev->dev.driver->probe(&phydev->dev);
- + if(err < 0) {
- + printk(KERN_ERR "Phy %s: problems with fixed driver\n",
- + phydev->dev.bus_id);
- + kfree(phydev);
- + kfree(dev);
- + kfree(new_bus);
- + kfree(fixed->regs);
- + kfree(fixed);
- + return err;
- + }
- +
- + err = device_register(&phydev->dev);
- + if(err) {
- + printk(KERN_ERR "Phy %s failed to register\n",
- + phydev->dev.bus_id);
- + }
- +
- + return 0;
- +#else
- err = device_register(&phydev->dev);
- if(err) {
- printk(KERN_ERR "Phy %s failed to register\n",
- @@ -303,6 +350,7 @@ device_create_fail:
- kfree(fixed);
-
- return err;
- +#endif
- }
- #endif
-
|