Lines Matching +full:multi +full:-

1 // SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1)
69 /* Table of multi-port card ID's */
74 int multi; /* 1 = multifunction, > 1 = # ports */ member
84 int multi; member
100 * vers_1 5.0, "Brain Boxes", "2-Port RS232 card", "r6"
110 uart->port.uartclk = 14745600; in quirk_setup_brainboxes_0104()
128 return -ENODEV; in quirk_post_ibm()
133 * be handled by setting the quirk entry .multi = 0 | 1 ?
137 struct serial_info *info = link->priv; in quirk_config_nokia()
139 if (info->multi > 1) in quirk_config_nokia()
140 info->multi = 1; in quirk_config_nokia()
145 struct serial_info *info = link->priv; in quirk_wakeup_oxsemi()
147 if (info->c950ctrl) in quirk_wakeup_oxsemi()
148 outb(12, info->c950ctrl + 1); in quirk_wakeup_oxsemi()
159 struct serial_info *info = link->priv; in quirk_wakeup_possio_gcc()
160 unsigned int ctrl = info->c950ctrl; in quirk_wakeup_possio_gcc()
182 struct serial_info *info = link->priv; in quirk_config_socket()
184 if (info->multi) in quirk_config_socket()
185 link->config_flags |= CONF_ENABLE_ESR; in quirk_config_socket()
192 .multi = -1,
197 .multi = -1,
202 .multi = -1,
207 .multi = 2,
211 .multi = 4,
215 .multi = -1,
220 .multi = 4,
224 .multi = -1,
229 .multi = -1,
234 .multi = 2,
238 .multi = 2,
242 .multi = 2,
246 .multi = 4,
250 .multi = 2,
255 .multi = -1,
266 struct serial_info *info = link->priv; in serial_remove()
269 dev_dbg(&link->dev, "serial_release\n"); in serial_remove()
274 for (i = 0; i < info->ndev; i++) in serial_remove()
275 serial8250_unregister_port(info->line[i]); in serial_remove()
277 if (!info->slave) in serial_remove()
283 struct serial_info *info = link->priv; in serial_suspend()
286 for (i = 0; i < info->ndev; i++) in serial_suspend()
287 serial8250_suspend_port(info->line[i]); in serial_suspend()
294 struct serial_info *info = link->priv; in serial_resume()
297 for (i = 0; i < info->ndev; i++) in serial_resume()
298 serial8250_resume_port(info->line[i]); in serial_resume()
300 if (info->quirk && info->quirk->wakeup) in serial_resume()
301 info->quirk->wakeup(link); in serial_resume()
311 dev_dbg(&link->dev, "serial_attach()\n"); in serial_probe()
316 return -ENOMEM; in serial_probe()
317 info->p_dev = link; in serial_probe()
318 link->priv = info; in serial_probe()
320 link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; in serial_probe()
322 link->config_flags |= CONF_ENABLE_SPKR; in serial_probe()
337 struct serial_info *info = link->priv; in serial_detach()
339 dev_dbg(&link->dev, "serial_detach\n"); in serial_detach()
363 uart.port.dev = &handle->dev; in setup_serial()
367 if (info->quirk && info->quirk->setup) in setup_serial()
368 info->quirk->setup(handle, &uart); in setup_serial()
374 return -EINVAL; in setup_serial()
377 info->line[info->ndev] = line; in setup_serial()
378 info->ndev++; in setup_serial()
388 struct serial_info *info = p_dev->priv; in pfc_config()
390 if ((p_dev->resource[1]->end != 0) && in pfc_config()
391 (resource_size(p_dev->resource[1]) == 8)) { in pfc_config()
392 port = p_dev->resource[1]->start; in pfc_config()
393 info->slave = 1; in pfc_config()
394 } else if ((info->manfid == MANFID_OSITECH) && in pfc_config()
395 (resource_size(p_dev->resource[0]) == 0x40)) { in pfc_config()
396 port = p_dev->resource[0]->start + 0x28; in pfc_config()
397 info->slave = 1; in pfc_config()
399 if (info->slave) in pfc_config()
400 return setup_serial(p_dev, info, port, p_dev->irq); in pfc_config()
402 dev_warn(&p_dev->dev, "no usable port range found, giving up\n"); in pfc_config()
403 return -ENODEV; in pfc_config()
411 if (p_dev->resource[0]->start == 0) in simple_config_check()
412 return -ENODEV; in simple_config_check()
415 p_dev->io_lines = 16; in simple_config_check()
417 if (p_dev->resource[0]->end != size_table[(*try >> 1)]) in simple_config_check()
418 return -ENODEV; in simple_config_check()
420 p_dev->resource[0]->end = 8; in simple_config_check()
421 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in simple_config_check()
422 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in simple_config_check()
433 if (p_dev->io_lines > 3) in simple_config_check_notpicky()
434 return -ENODEV; in simple_config_check_notpicky()
436 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in simple_config_check_notpicky()
437 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in simple_config_check_notpicky()
438 p_dev->resource[0]->end = 8; in simple_config_check_notpicky()
441 p_dev->resource[0]->start = base[j]; in simple_config_check_notpicky()
442 p_dev->io_lines = base[j] ? 16 : 3; in simple_config_check_notpicky()
446 return -ENODEV; in simple_config_check_notpicky()
451 struct serial_info *info = link->priv; in simple_config()
458 link->config_flags |= CONF_AUTO_SET_VPP; in simple_config()
470 dev_warn(&link->dev, "no usable port range found, giving up\n"); in simple_config()
475 if (info->multi && (info->manfid == MANFID_3COM)) in simple_config()
476 link->config_index &= ~(0x08); in simple_config()
481 if (info->quirk && info->quirk->config) in simple_config()
482 info->quirk->config(link); in simple_config()
487 return setup_serial(link, info, link->resource[0]->start, link->irq); in simple_config()
492 int *multi = priv_data; in multi_config_check() local
494 if (p_dev->resource[1]->end) in multi_config_check()
495 return -EINVAL; in multi_config_check()
501 if (p_dev->resource[0]->end <= 8) in multi_config_check()
502 return -EINVAL; in multi_config_check()
504 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in multi_config_check()
505 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in multi_config_check()
506 p_dev->resource[0]->end = *multi * 8; in multi_config_check()
509 return -ENODEV; in multi_config_check()
518 if (!p_dev->resource[0]->end || !p_dev->resource[1]->end || in multi_config_check_notpicky()
519 p_dev->resource[0]->start + 8 != p_dev->resource[1]->start) in multi_config_check_notpicky()
520 return -ENODEV; in multi_config_check_notpicky()
522 p_dev->resource[0]->end = p_dev->resource[1]->end = 8; in multi_config_check_notpicky()
523 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in multi_config_check_notpicky()
524 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in multi_config_check_notpicky()
527 return -ENODEV; in multi_config_check_notpicky()
529 *base2 = p_dev->resource[0]->start + 8; in multi_config_check_notpicky()
535 struct serial_info *info = link->priv; in multi_config()
538 /* First, look for a generic full-sized window */ in multi_config()
539 if (!pcmcia_loop_config(link, multi_config_check, &info->multi)) in multi_config()
540 base2 = link->resource[0]->start + 8; in multi_config()
543 info->multi = 2; in multi_config()
546 dev_warn(&link->dev, in multi_config()
548 return -ENODEV; in multi_config()
552 if (!link->irq) in multi_config()
553 dev_warn(&link->dev, "no usable IRQ found, continuing...\n"); in multi_config()
558 if (info->quirk && info->quirk->config) in multi_config()
559 info->quirk->config(link); in multi_config()
563 return -ENODEV; in multi_config()
565 /* The Oxford Semiconductor OXCF950 cards are in fact single-port: in multi_config()
569 if (info->manfid == MANFID_OXSEMI || (info->manfid == MANFID_POSSIO && in multi_config()
570 info->prodid == PRODID_POSSIO_GCC)) { in multi_config()
571 if (link->config_index == 1 || in multi_config()
572 link->config_index == 3) { in multi_config()
573 setup_serial(link, info, base2, link->irq); in multi_config()
574 base2 = link->resource[0]->start; in multi_config()
576 setup_serial(link, info, link->resource[0]->start, in multi_config()
577 link->irq); in multi_config()
579 info->c950ctrl = base2; in multi_config()
585 if (info->quirk && info->quirk->wakeup) in multi_config()
586 info->quirk->wakeup(link); in multi_config()
591 setup_serial(link, info, link->resource[0]->start, link->irq); in multi_config()
592 for (i = 0; i < info->multi - 1; i++) in multi_config()
594 link->irq); in multi_config()
600 struct serial_info *info = p_dev->priv; in serial_check_for_multi()
602 if (!p_dev->resource[0]->end) in serial_check_for_multi()
603 return -EINVAL; in serial_check_for_multi()
605 if ((!p_dev->resource[1]->end) && (p_dev->resource[0]->end % 8 == 0)) in serial_check_for_multi()
606 info->multi = p_dev->resource[0]->end >> 3; in serial_check_for_multi()
608 if ((p_dev->resource[1]->end) && (p_dev->resource[0]->end == 8) in serial_check_for_multi()
609 && (p_dev->resource[1]->end == 8)) in serial_check_for_multi()
610 info->multi = 2; in serial_check_for_multi()
618 struct serial_info *info = link->priv; in serial_config()
621 dev_dbg(&link->dev, "serial_config\n"); in serial_config()
624 info->multi = (link->socket->functions > 1); in serial_config()
627 info->manfid = link->manf_id; in serial_config()
628 info->prodid = link->card_id; in serial_config()
632 quirks[i].manfid == info->manfid) && in serial_config()
634 quirks[i].prodid == info->prodid)) { in serial_config()
635 info->quirk = &quirks[i]; in serial_config()
640 * Another check for dual-serial cards: look for either serial or in serial_config()
643 if ((info->multi == 0) && in serial_config()
644 (link->has_func_id) && in serial_config()
645 (link->socket->pcmcia_pfc == 0) && in serial_config()
646 ((link->func_id == CISTPL_FUNCID_MULTI) || in serial_config()
647 (link->func_id == CISTPL_FUNCID_SERIAL))) { in serial_config()
653 * Apply any multi-port quirk. in serial_config()
655 if (info->quirk && info->quirk->multi != -1) in serial_config()
656 info->multi = info->quirk->multi; in serial_config()
658 dev_info(&link->dev, in serial_config()
659 "trying to set up [0x%04x:0x%04x] (pfc: %d, multi: %d, quirk: %p)\n", in serial_config()
660 link->manf_id, link->card_id, in serial_config()
661 link->socket->pcmcia_pfc, info->multi, info->quirk); in serial_config()
662 if (link->socket->pcmcia_pfc) in serial_config()
664 else if (info->multi > 1) in serial_config()
669 if (i || info->ndev == 0) in serial_config()
673 * Apply any post-init quirk. FIXME: This should really happen in serial_config()
676 if (info->quirk && info->quirk->post) in serial_config()
677 if (info->quirk->post(link)) in serial_config()
683 dev_warn(&link->dev, "failed to initialize\n"); in serial_config()
685 return -ENODEV; in serial_config()
713 PCMCIA_PFC_DEVICE_PROD_ID12(1, "ATKK", "LM33-PCM-T", 0xba9eb7e2, 0x077c174e),
714 PCMCIA_PFC_DEVICE_PROD_ID12(1, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff),
720 PCMCIA_PFC_DEVICE_PROD_ID12(1, "MICRO RESEARCH", "COMBO-L/M-336", 0xb2ced065, 0x3ced0555),
721 PCMCIA_PFC_DEVICE_PROD_ID12(1, "NEC", "PK-UG-J001", 0x18df0ba0, 0x831b1064),
736 …PCMCIA_MFC_DEVICE_PROD_ID123(1, "APEX DATA", "MULTICARD", "ETHERNET-MODEM", 0x11c2da09, 0x7289dc5d…
747 PCMCIA_DEVICE_MANF_CARD(0x0105, 0x100a), /* Xircom CM-56G */
757 PCMCIA_DEVICE_MANF_CARD(0x0124, 0x0100), /* Nokia DTP-2 ver II */
766 PCMCIA_DEVICE_PROD_ID134("ADV", "TECH", "COMpad-32/85", 0x67459937, 0x916d02ba, 0x8fbe92ae),
777 PCMCIA_DEVICE_PROD_ID12("Computerboards, Inc.", "PCM-COM422", 0xd0b78f51, 0x7e2d49ed),
782 PCMCIA_DEVICE_PROD_ID12("Intertex", "IX34-PCMCIA", 0xf8a097e3, 0x97880447),
783 …PCMCIA_DEVICE_PROD_ID12("IOTech Inc ", "PCMCIA Dual RS-232 Serial Port Card", 0x3bd2d898, 0x92abc9…
785 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT1432LT", 0x5f73be51, 0x0b3e2383),
786 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT2834LT", 0x5f73be51, 0x4cd7c09e),
789 PCMCIA_DEVICE_PROD_ID12("Option International", "GSM-Ready 56K/ISDN", 0x9d7cd6f5, 0xb23844aa),
791 …PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "PCMCIA Dual RS-232 Serial Port Card", 0xc4420b35, 0x92abc9…
792 PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "Dual RS-232 Serial Port PC Card", 0xc4420b35, 0x031a380d),
795 …PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCML…
796 …PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCML…
810 …ARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
811 …RD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
813 …PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.c…
814 …PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.c…
815 …PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b62…
816 PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "cis/RS-COM-2P.cis"),
822 …PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.", "SERIAL CARD: CF232-5", 0x63f2e0bd, 0x…
824 PCMCIA_DEVICE_PROD_ID12("Elan", "Serial Port: CF232-5", 0x3beb8cf2, 0x20da4262),
860 MODULE_FIRMWARE("cis/RS-COM-2P.cis");