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

Commit 080eb42f authored by Jeff Garzik's avatar Jeff Garzik
Browse files

isdn/sc: irq handler clean



* pass card number to irq handler

* use card number in irq handler to avoid looping through each adapter

Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 246f93f5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -334,7 +334,8 @@ static int __init sc_init(void)
		 */
		sc_adapter[cinst]->interrupt = irq[b];
		if (request_irq(sc_adapter[cinst]->interrupt, interrupt_handler,
				IRQF_DISABLED, interface->id, NULL))
				IRQF_DISABLED, interface->id,
				(void *)(unsigned long) cinst))
		{
			kfree(sc_adapter[cinst]->channel);
			indicate_status(cinst, ISDN_STAT_UNLOAD, 0, NULL);	/* Fix me */
+2 −15
Original line number Diff line number Diff line
@@ -21,28 +21,15 @@
#include "card.h"
#include <linux/interrupt.h>

static int get_card_from_irq(int irq)
{
	int i;

	for(i = 0 ; i < cinst ; i++) {
		if(sc_adapter[i]->interrupt == irq)
			return i;
	}
	return -1;
}

/*
 * 
 */
irqreturn_t interrupt_handler(int interrupt, void *cardptr)
irqreturn_t interrupt_handler(int dummy, void *card_inst)
{

	RspMessage rcvmsg;
	int channel;
	int card;

	card = get_card_from_irq(interrupt);
	int card = (int)(unsigned long) card_inst;

	if(!IS_VALID_CARD(card)) {
		pr_debug("Invalid param: %d is not a valid card id\n", card);