diff options
Diffstat (limited to 'arch/arm/kernel/ecard.c')
-rw-r--r-- | arch/arm/kernel/ecard.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c index bdbd7da99286..65f1398723a4 100644 --- a/arch/arm/kernel/ecard.c +++ b/arch/arm/kernel/ecard.c | |||
@@ -958,6 +958,14 @@ void ecard_release_resources(struct expansion_card *ec) | |||
958 | } | 958 | } |
959 | EXPORT_SYMBOL(ecard_release_resources); | 959 | EXPORT_SYMBOL(ecard_release_resources); |
960 | 960 | ||
961 | void ecard_setirq(struct expansion_card *ec, const struct expansion_card_ops *ops, void *irq_data) | ||
962 | { | ||
963 | ec->irq_data = irq_data; | ||
964 | barrier(); | ||
965 | ec->ops = ops; | ||
966 | } | ||
967 | EXPORT_SYMBOL(ecard_setirq); | ||
968 | |||
961 | /* | 969 | /* |
962 | * Probe for an expansion card. | 970 | * Probe for an expansion card. |
963 | * | 971 | * |
@@ -1133,6 +1141,14 @@ static int ecard_drv_remove(struct device *dev) | |||
1133 | drv->remove(ec); | 1141 | drv->remove(ec); |
1134 | ecard_release(ec); | 1142 | ecard_release(ec); |
1135 | 1143 | ||
1144 | /* | ||
1145 | * Restore the default operations. We ensure that the | ||
1146 | * ops are set before we change the data. | ||
1147 | */ | ||
1148 | ec->ops = &ecard_default_ops; | ||
1149 | barrier(); | ||
1150 | ec->irq_data = NULL; | ||
1151 | |||
1136 | return 0; | 1152 | return 0; |
1137 | } | 1153 | } |
1138 | 1154 | ||