[ARM] ecard: add helper function for setting ecard irq ops
Rather than having every driver fiddle about setting its private IRQ operations and data, provide a helper function to contain this functionality in one place. Arrange to remove the driver-private IRQ operations and data when the device is removed from the driver, and remove the driver private code to do this. This fixes potential problems caused by drivers forgetting to remove these hooks. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:

committed by
Russell King

parent
129a84de23
commit
c7b87f3d50
@@ -574,8 +574,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
|
||||
|
||||
ec->irqaddr = base + ICS_ARCIN_V5_INTRSTAT;
|
||||
ec->irqmask = 1;
|
||||
ec->irq_data = state;
|
||||
ec->ops = &icside_ops_arcin_v5;
|
||||
|
||||
ecard_setirq(ec, &icside_ops_arcin_v5, state);
|
||||
|
||||
/*
|
||||
* Be on the safe side - disable interrupts
|
||||
@@ -630,8 +630,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
|
||||
|
||||
writeb(sel, ioc_base);
|
||||
|
||||
ec->irq_data = state;
|
||||
ec->ops = &icside_ops_arcin_v6;
|
||||
ecard_setirq(ec, &icside_ops_arcin_v6, state);
|
||||
|
||||
state->irq_port = easi_base;
|
||||
state->ioc_base = ioc_base;
|
||||
@@ -793,8 +792,6 @@ static void __devexit icside_remove(struct expansion_card *ec)
|
||||
}
|
||||
|
||||
ecard_set_drvdata(ec, NULL);
|
||||
ec->ops = NULL;
|
||||
ec->irq_data = NULL;
|
||||
|
||||
if (state->ioc_base)
|
||||
iounmap(state->ioc_base);
|
||||
|
Reference in New Issue
Block a user