diff options
Diffstat (limited to 'drivers/serial/serial_cs.c')
-rw-r--r-- | drivers/serial/serial_cs.c | 36 |
1 files changed, 9 insertions, 27 deletions
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 8cfa5b12ea7a..dadd686c9801 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
@@ -89,7 +89,6 @@ struct serial_info { | |||
89 | int manfid; | 89 | int manfid; |
90 | int prodid; | 90 | int prodid; |
91 | int c950ctrl; | 91 | int c950ctrl; |
92 | dev_node_t node[4]; | ||
93 | int line[4]; | 92 | int line[4]; |
94 | const struct serial_quirk *quirk; | 93 | const struct serial_quirk *quirk; |
95 | }; | 94 | }; |
@@ -289,8 +288,6 @@ static void serial_remove(struct pcmcia_device *link) | |||
289 | for (i = 0; i < info->ndev; i++) | 288 | for (i = 0; i < info->ndev; i++) |
290 | serial8250_unregister_port(info->line[i]); | 289 | serial8250_unregister_port(info->line[i]); |
291 | 290 | ||
292 | info->p_dev->dev_node = NULL; | ||
293 | |||
294 | if (!info->slave) | 291 | if (!info->slave) |
295 | pcmcia_disable_device(link); | 292 | pcmcia_disable_device(link); |
296 | } | 293 | } |
@@ -343,7 +340,6 @@ static int serial_probe(struct pcmcia_device *link) | |||
343 | 340 | ||
344 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; | 341 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; |
345 | link->io.NumPorts1 = 8; | 342 | link->io.NumPorts1 = 8; |
346 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | ||
347 | link->conf.Attributes = CONF_ENABLE_IRQ; | 343 | link->conf.Attributes = CONF_ENABLE_IRQ; |
348 | if (do_sound) { | 344 | if (do_sound) { |
349 | link->conf.Attributes |= CONF_ENABLE_SPKR; | 345 | link->conf.Attributes |= CONF_ENABLE_SPKR; |
@@ -411,11 +407,6 @@ static int setup_serial(struct pcmcia_device *handle, struct serial_info * info, | |||
411 | } | 407 | } |
412 | 408 | ||
413 | info->line[info->ndev] = line; | 409 | info->line[info->ndev] = line; |
414 | sprintf(info->node[info->ndev].dev_name, "ttyS%d", line); | ||
415 | info->node[info->ndev].major = TTY_MAJOR; | ||
416 | info->node[info->ndev].minor = 0x40 + line; | ||
417 | if (info->ndev > 0) | ||
418 | info->node[info->ndev - 1].next = &info->node[info->ndev]; | ||
419 | info->ndev++; | 410 | info->ndev++; |
420 | 411 | ||
421 | return 0; | 412 | return 0; |
@@ -486,7 +477,7 @@ static int simple_config(struct pcmcia_device *link) | |||
486 | } | 477 | } |
487 | if (info->slave) { | 478 | if (info->slave) { |
488 | return setup_serial(link, info, port, | 479 | return setup_serial(link, info, port, |
489 | link->irq.AssignedIRQ); | 480 | link->irq); |
490 | } | 481 | } |
491 | } | 482 | } |
492 | 483 | ||
@@ -507,10 +498,6 @@ static int simple_config(struct pcmcia_device *link) | |||
507 | return -1; | 498 | return -1; |
508 | 499 | ||
509 | found_port: | 500 | found_port: |
510 | i = pcmcia_request_irq(link, &link->irq); | ||
511 | if (i != 0) | ||
512 | link->irq.AssignedIRQ = 0; | ||
513 | |||
514 | if (info->multi && (info->manfid == MANFID_3COM)) | 501 | if (info->multi && (info->manfid == MANFID_3COM)) |
515 | link->conf.ConfigIndex &= ~(0x08); | 502 | link->conf.ConfigIndex &= ~(0x08); |
516 | 503 | ||
@@ -523,7 +510,7 @@ found_port: | |||
523 | i = pcmcia_request_configuration(link, &link->conf); | 510 | i = pcmcia_request_configuration(link, &link->conf); |
524 | if (i != 0) | 511 | if (i != 0) |
525 | return -1; | 512 | return -1; |
526 | return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); | 513 | return setup_serial(link, info, link->io.BasePort1, link->irq); |
527 | } | 514 | } |
528 | 515 | ||
529 | static int multi_config_check(struct pcmcia_device *p_dev, | 516 | static int multi_config_check(struct pcmcia_device *p_dev, |
@@ -586,13 +573,9 @@ static int multi_config(struct pcmcia_device *link) | |||
586 | } | 573 | } |
587 | } | 574 | } |
588 | 575 | ||
589 | i = pcmcia_request_irq(link, &link->irq); | 576 | if (!link->irq) |
590 | if (i != 0) { | 577 | dev_warn(&link->dev, |
591 | /* FIXME: comment does not fit, error handling does not fit */ | 578 | "serial_cs: no usable IRQ found, continuing...\n"); |
592 | printk(KERN_NOTICE | ||
593 | "serial_cs: no usable port range found, giving up\n"); | ||
594 | link->irq.AssignedIRQ = 0; | ||
595 | } | ||
596 | 579 | ||
597 | /* | 580 | /* |
598 | * Apply any configuration quirks. | 581 | * Apply any configuration quirks. |
@@ -615,11 +598,11 @@ static int multi_config(struct pcmcia_device *link) | |||
615 | if (link->conf.ConfigIndex == 1 || | 598 | if (link->conf.ConfigIndex == 1 || |
616 | link->conf.ConfigIndex == 3) { | 599 | link->conf.ConfigIndex == 3) { |
617 | err = setup_serial(link, info, base2, | 600 | err = setup_serial(link, info, base2, |
618 | link->irq.AssignedIRQ); | 601 | link->irq); |
619 | base2 = link->io.BasePort1; | 602 | base2 = link->io.BasePort1; |
620 | } else { | 603 | } else { |
621 | err = setup_serial(link, info, link->io.BasePort1, | 604 | err = setup_serial(link, info, link->io.BasePort1, |
622 | link->irq.AssignedIRQ); | 605 | link->irq); |
623 | } | 606 | } |
624 | info->c950ctrl = base2; | 607 | info->c950ctrl = base2; |
625 | 608 | ||
@@ -633,10 +616,10 @@ static int multi_config(struct pcmcia_device *link) | |||
633 | return 0; | 616 | return 0; |
634 | } | 617 | } |
635 | 618 | ||
636 | setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); | 619 | setup_serial(link, info, link->io.BasePort1, link->irq); |
637 | for (i = 0; i < info->multi - 1; i++) | 620 | for (i = 0; i < info->multi - 1; i++) |
638 | setup_serial(link, info, base2 + (8 * i), | 621 | setup_serial(link, info, base2 + (8 * i), |
639 | link->irq.AssignedIRQ); | 622 | link->irq); |
640 | return 0; | 623 | return 0; |
641 | } | 624 | } |
642 | 625 | ||
@@ -720,7 +703,6 @@ static int serial_config(struct pcmcia_device * link) | |||
720 | if (info->quirk->post(link)) | 703 | if (info->quirk->post(link)) |
721 | goto failed; | 704 | goto failed; |
722 | 705 | ||
723 | link->dev_node = &info->node[0]; | ||
724 | return 0; | 706 | return 0; |
725 | 707 | ||
726 | failed: | 708 | failed: |