aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powermac/pfunc_core.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-02-07 10:43:36 +1100
committerPaul Mackerras <paulus@samba.org>2006-02-07 10:43:36 +1100
commit6cb6524d90b6e5497e79a1474bdb2f26755d1c02 (patch)
treefd475ac8f57a6bd39c976056324d1bc79d11b4c9 /arch/powerpc/platforms/powermac/pfunc_core.c
parent[PATCH] sem2mutex: drivers/macintosh/windfarm_core.c (diff)
parent[PATCH] USB: Fix GPL markings on usb core functions. (diff)
downloadlinux-dev-6cb6524d90b6e5497e79a1474bdb2f26755d1c02.tar.xz
linux-dev-6cb6524d90b6e5497e79a1474bdb2f26755d1c02.zip
Merge ../linux-2.6
Diffstat (limited to 'arch/powerpc/platforms/powermac/pfunc_core.c')
-rw-r--r--arch/powerpc/platforms/powermac/pfunc_core.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/powerpc/platforms/powermac/pfunc_core.c b/arch/powerpc/platforms/powermac/pfunc_core.c
index c32c623001dc..356a739e52b2 100644
--- a/arch/powerpc/platforms/powermac/pfunc_core.c
+++ b/arch/powerpc/platforms/powermac/pfunc_core.c
@@ -862,21 +862,28 @@ int pmf_register_irq_client(struct device_node *target,
spin_unlock_irqrestore(&pmf_lock, flags);
return -ENODEV;
}
+ if (list_empty(&func->irq_clients))
+ func->dev->handlers->irq_enable(func);
list_add(&client->link, &func->irq_clients);
+ client->func = func;
spin_unlock_irqrestore(&pmf_lock, flags);
return 0;
}
EXPORT_SYMBOL_GPL(pmf_register_irq_client);
-void pmf_unregister_irq_client(struct device_node *np,
- const char *name,
- struct pmf_irq_client *client)
+void pmf_unregister_irq_client(struct pmf_irq_client *client)
{
+ struct pmf_function *func = client->func;
unsigned long flags;
+ BUG_ON(func == NULL);
+
spin_lock_irqsave(&pmf_lock, flags);
+ client->func = NULL;
list_del(&client->link);
+ if (list_empty(&func->irq_clients))
+ func->dev->handlers->irq_disable(func);
spin_unlock_irqrestore(&pmf_lock, flags);
}
EXPORT_SYMBOL_GPL(pmf_unregister_irq_client);