diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/ucc_geth.c')
-rw-r--r-- | drivers/net/ethernet/freescale/ucc_geth.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c index 786182480a73..53c5fcf1436c 100644 --- a/drivers/net/ethernet/freescale/ucc_geth.c +++ b/drivers/net/ethernet/freescale/ucc_geth.c | |||
@@ -3867,9 +3867,8 @@ static int ucc_geth_probe(struct platform_device* ofdev) | |||
3867 | dev = alloc_etherdev(sizeof(*ugeth)); | 3867 | dev = alloc_etherdev(sizeof(*ugeth)); |
3868 | 3868 | ||
3869 | if (dev == NULL) { | 3869 | if (dev == NULL) { |
3870 | of_node_put(ug_info->tbi_node); | 3870 | err = -ENOMEM; |
3871 | of_node_put(ug_info->phy_node); | 3871 | goto err_deregister_fixed_link; |
3872 | return -ENOMEM; | ||
3873 | } | 3872 | } |
3874 | 3873 | ||
3875 | ugeth = netdev_priv(dev); | 3874 | ugeth = netdev_priv(dev); |
@@ -3906,10 +3905,7 @@ static int ucc_geth_probe(struct platform_device* ofdev) | |||
3906 | if (netif_msg_probe(ugeth)) | 3905 | if (netif_msg_probe(ugeth)) |
3907 | pr_err("%s: Cannot register net device, aborting\n", | 3906 | pr_err("%s: Cannot register net device, aborting\n", |
3908 | dev->name); | 3907 | dev->name); |
3909 | free_netdev(dev); | 3908 | goto err_free_netdev; |
3910 | of_node_put(ug_info->tbi_node); | ||
3911 | of_node_put(ug_info->phy_node); | ||
3912 | return err; | ||
3913 | } | 3909 | } |
3914 | 3910 | ||
3915 | mac_addr = of_get_mac_address(np); | 3911 | mac_addr = of_get_mac_address(np); |
@@ -3922,16 +3918,29 @@ static int ucc_geth_probe(struct platform_device* ofdev) | |||
3922 | ugeth->node = np; | 3918 | ugeth->node = np; |
3923 | 3919 | ||
3924 | return 0; | 3920 | return 0; |
3921 | |||
3922 | err_free_netdev: | ||
3923 | free_netdev(dev); | ||
3924 | err_deregister_fixed_link: | ||
3925 | if (of_phy_is_fixed_link(np)) | ||
3926 | of_phy_deregister_fixed_link(np); | ||
3927 | of_node_put(ug_info->tbi_node); | ||
3928 | of_node_put(ug_info->phy_node); | ||
3929 | |||
3930 | return err; | ||
3925 | } | 3931 | } |
3926 | 3932 | ||
3927 | static int ucc_geth_remove(struct platform_device* ofdev) | 3933 | static int ucc_geth_remove(struct platform_device* ofdev) |
3928 | { | 3934 | { |
3929 | struct net_device *dev = platform_get_drvdata(ofdev); | 3935 | struct net_device *dev = platform_get_drvdata(ofdev); |
3930 | struct ucc_geth_private *ugeth = netdev_priv(dev); | 3936 | struct ucc_geth_private *ugeth = netdev_priv(dev); |
3937 | struct device_node *np = ofdev->dev.of_node; | ||
3931 | 3938 | ||
3932 | unregister_netdev(dev); | 3939 | unregister_netdev(dev); |
3933 | free_netdev(dev); | 3940 | free_netdev(dev); |
3934 | ucc_geth_memclean(ugeth); | 3941 | ucc_geth_memclean(ugeth); |
3942 | if (of_phy_is_fixed_link(np)) | ||
3943 | of_phy_deregister_fixed_link(np); | ||
3935 | of_node_put(ugeth->ug_info->tbi_node); | 3944 | of_node_put(ugeth->ug_info->tbi_node); |
3936 | of_node_put(ugeth->ug_info->phy_node); | 3945 | of_node_put(ugeth->ug_info->phy_node); |
3937 | 3946 | ||