diff options
Diffstat (limited to 'drivers/serial/serial_cs.c')
-rw-r--r-- | drivers/serial/serial_cs.c | 179 |
1 files changed, 72 insertions, 107 deletions
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 7c7914f5fa02..8cfa5b12ea7a 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
@@ -54,14 +54,6 @@ | |||
54 | 54 | ||
55 | #include "8250.h" | 55 | #include "8250.h" |
56 | 56 | ||
57 | #ifdef PCMCIA_DEBUG | ||
58 | static int pc_debug = PCMCIA_DEBUG; | ||
59 | module_param(pc_debug, int, 0644); | ||
60 | #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) | ||
61 | static char *version = "serial_cs.c 1.134 2002/05/04 05:48:53 (David Hinds)"; | ||
62 | #else | ||
63 | #define DEBUG(n, args...) | ||
64 | #endif | ||
65 | 57 | ||
66 | /*====================================================================*/ | 58 | /*====================================================================*/ |
67 | 59 | ||
@@ -113,6 +105,10 @@ struct serial_cfg_mem { | |||
113 | * manfid 0x0160, 0x0104 | 105 | * manfid 0x0160, 0x0104 |
114 | * This card appears to have a 14.7456MHz clock. | 106 | * This card appears to have a 14.7456MHz clock. |
115 | */ | 107 | */ |
108 | /* Generic Modem: MD55x (GPRS/EDGE) have | ||
109 | * Elan VPU16551 UART with 14.7456MHz oscillator | ||
110 | * manfid 0x015D, 0x4C45 | ||
111 | */ | ||
116 | static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) | 112 | static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) |
117 | { | 113 | { |
118 | port->uartclk = 14745600; | 114 | port->uartclk = 14745600; |
@@ -121,24 +117,20 @@ static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_ | |||
121 | static int quirk_post_ibm(struct pcmcia_device *link) | 117 | static int quirk_post_ibm(struct pcmcia_device *link) |
122 | { | 118 | { |
123 | conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; | 119 | conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; |
124 | int last_ret, last_fn; | 120 | int ret; |
121 | |||
122 | ret = pcmcia_access_configuration_register(link, ®); | ||
123 | if (ret) | ||
124 | goto failed; | ||
125 | 125 | ||
126 | last_ret = pcmcia_access_configuration_register(link, ®); | ||
127 | if (last_ret) { | ||
128 | last_fn = AccessConfigurationRegister; | ||
129 | goto cs_failed; | ||
130 | } | ||
131 | reg.Action = CS_WRITE; | 126 | reg.Action = CS_WRITE; |
132 | reg.Value = reg.Value | 1; | 127 | reg.Value = reg.Value | 1; |
133 | last_ret = pcmcia_access_configuration_register(link, ®); | 128 | ret = pcmcia_access_configuration_register(link, ®); |
134 | if (last_ret) { | 129 | if (ret) |
135 | last_fn = AccessConfigurationRegister; | 130 | goto failed; |
136 | goto cs_failed; | ||
137 | } | ||
138 | return 0; | 131 | return 0; |
139 | 132 | ||
140 | cs_failed: | 133 | failed: |
141 | cs_error(link, last_fn, last_ret); | ||
142 | return -ENODEV; | 134 | return -ENODEV; |
143 | } | 135 | } |
144 | 136 | ||
@@ -158,7 +150,8 @@ static void quirk_wakeup_oxsemi(struct pcmcia_device *link) | |||
158 | { | 150 | { |
159 | struct serial_info *info = link->priv; | 151 | struct serial_info *info = link->priv; |
160 | 152 | ||
161 | outb(12, info->c950ctrl + 1); | 153 | if (info->c950ctrl) |
154 | outb(12, info->c950ctrl + 1); | ||
162 | } | 155 | } |
163 | 156 | ||
164 | /* request_region? oxsemi branch does no request_region too... */ | 157 | /* request_region? oxsemi branch does no request_region too... */ |
@@ -207,6 +200,11 @@ static const struct serial_quirk quirks[] = { | |||
207 | .multi = -1, | 200 | .multi = -1, |
208 | .setup = quirk_setup_brainboxes_0104, | 201 | .setup = quirk_setup_brainboxes_0104, |
209 | }, { | 202 | }, { |
203 | .manfid = 0x015D, | ||
204 | .prodid = 0x4C45, | ||
205 | .multi = -1, | ||
206 | .setup = quirk_setup_brainboxes_0104, | ||
207 | }, { | ||
210 | .manfid = MANFID_IBM, | 208 | .manfid = MANFID_IBM, |
211 | .prodid = ~0, | 209 | .prodid = ~0, |
212 | .multi = -1, | 210 | .multi = -1, |
@@ -283,7 +281,7 @@ static void serial_remove(struct pcmcia_device *link) | |||
283 | struct serial_info *info = link->priv; | 281 | struct serial_info *info = link->priv; |
284 | int i; | 282 | int i; |
285 | 283 | ||
286 | DEBUG(0, "serial_release(0x%p)\n", link); | 284 | dev_dbg(&link->dev, "serial_release\n"); |
287 | 285 | ||
288 | /* | 286 | /* |
289 | * Recheck to see if the device is still configured. | 287 | * Recheck to see if the device is still configured. |
@@ -334,7 +332,7 @@ static int serial_probe(struct pcmcia_device *link) | |||
334 | { | 332 | { |
335 | struct serial_info *info; | 333 | struct serial_info *info; |
336 | 334 | ||
337 | DEBUG(0, "serial_attach()\n"); | 335 | dev_dbg(&link->dev, "serial_attach()\n"); |
338 | 336 | ||
339 | /* Create new serial device */ | 337 | /* Create new serial device */ |
340 | info = kzalloc(sizeof (*info), GFP_KERNEL); | 338 | info = kzalloc(sizeof (*info), GFP_KERNEL); |
@@ -346,7 +344,6 @@ static int serial_probe(struct pcmcia_device *link) | |||
346 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; | 344 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; |
347 | link->io.NumPorts1 = 8; | 345 | link->io.NumPorts1 = 8; |
348 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | 346 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
349 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; | ||
350 | link->conf.Attributes = CONF_ENABLE_IRQ; | 347 | link->conf.Attributes = CONF_ENABLE_IRQ; |
351 | if (do_sound) { | 348 | if (do_sound) { |
352 | link->conf.Attributes |= CONF_ENABLE_SPKR; | 349 | link->conf.Attributes |= CONF_ENABLE_SPKR; |
@@ -370,7 +367,7 @@ static void serial_detach(struct pcmcia_device *link) | |||
370 | { | 367 | { |
371 | struct serial_info *info = link->priv; | 368 | struct serial_info *info = link->priv; |
372 | 369 | ||
373 | DEBUG(0, "serial_detach(0x%p)\n", link); | 370 | dev_dbg(&link->dev, "serial_detach\n"); |
374 | 371 | ||
375 | /* | 372 | /* |
376 | * Ensure any outstanding scheduled tasks are completed. | 373 | * Ensure any outstanding scheduled tasks are completed. |
@@ -399,7 +396,7 @@ static int setup_serial(struct pcmcia_device *handle, struct serial_info * info, | |||
399 | port.irq = irq; | 396 | port.irq = irq; |
400 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ; | 397 | port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ; |
401 | port.uartclk = 1843200; | 398 | port.uartclk = 1843200; |
402 | port.dev = &handle_to_dev(handle); | 399 | port.dev = &handle->dev; |
403 | if (buggy_uart) | 400 | if (buggy_uart) |
404 | port.flags |= UPF_BUGGY_UART; | 401 | port.flags |= UPF_BUGGY_UART; |
405 | 402 | ||
@@ -426,21 +423,6 @@ static int setup_serial(struct pcmcia_device *handle, struct serial_info * info, | |||
426 | 423 | ||
427 | /*====================================================================*/ | 424 | /*====================================================================*/ |
428 | 425 | ||
429 | static int | ||
430 | first_tuple(struct pcmcia_device *handle, tuple_t * tuple, cisparse_t * parse) | ||
431 | { | ||
432 | int i; | ||
433 | i = pcmcia_get_first_tuple(handle, tuple); | ||
434 | if (i != 0) | ||
435 | return i; | ||
436 | i = pcmcia_get_tuple_data(handle, tuple); | ||
437 | if (i != 0) | ||
438 | return i; | ||
439 | return pcmcia_parse_tuple(tuple, parse); | ||
440 | } | ||
441 | |||
442 | /*====================================================================*/ | ||
443 | |||
444 | static int simple_config_check(struct pcmcia_device *p_dev, | 426 | static int simple_config_check(struct pcmcia_device *p_dev, |
445 | cistpl_cftable_entry_t *cf, | 427 | cistpl_cftable_entry_t *cf, |
446 | cistpl_cftable_entry_t *dflt, | 428 | cistpl_cftable_entry_t *dflt, |
@@ -522,15 +504,13 @@ static int simple_config(struct pcmcia_device *link) | |||
522 | 504 | ||
523 | printk(KERN_NOTICE | 505 | printk(KERN_NOTICE |
524 | "serial_cs: no usable port range found, giving up\n"); | 506 | "serial_cs: no usable port range found, giving up\n"); |
525 | cs_error(link, RequestIO, i); | ||
526 | return -1; | 507 | return -1; |
527 | 508 | ||
528 | found_port: | 509 | found_port: |
529 | i = pcmcia_request_irq(link, &link->irq); | 510 | i = pcmcia_request_irq(link, &link->irq); |
530 | if (i != 0) { | 511 | if (i != 0) |
531 | cs_error(link, RequestIRQ, i); | ||
532 | link->irq.AssignedIRQ = 0; | 512 | link->irq.AssignedIRQ = 0; |
533 | } | 513 | |
534 | if (info->multi && (info->manfid == MANFID_3COM)) | 514 | if (info->multi && (info->manfid == MANFID_3COM)) |
535 | link->conf.ConfigIndex &= ~(0x08); | 515 | link->conf.ConfigIndex &= ~(0x08); |
536 | 516 | ||
@@ -541,10 +521,8 @@ found_port: | |||
541 | info->quirk->config(link); | 521 | info->quirk->config(link); |
542 | 522 | ||
543 | i = pcmcia_request_configuration(link, &link->conf); | 523 | i = pcmcia_request_configuration(link, &link->conf); |
544 | if (i != 0) { | 524 | if (i != 0) |
545 | cs_error(link, RequestConfiguration, i); | ||
546 | return -1; | 525 | return -1; |
547 | } | ||
548 | return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); | 526 | return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ); |
549 | } | 527 | } |
550 | 528 | ||
@@ -613,7 +591,6 @@ static int multi_config(struct pcmcia_device *link) | |||
613 | /* FIXME: comment does not fit, error handling does not fit */ | 591 | /* FIXME: comment does not fit, error handling does not fit */ |
614 | printk(KERN_NOTICE | 592 | printk(KERN_NOTICE |
615 | "serial_cs: no usable port range found, giving up\n"); | 593 | "serial_cs: no usable port range found, giving up\n"); |
616 | cs_error(link, RequestIRQ, i); | ||
617 | link->irq.AssignedIRQ = 0; | 594 | link->irq.AssignedIRQ = 0; |
618 | } | 595 | } |
619 | 596 | ||
@@ -624,10 +601,8 @@ static int multi_config(struct pcmcia_device *link) | |||
624 | info->quirk->config(link); | 601 | info->quirk->config(link); |
625 | 602 | ||
626 | i = pcmcia_request_configuration(link, &link->conf); | 603 | i = pcmcia_request_configuration(link, &link->conf); |
627 | if (i != 0) { | 604 | if (i != 0) |
628 | cs_error(link, RequestConfiguration, i); | ||
629 | return -ENODEV; | 605 | return -ENODEV; |
630 | } | ||
631 | 606 | ||
632 | /* The Oxford Semiconductor OXCF950 cards are in fact single-port: | 607 | /* The Oxford Semiconductor OXCF950 cards are in fact single-port: |
633 | * 8 registers are for the UART, the others are extra registers. | 608 | * 8 registers are for the UART, the others are extra registers. |
@@ -665,6 +640,25 @@ static int multi_config(struct pcmcia_device *link) | |||
665 | return 0; | 640 | return 0; |
666 | } | 641 | } |
667 | 642 | ||
643 | static int serial_check_for_multi(struct pcmcia_device *p_dev, | ||
644 | cistpl_cftable_entry_t *cf, | ||
645 | cistpl_cftable_entry_t *dflt, | ||
646 | unsigned int vcc, | ||
647 | void *priv_data) | ||
648 | { | ||
649 | struct serial_info *info = p_dev->priv; | ||
650 | |||
651 | if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) | ||
652 | info->multi = cf->io.win[0].len >> 3; | ||
653 | |||
654 | if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) && | ||
655 | (cf->io.win[1].len == 8)) | ||
656 | info->multi = 2; | ||
657 | |||
658 | return 0; /* break */ | ||
659 | } | ||
660 | |||
661 | |||
668 | /*====================================================================== | 662 | /*====================================================================== |
669 | 663 | ||
670 | serial_config() is scheduled to run after a CARD_INSERTION event | 664 | serial_config() is scheduled to run after a CARD_INSERTION event |
@@ -676,46 +670,14 @@ static int multi_config(struct pcmcia_device *link) | |||
676 | static int serial_config(struct pcmcia_device * link) | 670 | static int serial_config(struct pcmcia_device * link) |
677 | { | 671 | { |
678 | struct serial_info *info = link->priv; | 672 | struct serial_info *info = link->priv; |
679 | struct serial_cfg_mem *cfg_mem; | 673 | int i; |
680 | tuple_t *tuple; | ||
681 | u_char *buf; | ||
682 | cisparse_t *parse; | ||
683 | cistpl_cftable_entry_t *cf; | ||
684 | int i, last_ret, last_fn; | ||
685 | |||
686 | DEBUG(0, "serial_config(0x%p)\n", link); | ||
687 | |||
688 | cfg_mem = kmalloc(sizeof(struct serial_cfg_mem), GFP_KERNEL); | ||
689 | if (!cfg_mem) | ||
690 | goto failed; | ||
691 | 674 | ||
692 | tuple = &cfg_mem->tuple; | 675 | dev_dbg(&link->dev, "serial_config\n"); |
693 | parse = &cfg_mem->parse; | ||
694 | cf = &parse->cftable_entry; | ||
695 | buf = cfg_mem->buf; | ||
696 | |||
697 | tuple->TupleData = (cisdata_t *) buf; | ||
698 | tuple->TupleOffset = 0; | ||
699 | tuple->TupleDataMax = 255; | ||
700 | tuple->Attributes = 0; | ||
701 | |||
702 | /* Get configuration register information */ | ||
703 | tuple->DesiredTuple = CISTPL_CONFIG; | ||
704 | last_ret = first_tuple(link, tuple, parse); | ||
705 | if (last_ret != 0) { | ||
706 | last_fn = ParseTuple; | ||
707 | goto cs_failed; | ||
708 | } | ||
709 | link->conf.ConfigBase = parse->config.base; | ||
710 | link->conf.Present = parse->config.rmask[0]; | ||
711 | 676 | ||
712 | /* Is this a compliant multifunction card? */ | 677 | /* Is this a compliant multifunction card? */ |
713 | tuple->DesiredTuple = CISTPL_LONGLINK_MFC; | 678 | info->multi = (link->socket->functions > 1); |
714 | tuple->Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK; | ||
715 | info->multi = (first_tuple(link, tuple, parse) == 0); | ||
716 | 679 | ||
717 | /* Is this a multiport card? */ | 680 | /* Is this a multiport card? */ |
718 | tuple->DesiredTuple = CISTPL_MANFID; | ||
719 | info->manfid = link->manf_id; | 681 | info->manfid = link->manf_id; |
720 | info->prodid = link->card_id; | 682 | info->prodid = link->card_id; |
721 | 683 | ||
@@ -730,20 +692,11 @@ static int serial_config(struct pcmcia_device * link) | |||
730 | 692 | ||
731 | /* Another check for dual-serial cards: look for either serial or | 693 | /* Another check for dual-serial cards: look for either serial or |
732 | multifunction cards that ask for appropriate IO port ranges */ | 694 | multifunction cards that ask for appropriate IO port ranges */ |
733 | tuple->DesiredTuple = CISTPL_FUNCID; | ||
734 | if ((info->multi == 0) && | 695 | if ((info->multi == 0) && |
735 | (link->has_func_id) && | 696 | (link->has_func_id) && |
736 | ((link->func_id == CISTPL_FUNCID_MULTI) || | 697 | ((link->func_id == CISTPL_FUNCID_MULTI) || |
737 | (link->func_id == CISTPL_FUNCID_SERIAL))) { | 698 | (link->func_id == CISTPL_FUNCID_SERIAL))) |
738 | tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY; | 699 | pcmcia_loop_config(link, serial_check_for_multi, info); |
739 | if (first_tuple(link, tuple, parse) == 0) { | ||
740 | if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) | ||
741 | info->multi = cf->io.win[0].len >> 3; | ||
742 | if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) && | ||
743 | (cf->io.win[1].len == 8)) | ||
744 | info->multi = 2; | ||
745 | } | ||
746 | } | ||
747 | 700 | ||
748 | /* | 701 | /* |
749 | * Apply any multi-port quirk. | 702 | * Apply any multi-port quirk. |
@@ -752,11 +705,11 @@ static int serial_config(struct pcmcia_device * link) | |||
752 | info->multi = info->quirk->multi; | 705 | info->multi = info->quirk->multi; |
753 | 706 | ||
754 | if (info->multi > 1) | 707 | if (info->multi > 1) |
755 | multi_config(link); | 708 | i = multi_config(link); |
756 | else | 709 | else |
757 | simple_config(link); | 710 | i = simple_config(link); |
758 | 711 | ||
759 | if (info->ndev == 0) | 712 | if (i || info->ndev == 0) |
760 | goto failed; | 713 | goto failed; |
761 | 714 | ||
762 | /* | 715 | /* |
@@ -768,14 +721,11 @@ static int serial_config(struct pcmcia_device * link) | |||
768 | goto failed; | 721 | goto failed; |
769 | 722 | ||
770 | link->dev_node = &info->node[0]; | 723 | link->dev_node = &info->node[0]; |
771 | kfree(cfg_mem); | ||
772 | return 0; | 724 | return 0; |
773 | 725 | ||
774 | cs_failed: | ||
775 | cs_error(link, last_fn, last_ret); | ||
776 | failed: | 726 | failed: |
727 | dev_warn(&link->dev, "serial_cs: failed to initialize\n"); | ||
777 | serial_remove(link); | 728 | serial_remove(link); |
778 | kfree(cfg_mem); | ||
779 | return -ENODEV; | 729 | return -ENODEV; |
780 | } | 730 | } |
781 | 731 | ||
@@ -804,6 +754,7 @@ static struct pcmcia_device_id serial_ids[] = { | |||
804 | PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "REM10", 0x2e3ee845, 0x76df1d29), | 754 | PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "REM10", 0x2e3ee845, 0x76df1d29), |
805 | PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "XEM5600", 0x2e3ee845, 0xf1403719), | 755 | PCMCIA_PFC_DEVICE_PROD_ID13(1, "Xircom", "XEM5600", 0x2e3ee845, 0xf1403719), |
806 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4), | 756 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "AnyCom", "Fast Ethernet + 56K COMBO", 0x578ba6e7, 0xb0ac62c4), |
757 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "ATKK", "LM33-PCM-T", 0xba9eb7e2, 0x077c174e), | ||
807 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff), | 758 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff), |
808 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "Gateway 2000", "XJEM3336", 0xdd9989be, 0x662c394c), | 759 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "Gateway 2000", "XJEM3336", 0xdd9989be, 0x662c394c), |
809 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae), | 760 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "Grey Cell", "GCS3000", 0x2a151fac, 0x48b932ae), |
@@ -818,6 +769,7 @@ static struct pcmcia_device_id serial_ids[] = { | |||
818 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "PCMCIAs", "LanModem", 0xdcfe12d3, 0xc67c648f), | 769 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "PCMCIAs", "LanModem", 0xdcfe12d3, 0xc67c648f), |
819 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "TDK", "GlobalNetworker 3410/3412", 0x1eae9475, 0xd9a93bed), | 770 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "TDK", "GlobalNetworker 3410/3412", 0x1eae9475, 0xd9a93bed), |
820 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "Xircom", "CreditCard Ethernet+Modem II", 0x2e3ee845, 0xeca401bf), | 771 | PCMCIA_PFC_DEVICE_PROD_ID12(1, "Xircom", "CreditCard Ethernet+Modem II", 0x2e3ee845, 0xeca401bf), |
772 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x0e01), | ||
821 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x0a05), | 773 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x0a05), |
822 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x1101), | 774 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0032, 0x1101), |
823 | PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0104, 0x0070), | 775 | PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0104, 0x0070), |
@@ -880,6 +832,7 @@ static struct pcmcia_device_id serial_ids[] = { | |||
880 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"), | 832 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"), |
881 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"), | 833 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"), |
882 | PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */ | 834 | PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */ |
835 | PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC860", 0xd85f6206, 0x698f93db, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC860 3G Network Adapter R1 */ | ||
883 | PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ | 836 | PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ |
884 | PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */ | 837 | PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */ |
885 | PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */ | 838 | PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */ |
@@ -888,7 +841,7 @@ static struct pcmcia_device_id serial_ids[] = { | |||
888 | PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"), | 841 | PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"), |
889 | PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "cis/COMpad2.cis"), | 842 | PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "cis/COMpad2.cis"), |
890 | PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "cis/RS-COM-2P.cis"), | 843 | PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "cis/RS-COM-2P.cis"), |
891 | PCMCIA_DEVICE_CIS_MANF_CARD(0x0013, 0x0000, "GLOBETROTTER.cis"), | 844 | PCMCIA_DEVICE_CIS_MANF_CARD(0x0013, 0x0000, "cis/GLOBETROTTER.cis"), |
892 | PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100 1.00.",0x19ca78af,0xf964f42b), | 845 | PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100 1.00.",0x19ca78af,0xf964f42b), |
893 | PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100",0x19ca78af,0x71d98e83), | 846 | PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL100",0x19ca78af,0x71d98e83), |
894 | PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232 1.00.",0x19ca78af,0x69fb7490), | 847 | PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c1997.","SERIAL CARD: SL232 1.00.",0x19ca78af,0x69fb7490), |
@@ -922,6 +875,18 @@ static struct pcmcia_device_id serial_ids[] = { | |||
922 | }; | 875 | }; |
923 | MODULE_DEVICE_TABLE(pcmcia, serial_ids); | 876 | MODULE_DEVICE_TABLE(pcmcia, serial_ids); |
924 | 877 | ||
878 | MODULE_FIRMWARE("cis/PCMLM28.cis"); | ||
879 | MODULE_FIRMWARE("cis/DP83903.cis"); | ||
880 | MODULE_FIRMWARE("cis/3CCFEM556.cis"); | ||
881 | MODULE_FIRMWARE("cis/3CXEM556.cis"); | ||
882 | MODULE_FIRMWARE("cis/SW_8xx_SER.cis"); | ||
883 | MODULE_FIRMWARE("cis/SW_7xx_SER.cis"); | ||
884 | MODULE_FIRMWARE("cis/SW_555_SER.cis"); | ||
885 | MODULE_FIRMWARE("cis/MT5634ZLX.cis"); | ||
886 | MODULE_FIRMWARE("cis/COMpad2.cis"); | ||
887 | MODULE_FIRMWARE("cis/COMpad4.cis"); | ||
888 | MODULE_FIRMWARE("cis/RS-COM-2P.cis"); | ||
889 | |||
925 | static struct pcmcia_driver serial_cs_driver = { | 890 | static struct pcmcia_driver serial_cs_driver = { |
926 | .owner = THIS_MODULE, | 891 | .owner = THIS_MODULE, |
927 | .drv = { | 892 | .drv = { |