diff options
| author | Vitaly Bordug <vitb@kernel.crashing.org> | 2007-08-10 14:05:16 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 16:53:50 -0700 | 
| commit | 7c32f470f4f6a0fdc6944cefcd22f288e59a0ae2 (patch) | |
| tree | 747a4c855e6b6287421eb854496d23073315ba49 /include/linux/phy_fixed.h | |
| parent | cdcc520d7b73445c3552a70786afed9a2b22c010 (diff) | |
| download | olio-linux-3.10-7c32f470f4f6a0fdc6944cefcd22f288e59a0ae2.tar.xz olio-linux-3.10-7c32f470f4f6a0fdc6944cefcd22f288e59a0ae2.zip  | |
PHY fixed driver: rework release path and update phy_id notation
device_bind_driver() error code returning has been fixed.  release()
function has been written, so that to free resources in correct way; the
release path is now clean.
Before the rework, it used to cause
 Device 'fixed@100:1' does not have a release() function, it is broken
 and must be fixed.
 BUG: at drivers/base/core.c:104 device_release()
 Call Trace:
  [<ffffffff802ec380>] kobject_cleanup+0x53/0x7e
  [<ffffffff802ec3ab>] kobject_release+0x0/0x9
  [<ffffffff802ecf3f>] kref_put+0x74/0x81
  [<ffffffff8035493b>] fixed_mdio_register_device+0x230/0x265
  [<ffffffff80564d31>] fixed_init+0x1f/0x35
  [<ffffffff802071a4>] init+0x147/0x2fb
  [<ffffffff80223b6e>] schedule_tail+0x36/0x92
  [<ffffffff8020a678>] child_rip+0xa/0x12
  [<ffffffff80311714>] acpi_ds_init_one_object+0x0/0x83
  [<ffffffff8020705d>] init+0x0/0x2fb
  [<ffffffff8020a66e>] child_rip+0x0/0x12
Also changed the notation of the fixed phy definition on
mdio bus to the form of <speed>+<duplex> to make it able to be used by
gianfar and ucc_geth that define phy_id strictly as "%d:%d" and cleaned up
the whitespace issues.
Signed-off-by: Vitaly Bordug <vitb@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'include/linux/phy_fixed.h')
| -rw-r--r-- | include/linux/phy_fixed.h | 38 | 
1 files changed, 38 insertions, 0 deletions
diff --git a/include/linux/phy_fixed.h b/include/linux/phy_fixed.h new file mode 100644 index 00000000000..04ba70d49fb --- /dev/null +++ b/include/linux/phy_fixed.h @@ -0,0 +1,38 @@ +#ifndef __PHY_FIXED_H +#define __PHY_FIXED_H + +#define MII_REGS_NUM	29 + +/* max number of virtual phy stuff */ +#define MAX_PHY_AMNT	10 +/* +    The idea is to emulate normal phy behavior by responding with +    pre-defined values to mii BMCR read, so that read_status hook could +    take all the needed info. +*/ + +struct fixed_phy_status { +	u8 link; +	u16 speed; +	u8 duplex; +}; + +/*----------------------------------------------------------------------------- + *  Private information hoder for mii_bus + *-----------------------------------------------------------------------------*/ +struct fixed_info { +	u16 *regs; +	u8 regs_num; +	struct fixed_phy_status phy_status; +	struct phy_device *phydev;	/* pointer to the container */ +	/* link & speed cb */ +	int (*link_update) (struct net_device *, struct fixed_phy_status *); + +}; + + +int fixed_mdio_set_link_update(struct phy_device *, +       int (*link_update) (struct net_device *, struct fixed_phy_status *)); +struct fixed_info *fixed_mdio_get_phydev (int phydev_ind); + +#endif /* __PHY_FIXED_H */  |