summaryrefslogtreecommitdiffstats
path: root/target/linux/mcs814x
diff options
context:
space:
mode:
authorFlorian Fainelli <florian@openwrt.org>2013-03-16 22:25:41 +0000
committerFlorian Fainelli <florian@openwrt.org>2013-03-16 22:25:41 +0000
commit18908139f3811f4d7012fbc87aef951eb993775c (patch)
tree7afb8719e9d3143016eaff77dfcaa907158c6d6f /target/linux/mcs814x
parent541344b93e0a5085611d5e67eb66d329ee8ffe60 (diff)
downloadmaster-31e0f0ae-18908139f3811f4d7012fbc87aef951eb993775c.tar.gz
master-31e0f0ae-18908139f3811f4d7012fbc87aef951eb993775c.tar.bz2
master-31e0f0ae-18908139f3811f4d7012fbc87aef951eb993775c.zip
mcs814x: use the standard device tree binding to represent a PHY node
Signed-off-by: Florian Fainelli <florian@openwrt.org> SVN-Revision: 36059
Diffstat (limited to 'target/linux/mcs814x')
-rw-r--r--target/linux/mcs814x/files-3.3/arch/arm/boot/dts/dlan-usb-extender.dts8
-rw-r--r--target/linux/mcs814x/files-3.3/arch/arm/boot/dts/mcs8140.dtsi3
-rw-r--r--target/linux/mcs814x/files-3.3/arch/arm/boot/dts/rbt-832.dts6
-rw-r--r--target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c24
4 files changed, 38 insertions, 3 deletions
diff --git a/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/dlan-usb-extender.dts b/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/dlan-usb-extender.dts
index c8611deab7..0c85b94c0a 100644
--- a/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/dlan-usb-extender.dts
+++ b/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/dlan-usb-extender.dts
@@ -19,6 +19,14 @@
ahb {
vci {
+ eth0: ethernet@40084000 {
+ phy = <&phy0>;
+ phy-mode = "mii";
+
+ phy0: ethernet-phy@0 {
+ reg = <8>;
+ };
+ };
adc {
sdram: memory@0,0 {
diff --git a/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/mcs8140.dtsi b/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/mcs8140.dtsi
index ad52d9277b..c52107c7db 100644
--- a/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/mcs8140.dtsi
+++ b/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/mcs8140.dtsi
@@ -37,6 +37,9 @@
ranges;
eth0: ethernet@40084000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
compatible = "moschip,nuport-mac";
reg = <0x40084000 0xd8 // mac
0x40080000 0x58>; // dma channels
diff --git a/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/rbt-832.dts b/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/rbt-832.dts
index cc7fab8ed1..9949c8ecf3 100644
--- a/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/rbt-832.dts
+++ b/target/linux/mcs814x/files-3.3/arch/arm/boot/dts/rbt-832.dts
@@ -21,6 +21,12 @@
vci {
eth0: ethernet@40084000 {
nuport-mac,link-activity = <0x01>;
+ phy = <&phy0>;
+ phy-mode = "mii";
+
+ phy0: ethernet-phy@0 {
+ reg = <1>;
+ };
};
adc {
diff --git a/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c b/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c
index 2dc2375159..511d261d0d 100644
--- a/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c
+++ b/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c
@@ -19,6 +19,8 @@
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/of.h>
+#include <linux/of_mdio.h>
+#include <linux/of_net.h>
#include <linux/irq.h>
#include <linux/err.h>
#include <linux/phy.h>
@@ -168,6 +170,8 @@ struct nuport_mac_priv {
struct platform_device *pdev;
struct mii_bus *mii_bus;
struct phy_device *phydev;
+ struct device_node *phy_node;
+ phy_interface_t phy_interface;
int old_link;
int old_duplex;
u32 msg_level;
@@ -898,9 +902,9 @@ static int nuport_mac_mii_probe(struct net_device *dev)
goto out;
}
- phydev = phy_connect(dev, dev_name(&phydev->dev),
+ phydev = of_phy_connect(dev, priv->phy_node,
nuport_mac_adjust_link, 0,
- PHY_INTERFACE_MODE_MII);
+ priv->phy_interface);
if (IS_ERR(phydev)) {
netdev_err(dev, "could not attach PHY\n");
ret = PTR_ERR(phydev);
@@ -1082,6 +1086,20 @@ static int __init nuport_mac_probe(struct platform_device *pdev)
netif_napi_add(dev, &priv->napi, nuport_mac_poll, 64);
+ priv->phy_node = of_parse_phandle(pdev->dev.of_node, "phy", 0);
+ if (!priv->phy_node) {
+ dev_err(&pdev->dev, "no associated PHY\n");
+ ret = -ENODEV;
+ goto out;
+ }
+
+ priv->phy_interface = of_get_phy_mode(pdev->dev.of_node);
+ if (priv->phy_interface < 0) {
+ dev_err(&pdev->dev, "invalid PHY mode\n");
+ ret = -EINVAL;
+ goto out;
+ }
+
priv->mii_bus = mdiobus_alloc();
if (!priv->mii_bus) {
dev_err(&pdev->dev, "mii bus allocation failed\n");
@@ -1106,7 +1124,7 @@ static int __init nuport_mac_probe(struct platform_device *pdev)
for (i = 0; i < PHY_MAX_ADDR; i++)
priv->mii_bus->irq[i] = PHY_IGNORE_INTERRUPT;
- ret = mdiobus_register(priv->mii_bus);
+ ret = of_mdiobus_register(priv->mii_bus, pdev->dev.of_node);
if (ret) {
dev_err(&pdev->dev, "failed to register mii_bus\n");
goto out_mdio_irq;