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>
This commit is contained in:

committed by
David S. Miller

parent
cdcc520d7b
commit
7c32f470f4
38
include/linux/phy_fixed.h
Normal file
38
include/linux/phy_fixed.h
Normal file
@@ -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 */
|
Reference in New Issue
Block a user