?? Wed, 21 Jun 2006 22:48:27 +0200 Michael Buesch <mb at bu3sch.de> ????????:
> On Wednesday 21 June 2006 18:09, Vitaly Bordug wrote: > > > +static int fixed_mdio_update_regs(struct fixed_info *fixed) > > +{ > > + u16 *regs = fixed->regs; > > + u16 bmsr = 0; > > + u16 bmcr = 0; > > + > > + if(!regs) { > > + printk(KERN_ERR "%s: regs not set up", > > __FUNCTION__); > > + return -1; > > -EINVAL perhaps? > OK > > +static int fixed_mdio_register_device(int number, int speed, int > > duplex) +{ > > + struct mii_bus *new_bus; > > + struct fixed_info *fixed; > > + struct phy_device *phydev; > > + int err = 0; > > + > > + struct device* dev = kzalloc(sizeof(struct device), > > GFP_KERNEL); + > > + if (NULL == dev) > > + return -EINVAL; > > -ENOMEM here. OK [snip] > > + /* > > + the mdio bus has phy_id match... In order not to do it > > + artificially, we are binding the driver here by hand; > > + it will be the same > > + for all the fixed phys anyway. > > + */ > > + down_write(&phydev->dev.bus->subsys.rwsem); > > + > > + phydev->dev.driver = &fixed_mdio_driver.driver; > > + > > + err = phydev->dev.driver->probe(&phydev->dev); > > + if(err < 0) { > > + printk(KERN_ERR "Phy %s: problems with fixed > > driver\n", > > + phydev->dev.bus_id); > > + up_write(&phydev->dev.bus->subsys.rwsem); > > + goto bus_register_fail; > > Probably need some additional error unwinding code. > Of doesn't device_register() have to be reverted? > What about phy_device_create()? > Definitely. Moreover, as I noticed now, phy_driver_register also has to be error-handled and such. Will fix/update and resubmit. Thanks for the feedback. -- Sincerely, Vitaly