On Tue, Jul 5, 2011 at 9:13 AM, Shawn Guo <[email protected]> wrote: > It adds the helper function of_get_phy_mode getting phy interface > from device tree. > > Signed-off-by: Shawn Guo <[email protected]> > Cc: Grant Likely <[email protected]>
Acked-by: Grant Likely <[email protected]> Dave, this should probably get merged via your tree since the rest of this series depends on it. g. > --- > 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. _______________________________________________ devicetree-discuss mailing list [email protected] https://lists.ozlabs.org/listinfo/devicetree-discuss
