net: phy: re-design phy_modes to be self-contained
authorFlorian Fainelli <f.fainelli@gmail.com>
Wed, 12 Feb 2014 01:27:39 +0000 (17:27 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 13 Feb 2014 00:08:20 +0000 (19:08 -0500)
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>
drivers/of/of_net.c
include/linux/phy.h

index a208a457558c758a47ac7c0a2c43ca6e6426c85c..84215c1929c400d53af1ce0c1938fedd87d045b5 100644 (file)
 #include <linux/phy.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
  * @np:        Pointer to the given device_node
@@ -49,8 +27,8 @@ int of_get_phy_mode(struct device_node *np)
        if (err < 0)
                return err;
 
-       for (i = 0; i < ARRAY_SIZE(phy_modes); i++)
-               if (!strcasecmp(pm, phy_modes[i]))
+       for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++)
+               if (!strcasecmp(pm, phy_modes(i)))
                        return i;
 
        return -ENODEV;
index eede6579cae7fb945de9e13eace124f1f2366152..ef7fa11311458ba507aa6d2ec7c05cfd1bb74005 100644 (file)
@@ -74,8 +74,50 @@ typedef enum {
        PHY_INTERFACE_MODE_RTBI,
        PHY_INTERFACE_MODE_SMII,
        PHY_INTERFACE_MODE_XGMII,
+       PHY_INTERFACE_MODE_MAX,
 } 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_STATE_TIME         1