Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc0fa84a authored by Ben Collins's avatar Ben Collins Committed by Linus Torvalds
Browse files

[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: default avatarBen Collins <bcollins@ubuntu.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent b62735d9
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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);
+2 −3
Original line number Diff line number Diff line
@@ -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