aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2007-05-10 11:46:13 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-05-11 12:18:55 -0400
commitc7b87f3d5037a35b5c7bb916ffc826be3fcb208d (patch)
tree57fb9d7bb21965fa0d78b26043cf459ce51a9668 /drivers/ide
parent129a84de2347002f09721cda3155ccfd19fade40 (diff)
[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>
Diffstat (limited to 'drivers/ide')
-rw-r--r--drivers/ide/arm/icside.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c
index 1fe0457243db..69c949ea93e3 100644
--- a/drivers/ide/arm/icside.c
+++ b/drivers/ide/arm/icside.c
@@ -574,8 +574,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
574 574
575 ec->irqaddr = base + ICS_ARCIN_V5_INTRSTAT; 575 ec->irqaddr = base + ICS_ARCIN_V5_INTRSTAT;
576 ec->irqmask = 1; 576 ec->irqmask = 1;
577 ec->irq_data = state; 577
578 ec->ops = &icside_ops_arcin_v5; 578 ecard_setirq(ec, &icside_ops_arcin_v5, state);
579 579
580 /* 580 /*
581 * Be on the safe side - disable interrupts 581 * Be on the safe side - disable interrupts
@@ -630,8 +630,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
630 630
631 writeb(sel, ioc_base); 631 writeb(sel, ioc_base);
632 632
633 ec->irq_data = state; 633 ecard_setirq(ec, &icside_ops_arcin_v6, state);
634 ec->ops = &icside_ops_arcin_v6;
635 634
636 state->irq_port = easi_base; 635 state->irq_port = easi_base;
637 state->ioc_base = ioc_base; 636 state->ioc_base = ioc_base;
@@ -793,8 +792,6 @@ static void __devexit icside_remove(struct expansion_card *ec)
793 } 792 }
794 793
795 ecard_set_drvdata(ec, NULL); 794 ecard_set_drvdata(ec, NULL);
796 ec->ops = NULL;
797 ec->irq_data = NULL;
798 795
799 if (state->ioc_base) 796 if (state->ioc_base)
800 iounmap(state->ioc_base); 797 iounmap(state->ioc_base);