aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/serial_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/serial/serial_cs.c')
-rw-r--r--drivers/serial/serial_cs.c179
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
58static int pc_debug = PCMCIA_DEBUG;
59module_param(pc_debug, int, 0644);
60#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
61static 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 */
116static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) 112static 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_
121static int quirk_post_ibm(struct pcmcia_device *link) 117static 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, &reg);
123 if (ret)
124 goto failed;
125 125
126 last_ret = pcmcia_access_configuration_register(link, &reg);
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, &reg); 128 ret = pcmcia_access_configuration_register(link, &reg);
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
429static int
430first_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
444static int simple_config_check(struct pcmcia_device *p_dev, 426static 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
528found_port: 509found_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
643static 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)
676static int serial_config(struct pcmcia_device * link) 670static 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
774cs_failed:
775 cs_error(link, last_fn, last_ret);
776failed: 726failed:
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};
923MODULE_DEVICE_TABLE(pcmcia, serial_ids); 876MODULE_DEVICE_TABLE(pcmcia, serial_ids);
924 877
878MODULE_FIRMWARE("cis/PCMLM28.cis");
879MODULE_FIRMWARE("cis/DP83903.cis");
880MODULE_FIRMWARE("cis/3CCFEM556.cis");
881MODULE_FIRMWARE("cis/3CXEM556.cis");
882MODULE_FIRMWARE("cis/SW_8xx_SER.cis");
883MODULE_FIRMWARE("cis/SW_7xx_SER.cis");
884MODULE_FIRMWARE("cis/SW_555_SER.cis");
885MODULE_FIRMWARE("cis/MT5634ZLX.cis");
886MODULE_FIRMWARE("cis/COMpad2.cis");
887MODULE_FIRMWARE("cis/COMpad4.cis");
888MODULE_FIRMWARE("cis/RS-COM-2P.cis");
889
925static struct pcmcia_driver serial_cs_driver = { 890static struct pcmcia_driver serial_cs_driver = {
926 .owner = THIS_MODULE, 891 .owner = THIS_MODULE,
927 .drv = { 892 .drv = {