diff options
| -rw-r--r-- | drivers/char/riscom8.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c index b37e626f4faa..102ece4c4e0e 100644 --- a/drivers/char/riscom8.c +++ b/drivers/char/riscom8.c | |||
| @@ -79,7 +79,6 @@ | |||
| 79 | 79 | ||
| 80 | #define RS_EVENT_WRITE_WAKEUP 0 | 80 | #define RS_EVENT_WRITE_WAKEUP 0 |
| 81 | 81 | ||
| 82 | static struct riscom_board * IRQ_to_board[16]; | ||
| 83 | static struct tty_driver *riscom_driver; | 82 | static struct tty_driver *riscom_driver; |
| 84 | 83 | ||
| 85 | static struct riscom_board rc_board[RC_NBOARD] = { | 84 | static struct riscom_board rc_board[RC_NBOARD] = { |
| @@ -537,16 +536,14 @@ static inline void rc_check_modem(struct riscom_board const * bp) | |||
| 537 | } | 536 | } |
| 538 | 537 | ||
| 539 | /* The main interrupt processing routine */ | 538 | /* The main interrupt processing routine */ |
| 540 | static irqreturn_t rc_interrupt(int irq, void * dev_id) | 539 | static irqreturn_t rc_interrupt(int dummy, void * dev_id) |
| 541 | { | 540 | { |
| 542 | unsigned char status; | 541 | unsigned char status; |
| 543 | unsigned char ack; | 542 | unsigned char ack; |
| 544 | struct riscom_board *bp; | 543 | struct riscom_board *bp = dev_id; |
| 545 | unsigned long loop = 0; | 544 | unsigned long loop = 0; |
| 546 | int handled = 0; | 545 | int handled = 0; |
| 547 | 546 | ||
| 548 | bp = IRQ_to_board[irq]; | ||
| 549 | |||
| 550 | if (!(bp->flags & RC_BOARD_ACTIVE)) | 547 | if (!(bp->flags & RC_BOARD_ACTIVE)) |
| 551 | return IRQ_NONE; | 548 | return IRQ_NONE; |
| 552 | 549 | ||
| @@ -603,7 +600,7 @@ static irqreturn_t rc_interrupt(int irq, void * dev_id) | |||
| 603 | */ | 600 | */ |
| 604 | 601 | ||
| 605 | /* Called with disabled interrupts */ | 602 | /* Called with disabled interrupts */ |
| 606 | static inline int rc_setup_board(struct riscom_board * bp) | 603 | static int rc_setup_board(struct riscom_board * bp) |
| 607 | { | 604 | { |
| 608 | int error; | 605 | int error; |
| 609 | 606 | ||
| @@ -611,7 +608,7 @@ static inline int rc_setup_board(struct riscom_board * bp) | |||
| 611 | return 0; | 608 | return 0; |
| 612 | 609 | ||
| 613 | error = request_irq(bp->irq, rc_interrupt, IRQF_DISABLED, | 610 | error = request_irq(bp->irq, rc_interrupt, IRQF_DISABLED, |
| 614 | "RISCom/8", NULL); | 611 | "RISCom/8", bp); |
| 615 | if (error) | 612 | if (error) |
| 616 | return error; | 613 | return error; |
| 617 | 614 | ||
| @@ -619,14 +616,13 @@ static inline int rc_setup_board(struct riscom_board * bp) | |||
| 619 | bp->DTR = ~0; | 616 | bp->DTR = ~0; |
| 620 | rc_out(bp, RC_DTR, bp->DTR); /* Drop DTR on all ports */ | 617 | rc_out(bp, RC_DTR, bp->DTR); /* Drop DTR on all ports */ |
| 621 | 618 | ||
| 622 | IRQ_to_board[bp->irq] = bp; | ||
| 623 | bp->flags |= RC_BOARD_ACTIVE; | 619 | bp->flags |= RC_BOARD_ACTIVE; |
| 624 | 620 | ||
| 625 | return 0; | 621 | return 0; |
| 626 | } | 622 | } |
| 627 | 623 | ||
| 628 | /* Called with disabled interrupts */ | 624 | /* Called with disabled interrupts */ |
| 629 | static inline void rc_shutdown_board(struct riscom_board *bp) | 625 | static void rc_shutdown_board(struct riscom_board *bp) |
| 630 | { | 626 | { |
| 631 | if (!(bp->flags & RC_BOARD_ACTIVE)) | 627 | if (!(bp->flags & RC_BOARD_ACTIVE)) |
| 632 | return; | 628 | return; |
| @@ -634,7 +630,6 @@ static inline void rc_shutdown_board(struct riscom_board *bp) | |||
| 634 | bp->flags &= ~RC_BOARD_ACTIVE; | 630 | bp->flags &= ~RC_BOARD_ACTIVE; |
| 635 | 631 | ||
| 636 | free_irq(bp->irq, NULL); | 632 | free_irq(bp->irq, NULL); |
| 637 | IRQ_to_board[bp->irq] = NULL; | ||
| 638 | 633 | ||
| 639 | bp->DTR = ~0; | 634 | bp->DTR = ~0; |
| 640 | rc_out(bp, RC_DTR, bp->DTR); /* Drop DTR on all ports */ | 635 | rc_out(bp, RC_DTR, bp->DTR); /* Drop DTR on all ports */ |
| @@ -1594,7 +1589,6 @@ static inline int rc_init_drivers(void) | |||
| 1594 | if (!riscom_driver) | 1589 | if (!riscom_driver) |
| 1595 | return -ENOMEM; | 1590 | return -ENOMEM; |
| 1596 | 1591 | ||
| 1597 | memset(IRQ_to_board, 0, sizeof(IRQ_to_board)); | ||
| 1598 | riscom_driver->owner = THIS_MODULE; | 1592 | riscom_driver->owner = THIS_MODULE; |
| 1599 | riscom_driver->name = "ttyL"; | 1593 | riscom_driver->name = "ttyL"; |
| 1600 | riscom_driver->major = RISCOM8_NORMAL_MAJOR; | 1594 | riscom_driver->major = RISCOM8_NORMAL_MAJOR; |
