net: phy: re-design phy_modes to be self-contained
of_get_phy_mode() uses a local array to map phy_interface_t values from include/linux/net/phy.h to a string which is read from the 'phy-mode' or 'phy-connection-type' property. In preparation for exposing the PHY interface mode through sysfs, perform the following: - mode phy_modes from drivers/of/of_net.c to include/linux/phy.h such that it is right below the phy_interface_t enum - make it a static inline function returning the string such that we can use it by just including include/linux/net/phy.h - add a PHY_INTERFACE_MODE_MAX enum value to guard the iteration in of_get_phy_mode() Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ad033506f5
commit
8a2fe56e88
@ -11,28 +11,6 @@
|
|||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
||||||
/**
|
|
||||||
* It maps 'enum phy_interface_t' found in include/linux/phy.h
|
|
||||||
* into the device tree binding of 'phy-mode', so that Ethernet
|
|
||||||
* device driver can get phy interface from device tree.
|
|
||||||
*/
|
|
||||||
static const char *phy_modes[] = {
|
|
||||||
[PHY_INTERFACE_MODE_NA] = "",
|
|
||||||
[PHY_INTERFACE_MODE_MII] = "mii",
|
|
||||||
[PHY_INTERFACE_MODE_GMII] = "gmii",
|
|
||||||
[PHY_INTERFACE_MODE_SGMII] = "sgmii",
|
|
||||||
[PHY_INTERFACE_MODE_TBI] = "tbi",
|
|
||||||
[PHY_INTERFACE_MODE_REVMII] = "rev-mii",
|
|
||||||
[PHY_INTERFACE_MODE_RMII] = "rmii",
|
|
||||||
[PHY_INTERFACE_MODE_RGMII] = "rgmii",
|
|
||||||
[PHY_INTERFACE_MODE_RGMII_ID] = "rgmii-id",
|
|
||||||
[PHY_INTERFACE_MODE_RGMII_RXID] = "rgmii-rxid",
|
|
||||||
[PHY_INTERFACE_MODE_RGMII_TXID] = "rgmii-txid",
|
|
||||||
[PHY_INTERFACE_MODE_RTBI] = "rtbi",
|
|
||||||
[PHY_INTERFACE_MODE_SMII] = "smii",
|
|
||||||
[PHY_INTERFACE_MODE_XGMII] = "xgmii",
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_get_phy_mode - Get phy mode for given device_node
|
* of_get_phy_mode - Get phy mode for given device_node
|
||||||
* @np: Pointer to the given device_node
|
* @np: Pointer to the given device_node
|
||||||
@ -49,8 +27,8 @@ int of_get_phy_mode(struct device_node *np)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(phy_modes); i++)
|
for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++)
|
||||||
if (!strcasecmp(pm, phy_modes[i]))
|
if (!strcasecmp(pm, phy_modes(i)))
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -74,8 +74,50 @@ typedef enum {
|
|||||||
PHY_INTERFACE_MODE_RTBI,
|
PHY_INTERFACE_MODE_RTBI,
|
||||||
PHY_INTERFACE_MODE_SMII,
|
PHY_INTERFACE_MODE_SMII,
|
||||||
PHY_INTERFACE_MODE_XGMII,
|
PHY_INTERFACE_MODE_XGMII,
|
||||||
|
PHY_INTERFACE_MODE_MAX,
|
||||||
} phy_interface_t;
|
} phy_interface_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It maps 'enum phy_interface_t' found in include/linux/phy.h
|
||||||
|
* into the device tree binding of 'phy-mode', so that Ethernet
|
||||||
|
* device driver can get phy interface from device tree.
|
||||||
|
*/
|
||||||
|
static inline const char *phy_modes(phy_interface_t interface)
|
||||||
|
{
|
||||||
|
switch (interface) {
|
||||||
|
case PHY_INTERFACE_MODE_NA:
|
||||||
|
return "";
|
||||||
|
case PHY_INTERFACE_MODE_MII:
|
||||||
|
return "mii";
|
||||||
|
case PHY_INTERFACE_MODE_GMII:
|
||||||
|
return "gmii";
|
||||||
|
case PHY_INTERFACE_MODE_SGMII:
|
||||||
|
return "sgmii";
|
||||||
|
case PHY_INTERFACE_MODE_TBI:
|
||||||
|
return "tbi";
|
||||||
|
case PHY_INTERFACE_MODE_REVMII:
|
||||||
|
return "rev-mii";
|
||||||
|
case PHY_INTERFACE_MODE_RMII:
|
||||||
|
return "rmii";
|
||||||
|
case PHY_INTERFACE_MODE_RGMII:
|
||||||
|
return "rgmii";
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_ID:
|
||||||
|
return "rgmii-id";
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_RXID:
|
||||||
|
return "rgmii-rxid";
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_TXID:
|
||||||
|
return "rgmii-txid";
|
||||||
|
case PHY_INTERFACE_MODE_RTBI:
|
||||||
|
return "rtbi";
|
||||||
|
case PHY_INTERFACE_MODE_SMII:
|
||||||
|
return "smii";
|
||||||
|
case PHY_INTERFACE_MODE_XGMII:
|
||||||
|
return "xgmii";
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define PHY_INIT_TIMEOUT 100000
|
#define PHY_INIT_TIMEOUT 100000
|
||||||
#define PHY_STATE_TIME 1
|
#define PHY_STATE_TIME 1
|
||||||
|
Reference in New Issue
Block a user