mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 00:00:00 +00:00
of_mdio: add helper to deregister fixed-link PHYs
Add helper to deregister fixed-link PHYs registered using of_phy_register_fixed_link(). Convert the two drivers that care to deregister their fixed-link PHYs to use the new helper, but note that most drivers currently fail to do so. Signed-off-by: Johan Hovold <johan@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0d8f3c6715
commit
3f65047c85
@ -2459,20 +2459,8 @@ static void cpsw_remove_dt(struct platform_device *pdev)
|
||||
if (strcmp(slave_node->name, "slave"))
|
||||
continue;
|
||||
|
||||
if (of_phy_is_fixed_link(slave_node)) {
|
||||
struct phy_device *phydev;
|
||||
|
||||
phydev = of_phy_find_device(slave_node);
|
||||
if (phydev) {
|
||||
fixed_phy_unregister(phydev);
|
||||
/* Put references taken by
|
||||
* of_phy_find_device() and
|
||||
* of_phy_register_fixed_link().
|
||||
*/
|
||||
phy_device_free(phydev);
|
||||
phy_device_free(phydev);
|
||||
}
|
||||
}
|
||||
if (of_phy_is_fixed_link(slave_node))
|
||||
of_phy_deregister_fixed_link(slave_node);
|
||||
|
||||
of_node_put(slave_data->phy_node);
|
||||
|
||||
|
@ -490,3 +490,18 @@ int of_phy_register_fixed_link(struct device_node *np)
|
||||
return -ENODEV;
|
||||
}
|
||||
EXPORT_SYMBOL(of_phy_register_fixed_link);
|
||||
|
||||
void of_phy_deregister_fixed_link(struct device_node *np)
|
||||
{
|
||||
struct phy_device *phydev;
|
||||
|
||||
phydev = of_phy_find_device(np);
|
||||
if (!phydev)
|
||||
return;
|
||||
|
||||
fixed_phy_unregister(phydev);
|
||||
|
||||
put_device(&phydev->mdio.dev); /* of_phy_find_device() */
|
||||
phy_device_free(phydev); /* fixed_phy_register() */
|
||||
}
|
||||
EXPORT_SYMBOL(of_phy_deregister_fixed_link);
|
||||
|
@ -29,6 +29,7 @@ struct phy_device *of_phy_attach(struct net_device *dev,
|
||||
extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np);
|
||||
extern int of_mdio_parse_addr(struct device *dev, const struct device_node *np);
|
||||
extern int of_phy_register_fixed_link(struct device_node *np);
|
||||
extern void of_phy_deregister_fixed_link(struct device_node *np);
|
||||
extern bool of_phy_is_fixed_link(struct device_node *np);
|
||||
|
||||
#else /* CONFIG_OF */
|
||||
@ -83,6 +84,9 @@ static inline int of_phy_register_fixed_link(struct device_node *np)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
static inline void of_phy_deregister_fixed_link(struct device_node *np)
|
||||
{
|
||||
}
|
||||
static inline bool of_phy_is_fixed_link(struct device_node *np)
|
||||
{
|
||||
return false;
|
||||
|
@ -506,16 +506,8 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
|
||||
|
||||
void dsa_cpu_dsa_destroy(struct device_node *port_dn)
|
||||
{
|
||||
struct phy_device *phydev;
|
||||
|
||||
if (of_phy_is_fixed_link(port_dn)) {
|
||||
phydev = of_phy_find_device(port_dn);
|
||||
if (phydev) {
|
||||
fixed_phy_unregister(phydev);
|
||||
put_device(&phydev->mdio.dev);
|
||||
phy_device_free(phydev);
|
||||
}
|
||||
}
|
||||
if (of_phy_is_fixed_link(port_dn))
|
||||
of_phy_deregister_fixed_link(port_dn);
|
||||
}
|
||||
|
||||
static void dsa_switch_destroy(struct dsa_switch *ds)
|
||||
|
Loading…
x
Reference in New Issue
Block a user