aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/kirkwood/patches-3.10/0023-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/kirkwood/patches-3.10/0023-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch')
-rw-r--r--target/linux/kirkwood/patches-3.10/0023-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/target/linux/kirkwood/patches-3.10/0023-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch b/target/linux/kirkwood/patches-3.10/0023-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch
new file mode 100644
index 0000000000..71e1a398ae
--- /dev/null
+++ b/target/linux/kirkwood/patches-3.10/0023-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch
@@ -0,0 +1,60 @@
+From db22a1196162f981444d241f92d02e2e50d12ed7 Mon Sep 17 00:00:00 2001
+From: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+Date: Wed, 29 May 2013 09:32:46 +0000
+Subject: [PATCH 23/29] net: mv643xx_eth: use of_phy_connect if phy_node
+ present
+
+This connects to a phy node passed to the port device instead of probing
+the phy by phy_addr.
+
+Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/ethernet/marvell/mv643xx_eth.c | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
++++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
+@@ -60,6 +60,7 @@
+ #include <linux/types.h>
+ #include <linux/slab.h>
+ #include <linux/clk.h>
++#include <linux/of_mdio.h>
+
+ static char mv643xx_eth_driver_name[] = "mv643xx_eth";
+ static char mv643xx_eth_driver_version[] = "1.4";
+@@ -2715,17 +2716,27 @@ static int mv643xx_eth_probe(struct plat
+ netif_set_real_num_tx_queues(dev, mp->txq_count);
+ netif_set_real_num_rx_queues(dev, mp->rxq_count);
+
+- if (pd->phy_addr != MV643XX_ETH_PHY_NONE) {
++ err = 0;
++ if (pd->phy_node) {
++ mp->phy = of_phy_connect(mp->dev, pd->phy_node,
++ mv643xx_eth_adjust_link, 0,
++ PHY_INTERFACE_MODE_GMII);
++ if (!mp->phy)
++ err = -ENODEV;
++ } else if (pd->phy_addr != MV643XX_ETH_PHY_NONE) {
+ mp->phy = phy_scan(mp, pd->phy_addr);
+
+- if (IS_ERR(mp->phy)) {
++ if (IS_ERR(mp->phy))
+ err = PTR_ERR(mp->phy);
+- if (err == -ENODEV)
+- err = -EPROBE_DEFER;
+- goto out;
+- }
+- phy_init(mp, pd->speed, pd->duplex);
++ else
++ phy_init(mp, pd->speed, pd->duplex);
+ }
++ if (err == -ENODEV) {
++ err = -EPROBE_DEFER;
++ goto out;
++ }
++ if (err)
++ goto out;
+
+ SET_ETHTOOL_OPS(dev, &mv643xx_eth_ethtool_ops);
+