diff options
Diffstat (limited to 'drivers/net/sky2.c')
-rw-r--r-- | drivers/net/sky2.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 00702dd1530e..b908596bd89a 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -3349,6 +3349,14 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3349 | if (!dev) | 3349 | if (!dev) |
3350 | goto err_out_free_pci; | 3350 | goto err_out_free_pci; |
3351 | 3351 | ||
3352 | if (!disable_msi && pci_enable_msi(pdev) == 0) { | ||
3353 | err = sky2_test_msi(hw); | ||
3354 | if (err == -EOPNOTSUPP) | ||
3355 | pci_disable_msi(pdev); | ||
3356 | else if (err) | ||
3357 | goto err_out_free_netdev; | ||
3358 | } | ||
3359 | |||
3352 | err = register_netdev(dev); | 3360 | err = register_netdev(dev); |
3353 | if (err) { | 3361 | if (err) { |
3354 | printk(KERN_ERR PFX "%s: cannot register net device\n", | 3362 | printk(KERN_ERR PFX "%s: cannot register net device\n", |
@@ -3356,6 +3364,14 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3356 | goto err_out_free_netdev; | 3364 | goto err_out_free_netdev; |
3357 | } | 3365 | } |
3358 | 3366 | ||
3367 | err = request_irq(pdev->irq, sky2_intr, IRQF_SHARED, dev->name, hw); | ||
3368 | if (err) { | ||
3369 | printk(KERN_ERR PFX "%s: cannot assign irq %d\n", | ||
3370 | pci_name(pdev), pdev->irq); | ||
3371 | goto err_out_unregister; | ||
3372 | } | ||
3373 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | ||
3374 | |||
3359 | sky2_show_addr(dev); | 3375 | sky2_show_addr(dev); |
3360 | 3376 | ||
3361 | if (hw->ports > 1 && (dev1 = sky2_init_netdev(hw, 1, using_dac))) { | 3377 | if (hw->ports > 1 && (dev1 = sky2_init_netdev(hw, 1, using_dac))) { |
@@ -3370,23 +3386,6 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3370 | } | 3386 | } |
3371 | } | 3387 | } |
3372 | 3388 | ||
3373 | if (!disable_msi && pci_enable_msi(pdev) == 0) { | ||
3374 | err = sky2_test_msi(hw); | ||
3375 | if (err == -EOPNOTSUPP) | ||
3376 | pci_disable_msi(pdev); | ||
3377 | else if (err) | ||
3378 | goto err_out_unregister; | ||
3379 | } | ||
3380 | |||
3381 | err = request_irq(pdev->irq, sky2_intr, IRQF_SHARED, DRV_NAME, hw); | ||
3382 | if (err) { | ||
3383 | printk(KERN_ERR PFX "%s: cannot assign irq %d\n", | ||
3384 | pci_name(pdev), pdev->irq); | ||
3385 | goto err_out_unregister; | ||
3386 | } | ||
3387 | |||
3388 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | ||
3389 | |||
3390 | setup_timer(&hw->idle_timer, sky2_idle, (unsigned long) hw); | 3389 | setup_timer(&hw->idle_timer, sky2_idle, (unsigned long) hw); |
3391 | sky2_idle_start(hw); | 3390 | sky2_idle_start(hw); |
3392 | 3391 | ||
@@ -3396,10 +3395,6 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
3396 | 3395 | ||
3397 | err_out_unregister: | 3396 | err_out_unregister: |
3398 | pci_disable_msi(pdev); | 3397 | pci_disable_msi(pdev); |
3399 | if (dev1) { | ||
3400 | unregister_netdev(dev1); | ||
3401 | free_netdev(dev1); | ||
3402 | } | ||
3403 | unregister_netdev(dev); | 3398 | unregister_netdev(dev); |
3404 | err_out_free_netdev: | 3399 | err_out_free_netdev: |
3405 | free_netdev(dev); | 3400 | free_netdev(dev); |