Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 131309
b: refs/heads/master
c: 7b7a799
h: refs/heads/master
i:
  131307: 5cc8bcf
v: v3
  • Loading branch information
Meelis Roos authored and David S. Miller committed Feb 11, 2009
1 parent c2263e7 commit c3f4b5b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fcffd0d8bbddac757cd856e635ac75e8eb4518bc
refs/heads/master: 7b7a799d664a46eec6cb7de200c90f40730497a7
34 changes: 28 additions & 6 deletions trunk/drivers/net/sunhme.c
Original file line number Diff line number Diff line change
Expand Up @@ -2543,25 +2543,36 @@ static struct quattro * __devinit quattro_sbus_find(struct of_device *child)
}

/* After all quattro cards have been probed, we call these functions
* to register the IRQ handlers.
* to register the IRQ handlers for the cards that have been
* successfully probed and skip the cards that failed to initialize
*/
static void __init quattro_sbus_register_irqs(void)
static int __init quattro_sbus_register_irqs(void)
{
struct quattro *qp;

for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) {
struct of_device *op = qp->quattro_dev;
int err;
int err, qfe_slot, skip = 0;

for (qfe_slot = 0; qfe_slot < 4; qfe_slot++) {
if (!qp->happy_meals[qfe_slot])
skip = 1;
}
if (skip)
continue;

err = request_irq(op->irqs[0],
quattro_sbus_interrupt,
IRQF_SHARED, "Quattro",
qp);
if (err != 0) {
printk(KERN_ERR "Quattro: Fatal IRQ registery error %d.\n", err);
panic("QFE request irq");
printk(KERN_ERR "Quattro HME: IRQ registration "
"error %d.\n", err);
return err;
}
}

return 0;
}

static void quattro_sbus_free_irqs(void)
Expand All @@ -2570,6 +2581,14 @@ static void quattro_sbus_free_irqs(void)

for (qp = qfe_sbus_list; qp != NULL; qp = qp->next) {
struct of_device *op = qp->quattro_dev;
int qfe_slot, skip = 0;

for (qfe_slot = 0; qfe_slot < 4; qfe_slot++) {
if (!qp->happy_meals[qfe_slot])
skip = 1;
}
if (skip)
continue;

free_irq(op->irqs[0], qp);
}
Expand Down Expand Up @@ -2828,6 +2847,9 @@ static int __devinit happy_meal_sbus_probe_one(struct of_device *op, int is_qfe)
if (hp->tcvregs)
of_iounmap(&op->resource[4], hp->tcvregs, TCVR_REG_SIZE);

if (qp)
qp->happy_meals[qfe_slot] = NULL;

err_out_free_netdev:
free_netdev(dev);

Expand Down Expand Up @@ -3285,7 +3307,7 @@ static int __init happy_meal_sbus_init(void)

err = of_register_driver(&hme_sbus_driver, &of_bus_type);
if (!err)
quattro_sbus_register_irqs();
err = quattro_sbus_register_irqs();

return err;
}
Expand Down

0 comments on commit c3f4b5b

Please sign in to comment.