diff options
author | Francesco Virlinzi <francesco.virlinzi@st.com> | 2012-04-18 15:48:20 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-19 20:08:49 -0400 |
commit | 4bfcbd7abce2d9b56f10d455ffeab00584cd8045 (patch) | |
tree | 2817a3a5f038b6af9e373c8a8dfe2c0ad68aa997 /drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |
parent | 3256251f9850d00c8e4a4fd82440092bb0f1fd7d (diff) |
stmmac: Move the mdio_register/_unregister in probe/remove
This patch moves the mdio_register/_unregister in probe/remove
functions and this also is required when hibernation on disk
is done.
Signed-off-by: Francesco Virlinzi <francesco.virlinzi@st,com>
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st,com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/stmicro/stmmac/stmmac_main.c')
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index a64f0d422e76..9ecd6cf9815a 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -933,24 +933,10 @@ static int stmmac_open(struct net_device *dev) | |||
933 | struct stmmac_priv *priv = netdev_priv(dev); | 933 | struct stmmac_priv *priv = netdev_priv(dev); |
934 | int ret; | 934 | int ret; |
935 | 935 | ||
936 | stmmac_clk_enable(priv); | ||
937 | |||
938 | stmmac_check_ether_addr(priv); | ||
939 | |||
940 | /* MDIO bus Registration */ | ||
941 | ret = stmmac_mdio_register(dev); | ||
942 | if (ret < 0) { | ||
943 | pr_debug("%s: MDIO bus (id: %d) registration failed", | ||
944 | __func__, priv->plat->bus_id); | ||
945 | goto open_clk_dis; | ||
946 | } | ||
947 | |||
948 | #ifdef CONFIG_STMMAC_TIMER | 936 | #ifdef CONFIG_STMMAC_TIMER |
949 | priv->tm = kzalloc(sizeof(struct stmmac_timer *), GFP_KERNEL); | 937 | priv->tm = kzalloc(sizeof(struct stmmac_timer *), GFP_KERNEL); |
950 | if (unlikely(priv->tm == NULL)) { | 938 | if (unlikely(priv->tm == NULL)) |
951 | ret = -ENOMEM; | 939 | return -ENOMEM; |
952 | goto open_clk_dis; | ||
953 | } | ||
954 | 940 | ||
955 | priv->tm->freq = tmrate; | 941 | priv->tm->freq = tmrate; |
956 | 942 | ||
@@ -964,6 +950,10 @@ static int stmmac_open(struct net_device *dev) | |||
964 | } else | 950 | } else |
965 | priv->tm->enable = 1; | 951 | priv->tm->enable = 1; |
966 | #endif | 952 | #endif |
953 | stmmac_clk_enable(priv); | ||
954 | |||
955 | stmmac_check_ether_addr(priv); | ||
956 | |||
967 | ret = stmmac_init_phy(dev); | 957 | ret = stmmac_init_phy(dev); |
968 | if (unlikely(ret)) { | 958 | if (unlikely(ret)) { |
969 | pr_err("%s: Cannot attach to PHY (error: %d)\n", __func__, ret); | 959 | pr_err("%s: Cannot attach to PHY (error: %d)\n", __func__, ret); |
@@ -1067,8 +1057,8 @@ open_error: | |||
1067 | if (priv->phydev) | 1057 | if (priv->phydev) |
1068 | phy_disconnect(priv->phydev); | 1058 | phy_disconnect(priv->phydev); |
1069 | 1059 | ||
1070 | open_clk_dis: | ||
1071 | stmmac_clk_disable(priv); | 1060 | stmmac_clk_disable(priv); |
1061 | |||
1072 | return ret; | 1062 | return ret; |
1073 | } | 1063 | } |
1074 | 1064 | ||
@@ -1120,7 +1110,6 @@ static int stmmac_release(struct net_device *dev) | |||
1120 | #ifdef CONFIG_STMMAC_DEBUG_FS | 1110 | #ifdef CONFIG_STMMAC_DEBUG_FS |
1121 | stmmac_exit_fs(); | 1111 | stmmac_exit_fs(); |
1122 | #endif | 1112 | #endif |
1123 | stmmac_mdio_unregister(dev); | ||
1124 | stmmac_clk_disable(priv); | 1113 | stmmac_clk_disable(priv); |
1125 | 1114 | ||
1126 | return 0; | 1115 | return 0; |
@@ -1932,6 +1921,14 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1932 | else | 1921 | else |
1933 | priv->clk_csr = priv->plat->clk_csr; | 1922 | priv->clk_csr = priv->plat->clk_csr; |
1934 | 1923 | ||
1924 | /* MDIO bus Registration */ | ||
1925 | ret = stmmac_mdio_register(ndev); | ||
1926 | if (ret < 0) { | ||
1927 | pr_debug("%s: MDIO bus (id: %d) registration failed", | ||
1928 | __func__, priv->plat->bus_id); | ||
1929 | goto error; | ||
1930 | } | ||
1931 | |||
1935 | return priv; | 1932 | return priv; |
1936 | 1933 | ||
1937 | error: | 1934 | error: |
@@ -1959,6 +1956,7 @@ int stmmac_dvr_remove(struct net_device *ndev) | |||
1959 | priv->hw->dma->stop_tx(priv->ioaddr); | 1956 | priv->hw->dma->stop_tx(priv->ioaddr); |
1960 | 1957 | ||
1961 | stmmac_set_mac(priv->ioaddr, false); | 1958 | stmmac_set_mac(priv->ioaddr, false); |
1959 | stmmac_mdio_unregister(ndev); | ||
1962 | netif_carrier_off(ndev); | 1960 | netif_carrier_off(ndev); |
1963 | unregister_netdev(ndev); | 1961 | unregister_netdev(ndev); |
1964 | free_netdev(ndev); | 1962 | free_netdev(ndev); |