diff options
author | Lily Zhang <r58066@freescale.com> | 2009-07-31 10:38:35 +0800 |
---|---|---|
committer | Rob Herring <r.herring@freescale.com> | 2009-08-07 09:47:24 -0500 |
commit | 49ac955b4de4cbfeb9dc12cdc350d7d71c7d481c (patch) | |
tree | cda9bb52da77e9c29f0426106c0f11954aa889c7 /drivers/net | |
parent | 7b0ca650032c51d29c47b52fff5b4cc78a7f2b4f (diff) |
ENGR00114687 Active FEC clock when it is used
Active FEC clock when it is used
Signed-off-by: Lily Zhang <r58066@freescale.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/fec.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index bce84627faad..13ce706e4253 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -2613,6 +2613,7 @@ fec_enet_open(struct net_device *dev) { struct fec_enet_private *fep = netdev_priv(dev); + fec_arch_init(); /* I should reset the ring buffers here, but I don't yet know * a simple way to do that. */ @@ -2665,6 +2666,7 @@ fec_enet_close(struct net_device *dev) if (fep->link) { fec_stop(dev); } + fec_arch_exit(); return 0; } @@ -3101,7 +3103,7 @@ fec_stop(struct net_device *dev) static int __init fec_enet_module_init(void) { struct net_device *dev; - int i, err; + int i, err, ret = 0; DECLARE_MAC_BUF(mac); printk("FEC ENET Version 0.2\n"); @@ -3109,8 +3111,10 @@ static int __init fec_enet_module_init(void) for (i = 0; (i < FEC_MAX_PORTS); i++) { dev = alloc_etherdev(sizeof(struct fec_enet_private)); - if (!dev) - return -ENOMEM; + if (!dev) { + ret = -ENOMEM; + goto exit; + } err = fec_enet_init(dev); if (err) { free_netdev(dev); @@ -3119,13 +3123,19 @@ static int __init fec_enet_module_init(void) if (register_netdev(dev) != 0) { /* XXX: missing cleanup here */ free_netdev(dev); - return -EIO; + ret = -EIO; + goto exit; } printk("%s: ethernet %s\n", dev->name, print_mac(mac, dev->dev_addr)); } - return 0; + +exit: + fec_arch_exit(); + return ret; + + } module_init(fec_enet_module_init); |