Thread (8 messages) 8 messages, 2 authors, 2011-07-06

[PATCH v2 1/3] dt/net: add helper function of_get_phy_mode

From: Grant Likely <hidden>
Date: 2011-07-05 17:35:12
Also in: linux-devicetree, netdev

On Tue, Jul 5, 2011 at 9:13 AM, Shawn Guo [off-list ref] wrote:
It adds the helper function of_get_phy_mode getting phy interface
from device tree.

Signed-off-by: Shawn Guo <redacted>
Cc: Grant Likely <redacted>
Acked-by: Grant Likely <redacted>

Dave, this should probably get merged via your tree since the rest of
this series depends on it.

g.
quoted hunk ↗ jump to hunk
---
?drivers/of/of_net.c ? ?| ? 43 +++++++++++++++++++++++++++++++++++++++++++
?include/linux/of_net.h | ? ?1 +
?2 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c
index 86f334a..cc117db 100644
--- a/drivers/of/of_net.c
+++ b/drivers/of/of_net.c
@@ -8,6 +8,49 @@
?#include <linux/etherdevice.h>
?#include <linux/kernel.h>
?#include <linux/of_net.h>
+#include <linux/phy.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_MII] ? ? ? ?= "mii",
+ ? ? ? [PHY_INTERFACE_MODE_GMII] ? ? ? = "gmii",
+ ? ? ? [PHY_INTERFACE_MODE_SGMII] ? ? ?= "sgmii",
+ ? ? ? [PHY_INTERFACE_MODE_TBI] ? ? ? ?= "tbi",
+ ? ? ? [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",
+};
+
+/**
+ * of_get_phy_mode - Get phy mode for given device_node
+ * @np: ? ? ? ?Pointer to the given device_node
+ *
+ * The function gets phy interface string from property 'phy-mode',
+ * and return its index in phy_modes table, or errno in error case.
+ */
+const int of_get_phy_mode(struct device_node *np)
+{
+ ? ? ? const char *pm;
+ ? ? ? int err, i;
+
+ ? ? ? err = of_property_read_string(np, "phy-mode", &pm);
+ ? ? ? if (err < 0)
+ ? ? ? ? ? ? ? return err;
+
+ ? ? ? for (i = 0; i < ARRAY_SIZE(phy_modes); i++)
+ ? ? ? ? ? ? ? if (!strcasecmp(pm, phy_modes[i]))
+ ? ? ? ? ? ? ? ? ? ? ? return i;
+
+ ? ? ? return -ENODEV;
+}
+EXPORT_SYMBOL_GPL(of_get_phy_mode);

?/**
?* Search the device tree for the best MAC address to use. ?'mac-address' is
diff --git a/include/linux/of_net.h b/include/linux/of_net.h
index e913081..f474641 100644
--- a/include/linux/of_net.h
+++ b/include/linux/of_net.h
@@ -9,6 +9,7 @@
?#ifdef CONFIG_OF_NET
?#include <linux/of.h>
+extern const int of_get_phy_mode(struct device_node *np);
?extern const void *of_get_mac_address(struct device_node *np);
?#endif

--
1.7.4.1



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help