X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fchar%2Fisicom.c;h=77a7a4a06620e239b9c72f7b6f726f2908732aa0;hb=b833b481c10cf591b15cc674948cc514e55d3b94;hp=b133b92a0ad5c01fe5eef2b8ec71408649b4b1e2;hpb=5b21f9dddd0817b761f1407f1950bee4f257411a;p=linux-2.6-omap-h63xx.git diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index b133b92a0ad..77a7a4a0662 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c @@ -171,9 +171,6 @@ static struct pci_driver isicom_driver = { static int prev_card = 3; /* start servicing isi_card[0] */ static struct tty_driver *isicom_normal; -static DECLARE_COMPLETION(isi_timerdone); -static char re_schedule = 1; - static void isicom_tx(unsigned long _data); static void isicom_start(struct tty_struct *tty); @@ -187,7 +184,7 @@ static signed char linuxb_to_isib[] = { struct isi_board { unsigned long base; - unsigned char irq; + int irq; unsigned char port_count; unsigned short status; unsigned short port_status; /* each bit for each port */ @@ -227,7 +224,7 @@ static struct isi_port isi_ports[PORT_COUNT]; * it wants to talk. */ -static inline int WaitTillCardIsFree(u16 base) +static inline int WaitTillCardIsFree(unsigned long base) { unsigned int count = 0; unsigned int a = in_atomic(); /* do we run under spinlock? */ @@ -399,9 +396,9 @@ static inline int __isicom_paranoia_check(struct isi_port const *port, static void isicom_tx(unsigned long _data) { - unsigned long flags; + unsigned long flags, base; unsigned int retries; - short count = (BOARD_COUNT-1), card, base; + short count = (BOARD_COUNT-1), card; short txcount, wrd, residue, word_count, cnt; struct isi_port *port; struct tty_struct *tty; @@ -502,11 +499,6 @@ unlock: spin_unlock_irqrestore(&isi_card[card].card_lock, flags); /* schedule another tx for hopefully in about 10ms */ sched_again: - if (!re_schedule) { - complete(&isi_timerdone); - return; - } - mod_timer(&tx, jiffies + msecs_to_jiffies(10)); } @@ -1738,17 +1730,13 @@ static unsigned int card_count; static int __devinit isicom_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { - unsigned int ioaddr, signature, index; + unsigned int signature, index; int retval = -EPERM; - u8 pciirq; struct isi_board *board = NULL; if (card_count >= BOARD_COUNT) goto err; - ioaddr = pci_resource_start(pdev, 3); - /* i.e at offset 0x1c in the PCI configuration register space. */ - pciirq = pdev->irq; dev_info(&pdev->dev, "ISI PCI Card(Device ID 0x%x)\n", ent->device); /* allot the first empty slot in the array */ @@ -1759,8 +1747,8 @@ static int __devinit isicom_probe(struct pci_dev *pdev, } board->index = index; - board->base = ioaddr; - board->irq = pciirq; + board->base = pci_resource_start(pdev, 3); + board->irq = pdev->irq; card_count++; pci_set_drvdata(pdev, board); @@ -1890,9 +1878,7 @@ error: static void __exit isicom_exit(void) { - re_schedule = 0; - - wait_for_completion_timeout(&isi_timerdone, HZ); + del_timer_sync(&tx); pci_unregister_driver(&isicom_driver); tty_unregister_driver(isicom_normal);