aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMatthias Brugger <mbrugger@iseebcn.com>2012-06-21 21:10:15 -0400
committerDavid S. Miller <davem@davemloft.net>2012-06-22 20:06:51 -0400
commit8e27628ecf883b9e5825103e40e6f86bf8225f1a (patch)
tree84336215754a596d28430fb100052c886f508c9c /drivers
parentbb1dfefdc62fa68107c4c9f1374cb856743a9434 (diff)
smsc911x.c: encapsulate enable irq calls
We encapsulate enbale irq functionality in a function call. As on probe the interrupts will be disabled twice, we delete one. Signed-off-by: Matthias Brugger <mbrugger@iseebcn.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/smsc/smsc911x.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
index 1466e5d2af44..54ca99dbb406 100644
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
@@ -1442,6 +1442,14 @@ smsc911x_set_hw_mac_address(struct smsc911x_data *pdata, u8 dev_addr[6])
1442 smsc911x_mac_write(pdata, ADDRL, mac_low32); 1442 smsc911x_mac_write(pdata, ADDRL, mac_low32);
1443} 1443}
1444 1444
1445static void smsc911x_disable_irq_chip(struct net_device *dev)
1446{
1447 struct smsc911x_data *pdata = netdev_priv(dev);
1448
1449 smsc911x_reg_write(pdata, INT_EN, 0);
1450 smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF);
1451}
1452
1445static int smsc911x_open(struct net_device *dev) 1453static int smsc911x_open(struct net_device *dev)
1446{ 1454{
1447 struct smsc911x_data *pdata = netdev_priv(dev); 1455 struct smsc911x_data *pdata = netdev_priv(dev);
@@ -1494,8 +1502,7 @@ static int smsc911x_open(struct net_device *dev)
1494 spin_unlock_irq(&pdata->mac_lock); 1502 spin_unlock_irq(&pdata->mac_lock);
1495 1503
1496 /* Initialise irqs, but leave all sources disabled */ 1504 /* Initialise irqs, but leave all sources disabled */
1497 smsc911x_reg_write(pdata, INT_EN, 0); 1505 smsc911x_disable_irq_chip(dev);
1498 smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF);
1499 1506
1500 /* Set interrupt deassertion to 100uS */ 1507 /* Set interrupt deassertion to 100uS */
1501 intcfg = ((10 << 24) | INT_CFG_IRQ_EN_); 1508 intcfg = ((10 << 24) | INT_CFG_IRQ_EN_);
@@ -2215,9 +2222,6 @@ static int __devinit smsc911x_init(struct net_device *dev)
2215 if (smsc911x_soft_reset(pdata)) 2222 if (smsc911x_soft_reset(pdata))
2216 return -ENODEV; 2223 return -ENODEV;
2217 2224
2218 /* Disable all interrupt sources until we bring the device up */
2219 smsc911x_reg_write(pdata, INT_EN, 0);
2220
2221 ether_setup(dev); 2225 ether_setup(dev);
2222 dev->flags |= IFF_MULTICAST; 2226 dev->flags |= IFF_MULTICAST;
2223 netif_napi_add(dev, &pdata->napi, smsc911x_poll, SMSC_NAPI_WEIGHT); 2227 netif_napi_add(dev, &pdata->napi, smsc911x_poll, SMSC_NAPI_WEIGHT);
@@ -2434,8 +2438,7 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
2434 smsc911x_reg_write(pdata, INT_CFG, intcfg); 2438 smsc911x_reg_write(pdata, INT_CFG, intcfg);
2435 2439
2436 /* Ensure interrupts are globally disabled before connecting ISR */ 2440 /* Ensure interrupts are globally disabled before connecting ISR */
2437 smsc911x_reg_write(pdata, INT_EN, 0); 2441 smsc911x_disable_irq_chip(dev);
2438 smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF);
2439 2442
2440 retval = request_irq(dev->irq, smsc911x_irqhandler, 2443 retval = request_irq(dev->irq, smsc911x_irqhandler,
2441 irq_flags | IRQF_SHARED, dev->name, dev); 2444 irq_flags | IRQF_SHARED, dev->name, dev);