diff options
author | David S. Miller <davem@davemloft.net> | 2009-03-19 02:53:57 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-19 02:53:57 -0400 |
commit | 0702b30dd821ac8a4103ddbe545518713fdca9be (patch) | |
tree | 8ce0c9f5e58c5ccb99870505eecd139986caa05e /drivers/net/sunhme.c | |
parent | 192d7a4667c6d11d1a174ec4cad9a3c5d5f9043c (diff) | |
parent | a1e4ee22863d41a6fbb24310d7951836cb6dafe7 (diff) |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Diffstat (limited to 'drivers/net/sunhme.c')
-rw-r--r-- | drivers/net/sunhme.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 0ff837a9c80..4e9bd380a5c 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c | |||
@@ -2543,25 +2543,36 @@ static struct quattro * __devinit quattro_sbus_find(struct of_device *child) | |||
2543 | } | 2543 | } |
2544 | 2544 | ||
2545 | /* After all quattro cards have been probed, we call these functions | 2545 | /* After all quattro cards have been probed, we call these functions |
2546 | * to register the IRQ handlers. | 2546 | * to register the IRQ handlers for the cards that have been |
2547 | * successfully probed and skip the cards that failed to initialize | ||
2547 | */ | 2548 | */ |
2548 | static void __init quattro_sbus_register_irqs(void) | 2549 | static int __init quattro_sbus_register_irqs(void) |
2549 | { | 2550 | { |
2550 | struct quattro *qp; | 2551 | struct quattro *qp; |
2551 | 2552 | ||
2552 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { | 2553 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { |
2553 | struct of_device *op = qp->quattro_dev; | 2554 | struct of_device *op = qp->quattro_dev; |
2554 | int err; | 2555 | int err, qfe_slot, skip = 0; |
2556 | |||
2557 | for (qfe_slot = 0; qfe_slot < 4; qfe_slot++) { | ||
2558 | if (!qp->happy_meals[qfe_slot]) | ||
2559 | skip = 1; | ||
2560 | } | ||
2561 | if (skip) | ||
2562 | continue; | ||
2555 | 2563 | ||
2556 | err = request_irq(op->irqs[0], | 2564 | err = request_irq(op->irqs[0], |
2557 | quattro_sbus_interrupt, | 2565 | quattro_sbus_interrupt, |
2558 | IRQF_SHARED, "Quattro", | 2566 | IRQF_SHARED, "Quattro", |
2559 | qp); | 2567 | qp); |
2560 | if (err != 0) { | 2568 | if (err != 0) { |
2561 | printk(KERN_ERR "Quattro: Fatal IRQ registery error %d.\n", err); | 2569 | printk(KERN_ERR "Quattro HME: IRQ registration " |
2562 | panic("QFE request irq"); | 2570 | "error %d.\n", err); |
2571 | return err; | ||
2563 | } | 2572 | } |
2564 | } | 2573 | } |
2574 | |||
2575 | return 0; | ||
2565 | } | 2576 | } |
2566 | 2577 | ||
2567 | static void quattro_sbus_free_irqs(void) | 2578 | static void quattro_sbus_free_irqs(void) |
@@ -2570,6 +2581,14 @@ static void quattro_sbus_free_irqs(void) | |||
2570 | 2581 | ||
2571 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { | 2582 | for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) { |
2572 | struct of_device *op = qp->quattro_dev; | 2583 | struct of_device *op = qp->quattro_dev; |
2584 | int qfe_slot, skip = 0; | ||
2585 | |||
2586 | for (qfe_slot = 0; qfe_slot < 4; qfe_slot++) { | ||
2587 | if (!qp->happy_meals[qfe_slot]) | ||
2588 | skip = 1; | ||
2589 | } | ||
2590 | if (skip) | ||
2591 | continue; | ||
2573 | 2592 | ||
2574 | free_irq(op->irqs[0], qp); | 2593 | free_irq(op->irqs[0], qp); |
2575 | } | 2594 | } |
@@ -2826,6 +2845,9 @@ err_out_iounmap: | |||
2826 | if (hp->tcvregs) | 2845 | if (hp->tcvregs) |
2827 | of_iounmap(&op->resource[4], hp->tcvregs, TCVR_REG_SIZE); | 2846 | of_iounmap(&op->resource[4], hp->tcvregs, TCVR_REG_SIZE); |
2828 | 2847 | ||
2848 | if (qp) | ||
2849 | qp->happy_meals[qfe_slot] = NULL; | ||
2850 | |||
2829 | err_out_free_netdev: | 2851 | err_out_free_netdev: |
2830 | free_netdev(dev); | 2852 | free_netdev(dev); |
2831 | 2853 | ||
@@ -3283,7 +3305,7 @@ static int __init happy_meal_sbus_init(void) | |||
3283 | 3305 | ||
3284 | err = of_register_driver(&hme_sbus_driver, &of_bus_type); | 3306 | err = of_register_driver(&hme_sbus_driver, &of_bus_type); |
3285 | if (!err) | 3307 | if (!err) |
3286 | quattro_sbus_register_irqs(); | 3308 | err = quattro_sbus_register_irqs(); |
3287 | 3309 | ||
3288 | return err; | 3310 | return err; |
3289 | } | 3311 | } |