[PATCH] powerpc: enable irq's for platform functions.
Make the platform function interrupt functions actually work. Calls irq_enable() for the first in the list, and irq_disable() for the last. Added *func to struct irq_client so the the user can pass just that to pmf_unregister_irq_client(). Signed-off-by: Ben Collins <bcollins@ubuntu.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
b62735d9c6
commit
cc0fa84a01
2 changed files with 12 additions and 6 deletions
|
@ -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);
|
||||
|
|
|
@ -167,6 +167,7 @@ struct pmf_irq_client {
|
|||
void *data;
|
||||
struct module *owner;
|
||||
struct list_head link;
|
||||
struct pmf_function *func;
|
||||
};
|
||||
|
||||
|
||||
|
@ -187,9 +188,7 @@ extern int pmf_register_irq_client(struct device_node *np,
|
|||
const char *name,
|
||||
struct pmf_irq_client *client);
|
||||
|
||||
extern void pmf_unregister_irq_client(struct device_node *np,
|
||||
const char *name,
|
||||
struct pmf_irq_client *client);
|
||||
extern void pmf_unregister_irq_client(struct pmf_irq_client *client);
|
||||
|
||||
/*
|
||||
* Called by the handlers when an irq happens
|
||||
|
|
Loading…
Reference in a new issue