From c74c8e6651e760c6b0a25aa229b9adde706a547b Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sun, 5 Apr 2015 16:07:39 -0600 Subject: dm: net: Adjust PHY interface to work with CONFIG_DM_ETH When driver model is used for Ethernet a few functions are passed a udevice instead of an eth_device. Also add a function to find a PHY type given its name. This will be used to decode the device tree node. Finally, put a phy_interface field in struct eth_pdata since this is an important part of the platform data for Ethernet. Signed-off-by: Simon Glass Acked-by: Joe Hershberger --- include/phy.h | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'include/phy.h') diff --git a/include/phy.h b/include/phy.h index d117fc1634..384dc2321e 100644 --- a/include/phy.h +++ b/include/phy.h @@ -51,7 +51,9 @@ typedef enum { PHY_INTERFACE_MODE_RGMII_TXID, PHY_INTERFACE_MODE_RTBI, PHY_INTERFACE_MODE_XGMII, - PHY_INTERFACE_MODE_NONE /* Must be last */ + PHY_INTERFACE_MODE_NONE, /* Must be last */ + + PHY_INTERFACE_MODE_COUNT, } phy_interface_t; static const char *phy_interface_strings[] = { @@ -142,7 +144,11 @@ struct phy_device { struct phy_driver *drv; void *priv; +#ifdef CONFIG_DM_ETH + struct udevice *dev; +#else struct eth_device *dev; +#endif /* forced speed & duplex (no autoneg) * partner speed & duplex & pause (autoneg) @@ -205,10 +211,17 @@ int phy_init(void); int phy_reset(struct phy_device *phydev); struct phy_device *phy_find_by_mask(struct mii_dev *bus, unsigned phy_mask, phy_interface_t interface); +#ifdef CONFIG_DM_ETH +void phy_connect_dev(struct phy_device *phydev, struct udevice *dev); +struct phy_device *phy_connect(struct mii_dev *bus, int addr, + struct udevice *dev, + phy_interface_t interface); +#else void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev); struct phy_device *phy_connect(struct mii_dev *bus, int addr, struct eth_device *dev, phy_interface_t interface); +#endif int phy_startup(struct phy_device *phydev); int phy_config(struct phy_device *phydev); int phy_shutdown(struct phy_device *phydev); @@ -242,6 +255,14 @@ int phy_vitesse_init(void); int board_phy_config(struct phy_device *phydev); +/** + * phy_get_interface_by_name() - Look up a PHY interface name + * + * @str: PHY interface name, e.g. "mii" + * @return PHY_INTERFACE_MODE_... value, or -1 if not found + */ +int phy_get_interface_by_name(const char *str); + /* PHY UIDs for various PHYs that are referenced in external code */ #define PHY_UID_CS4340 0x13e51002 #define PHY_UID_TN2020 0x00a19410 -- cgit v1.2.1 From 5707d5ffd42a45088f433a2514d1320a6491697b Mon Sep 17 00:00:00 2001 From: Shengzhou Liu Date: Tue, 7 Apr 2015 18:46:32 +0800 Subject: net/phy: fixup for get_phy_id commit 3c6928fd7b0f84 "net: phy: fix warnings with W=1" caused some PHYs(e.g. CS4315/CS4340) not working. This patch fixes the warning and make those special PHYs working as well. Signed-off-by: Shengzhou Liu --- include/phy.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include/phy.h') diff --git a/include/phy.h b/include/phy.h index 384dc2321e..3f826b66f7 100644 --- a/include/phy.h +++ b/include/phy.h @@ -254,6 +254,7 @@ int phy_teranetics_init(void); int phy_vitesse_init(void); int board_phy_config(struct phy_device *phydev); +int get_phy_id(struct mii_dev *bus, int addr, int devad, u32 *phy_id); /** * phy_get_interface_by_name() - Look up a PHY interface name -- cgit v1.2.1