diff options
Diffstat (limited to 'target/linux/kirkwood/patches-3.10/0021-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch')
-rw-r--r-- | target/linux/kirkwood/patches-3.10/0021-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/target/linux/kirkwood/patches-3.10/0021-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch b/target/linux/kirkwood/patches-3.10/0021-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch new file mode 100644 index 0000000000..2a46de0165 --- /dev/null +++ b/target/linux/kirkwood/patches-3.10/0021-net-mv643xx_eth-use-of_phy_connect-if-phy_node-prese.patch @@ -0,0 +1,64 @@ +From 04417da7ac6d1a2a38d4406d899ab92bf6e488e1 Mon Sep 17 00:00:00 2001 +From: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> +Date: Wed, 29 May 2013 21:32:46 +0200 +Subject: [PATCH 21/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> +--- + drivers/net/ethernet/marvell/mv643xx_eth.c | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c +index 0a8c064..946033b 100644 +--- 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 platform_device *pdev) + 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); + +-- +1.8.4.rc1 + |