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()
310 dev_dbg(&link->dev, "serial_attach()\n"); in serial_probe()
315 return -ENOMEM; in serial_probe()
316 info->p_dev = link; in serial_probe()
317 link->priv = info; in serial_probe()
319 link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; in serial_probe()
321 link->config_flags |= CONF_ENABLE_SPKR; in serial_probe()
328 struct serial_info *info = link->priv; in serial_detach()
330 dev_dbg(&link->dev, "serial_detach\n"); in serial_detach()
354 uart.port.dev = &handle->dev; in setup_serial()
358 if (info->quirk && info->quirk->setup) in setup_serial()
359 info->quirk->setup(handle, &uart); in setup_serial()
365 return -EINVAL; in setup_serial()
368 info->line[info->ndev] = line; in setup_serial()
369 info->ndev++; in setup_serial()
379 struct serial_info *info = p_dev->priv; in pfc_config()
381 if ((p_dev->resource[1]->end != 0) && in pfc_config()
382 (resource_size(p_dev->resource[1]) == 8)) { in pfc_config()
383 port = p_dev->resource[1]->start; in pfc_config()
384 info->slave = 1; in pfc_config()
385 } else if ((info->manfid == MANFID_OSITECH) && in pfc_config()
386 (resource_size(p_dev->resource[0]) == 0x40)) { in pfc_config()
387 port = p_dev->resource[0]->start + 0x28; in pfc_config()
388 info->slave = 1; in pfc_config()
390 if (info->slave) in pfc_config()
391 return setup_serial(p_dev, info, port, p_dev->irq); in pfc_config()
393 dev_warn(&p_dev->dev, "no usable port range found, giving up\n"); in pfc_config()
394 return -ENODEV; in pfc_config()
402 if (p_dev->resource[0]->start == 0) in simple_config_check()
403 return -ENODEV; in simple_config_check()
406 p_dev->io_lines = 16; in simple_config_check()
408 if (p_dev->resource[0]->end != size_table[(*try >> 1)]) in simple_config_check()
409 return -ENODEV; in simple_config_check()
411 p_dev->resource[0]->end = 8; in simple_config_check()
412 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in simple_config_check()
413 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in simple_config_check()
424 if (p_dev->io_lines > 3) in simple_config_check_notpicky()
425 return -ENODEV; in simple_config_check_notpicky()
427 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in simple_config_check_notpicky()
428 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in simple_config_check_notpicky()
429 p_dev->resource[0]->end = 8; in simple_config_check_notpicky()
432 p_dev->resource[0]->start = base[j]; in simple_config_check_notpicky()
433 p_dev->io_lines = base[j] ? 16 : 3; in simple_config_check_notpicky()
437 return -ENODEV; in simple_config_check_notpicky()
442 struct serial_info *info = link->priv; in simple_config()
449 link->config_flags |= CONF_AUTO_SET_VPP; in simple_config()
462 dev_warn(&link->dev, "no usable port range found, giving up\n"); in simple_config()
463 return -1; in simple_config()
466 if (info->multi && (info->manfid == MANFID_3COM)) in simple_config()
467 link->config_index &= ~(0x08); in simple_config()
472 if (info->quirk && info->quirk->config) in simple_config()
473 info->quirk->config(link); in simple_config()
477 return -1; in simple_config()
478 return setup_serial(link, info, link->resource[0]->start, link->irq); in simple_config()
483 int *multi = priv_data; in multi_config_check() local
485 if (p_dev->resource[1]->end) in multi_config_check()
486 return -EINVAL; in multi_config_check()
492 if (p_dev->resource[0]->end <= 8) in multi_config_check()
493 return -EINVAL; in multi_config_check()
495 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in multi_config_check()
496 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in multi_config_check()
497 p_dev->resource[0]->end = *multi * 8; in multi_config_check()
500 return -ENODEV; in multi_config_check()
509 if (!p_dev->resource[0]->end || !p_dev->resource[1]->end || in multi_config_check_notpicky()
510 p_dev->resource[0]->start + 8 != p_dev->resource[1]->start) in multi_config_check_notpicky()
511 return -ENODEV; in multi_config_check_notpicky()
513 p_dev->resource[0]->end = p_dev->resource[1]->end = 8; in multi_config_check_notpicky()
514 p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; in multi_config_check_notpicky()
515 p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; in multi_config_check_notpicky()
518 return -ENODEV; in multi_config_check_notpicky()
520 *base2 = p_dev->resource[0]->start + 8; in multi_config_check_notpicky()
526 struct serial_info *info = link->priv; in multi_config()
529 /* First, look for a generic full-sized window */ in multi_config()
530 if (!pcmcia_loop_config(link, multi_config_check, &info->multi)) in multi_config()
531 base2 = link->resource[0]->start + 8; in multi_config()
534 info->multi = 2; in multi_config()
537 dev_warn(&link->dev, in multi_config()
539 return -ENODEV; in multi_config()
543 if (!link->irq) in multi_config()
544 dev_warn(&link->dev, "no usable IRQ found, continuing...\n"); in multi_config()
549 if (info->quirk && info->quirk->config) in multi_config()
550 info->quirk->config(link); in multi_config()
554 return -ENODEV; in multi_config()
556 /* The Oxford Semiconductor OXCF950 cards are in fact single-port: in multi_config()
560 if (info->manfid == MANFID_OXSEMI || (info->manfid == MANFID_POSSIO && in multi_config()
561 info->prodid == PRODID_POSSIO_GCC)) { in multi_config()
564 if (link->config_index == 1 || in multi_config()
565 link->config_index == 3) { in multi_config()
567 link->irq); in multi_config()
568 base2 = link->resource[0]->start; in multi_config()
570 err = setup_serial(link, info, link->resource[0]->start, in multi_config()
571 link->irq); in multi_config()
573 info->c950ctrl = base2; in multi_config()
579 if (info->quirk && info->quirk->wakeup) in multi_config()
580 info->quirk->wakeup(link); in multi_config()
585 setup_serial(link, info, link->resource[0]->start, link->irq); in multi_config()
586 for (i = 0; i < info->multi - 1; i++) in multi_config()
588 link->irq); in multi_config()
594 struct serial_info *info = p_dev->priv; in serial_check_for_multi()
596 if (!p_dev->resource[0]->end) in serial_check_for_multi()
597 return -EINVAL; in serial_check_for_multi()
599 if ((!p_dev->resource[1]->end) && (p_dev->resource[0]->end % 8 == 0)) in serial_check_for_multi()
600 info->multi = p_dev->resource[0]->end >> 3; in serial_check_for_multi()
602 if ((p_dev->resource[1]->end) && (p_dev->resource[0]->end == 8) in serial_check_for_multi()
603 && (p_dev->resource[1]->end == 8)) in serial_check_for_multi()
604 info->multi = 2; in serial_check_for_multi()
612 struct serial_info *info = link->priv; in serial_config()
615 dev_dbg(&link->dev, "serial_config\n"); in serial_config()
618 info->multi = (link->socket->functions > 1); in serial_config()
621 info->manfid = link->manf_id; in serial_config()
622 info->prodid = link->card_id; in serial_config()
626 quirks[i].manfid == info->manfid) && in serial_config()
628 quirks[i].prodid == info->prodid)) { in serial_config()
629 info->quirk = &quirks[i]; in serial_config()
634 * Another check for dual-serial cards: look for either serial or in serial_config()
637 if ((info->multi == 0) && in serial_config()
638 (link->has_func_id) && in serial_config()
639 (link->socket->pcmcia_pfc == 0) && in serial_config()
640 ((link->func_id == CISTPL_FUNCID_MULTI) || in serial_config()
641 (link->func_id == CISTPL_FUNCID_SERIAL))) { in serial_config()
647 * Apply any multi-port quirk. in serial_config()
649 if (info->quirk && info->quirk->multi != -1) in serial_config()
650 info->multi = info->quirk->multi; in serial_config()
652 dev_info(&link->dev, in serial_config()
653 "trying to set up [0x%04x:0x%04x] (pfc: %d, multi: %d, quirk: %p)\n", in serial_config()
654 link->manf_id, link->card_id, in serial_config()
655 link->socket->pcmcia_pfc, info->multi, info->quirk); in serial_config()
656 if (link->socket->pcmcia_pfc) in serial_config()
658 else if (info->multi > 1) in serial_config()
663 if (i || info->ndev == 0) in serial_config()
667 * Apply any post-init quirk. FIXME: This should really happen in serial_config()
670 if (info->quirk && info->quirk->post) in serial_config()
671 if (info->quirk->post(link)) in serial_config()
677 dev_warn(&link->dev, "failed to initialize\n"); in serial_config()
679 return -ENODEV; in serial_config()
707 PCMCIA_PFC_DEVICE_PROD_ID12(1, "ATKK", "LM33-PCM-T", 0xba9eb7e2, 0x077c174e),
708 PCMCIA_PFC_DEVICE_PROD_ID12(1, "D-Link", "DME336T", 0x1a424a1c, 0xb23897ff),
714 PCMCIA_PFC_DEVICE_PROD_ID12(1, "MICRO RESEARCH", "COMBO-L/M-336", 0xb2ced065, 0x3ced0555),
715 PCMCIA_PFC_DEVICE_PROD_ID12(1, "NEC", "PK-UG-J001", 0x18df0ba0, 0x831b1064),
730 …PCMCIA_MFC_DEVICE_PROD_ID123(1, "APEX DATA", "MULTICARD", "ETHERNET-MODEM", 0x11c2da09, 0x7289dc5d…
741 PCMCIA_DEVICE_MANF_CARD(0x0105, 0x100a), /* Xircom CM-56G */
751 PCMCIA_DEVICE_MANF_CARD(0x0124, 0x0100), /* Nokia DTP-2 ver II */
760 PCMCIA_DEVICE_PROD_ID134("ADV", "TECH", "COMpad-32/85", 0x67459937, 0x916d02ba, 0x8fbe92ae),
771 PCMCIA_DEVICE_PROD_ID12("Computerboards, Inc.", "PCM-COM422", 0xd0b78f51, 0x7e2d49ed),
776 PCMCIA_DEVICE_PROD_ID12("Intertex", "IX34-PCMCIA", 0xf8a097e3, 0x97880447),
777 …PCMCIA_DEVICE_PROD_ID12("IOTech Inc ", "PCMCIA Dual RS-232 Serial Port Card", 0x3bd2d898, 0x92abc9…
779 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT1432LT", 0x5f73be51, 0x0b3e2383),
780 PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT2834LT", 0x5f73be51, 0x4cd7c09e),
784 …PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "PCMCIA Dual RS-232 Serial Port Card", 0xc4420b35, 0x92abc9…
785 PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "Dual RS-232 Serial Port PC Card", 0xc4420b35, 0x031a380d),
788 …PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCML…
789 …PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCML…
803 …ARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
804 …RD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
806 …PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.c…
807 …PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.c…
808 …PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b62…
809 PCMCIA_DEVICE_CIS_PROD_ID2("RS-COM 2P", 0xad20b156, "cis/RS-COM-2P.cis"),
816 …PCMCIA_DEVICE_PROD_ID12("ELAN DIGITAL SYSTEMS LTD, c2000.", "SERIAL CARD: CF232-5", 0x63f2e0bd, 0x…
818 PCMCIA_DEVICE_PROD_ID12("Elan", "Serial Port: CF232-5", 0x3beb8cf2, 0x20da4262),
854 MODULE_FIRMWARE("cis/RS-COM-2P.cis");