of_mdio: Abstract a general interface for phy connect
Abstract a general interface "of_phy_get_and_connect" for PHY connect. User will have no bother with getting "phy-mode" and "phy-handle" any more. Suggested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Dongpo Li <lidongpo@hisilicon.com> Reviewed-by: Jiancheng Xue <xuejiancheng@hisilicon.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
4960e4b1e6
Коммит
b786241253
|
@ -19,6 +19,7 @@
|
|||
#include <linux/of_gpio.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_mdio.h>
|
||||
#include <linux/of_net.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
MODULE_AUTHOR("Grant Likely <grant.likely@secretlab.ca>");
|
||||
|
@ -331,6 +332,41 @@ struct phy_device *of_phy_connect(struct net_device *dev,
|
|||
}
|
||||
EXPORT_SYMBOL(of_phy_connect);
|
||||
|
||||
/**
|
||||
* of_phy_get_and_connect
|
||||
* - Get phy node and connect to the phy described in the device tree
|
||||
* @dev: pointer to net_device claiming the phy
|
||||
* @np: Pointer to device tree node for the net_device claiming the phy
|
||||
* @hndlr: Link state callback for the network device
|
||||
*
|
||||
* If successful, returns a pointer to the phy_device with the embedded
|
||||
* struct device refcount incremented by one, or NULL on failure. The
|
||||
* refcount must be dropped by calling phy_disconnect() or phy_detach().
|
||||
*/
|
||||
struct phy_device *of_phy_get_and_connect(struct net_device *dev,
|
||||
struct device_node *np,
|
||||
void (*hndlr)(struct net_device *))
|
||||
{
|
||||
phy_interface_t iface;
|
||||
struct device_node *phy_np;
|
||||
struct phy_device *phy;
|
||||
|
||||
iface = of_get_phy_mode(np);
|
||||
if (iface < 0)
|
||||
return NULL;
|
||||
|
||||
phy_np = of_parse_phandle(np, "phy-handle", 0);
|
||||
if (!phy_np)
|
||||
return NULL;
|
||||
|
||||
phy = of_phy_connect(dev, phy_np, hndlr, 0, iface);
|
||||
|
||||
of_node_put(phy_np);
|
||||
|
||||
return phy;
|
||||
}
|
||||
EXPORT_SYMBOL(of_phy_get_and_connect);
|
||||
|
||||
/**
|
||||
* of_phy_attach - Attach to a PHY without starting the state machine
|
||||
* @dev: pointer to net_device claiming the phy
|
||||
|
|
|
@ -19,6 +19,9 @@ extern struct phy_device *of_phy_connect(struct net_device *dev,
|
|||
struct device_node *phy_np,
|
||||
void (*hndlr)(struct net_device *),
|
||||
u32 flags, phy_interface_t iface);
|
||||
extern struct phy_device *
|
||||
of_phy_get_and_connect(struct net_device *dev, struct device_node *np,
|
||||
void (*hndlr)(struct net_device *));
|
||||
struct phy_device *of_phy_attach(struct net_device *dev,
|
||||
struct device_node *phy_np, u32 flags,
|
||||
phy_interface_t iface);
|
||||
|
@ -52,6 +55,13 @@ static inline struct phy_device *of_phy_connect(struct net_device *dev,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct phy_device *
|
||||
of_phy_get_and_connect(struct net_device *dev, struct device_node *np,
|
||||
void (*hndlr)(struct net_device *))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct phy_device *of_phy_attach(struct net_device *dev,
|
||||
struct device_node *phy_np,
|
||||
u32 flags, phy_interface_t iface)
|
||||
|
|
Загрузка…
Ссылка в новой задаче