diff options
| -rw-r--r-- | drivers/serial/serial_cs.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 704922073bbf..1267cbed52f5 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
| @@ -85,6 +85,7 @@ struct serial_quirk { | |||
| 85 | unsigned int prodid; | 85 | unsigned int prodid; |
| 86 | int multi; /* 1 = multifunction, > 1 = # ports */ | 86 | int multi; /* 1 = multifunction, > 1 = # ports */ |
| 87 | void (*config)(struct pcmcia_device *); | 87 | void (*config)(struct pcmcia_device *); |
| 88 | void (*setup)(struct pcmcia_device *, struct uart_port *); | ||
| 88 | void (*wakeup)(struct pcmcia_device *); | 89 | void (*wakeup)(struct pcmcia_device *); |
| 89 | int (*post)(struct pcmcia_device *); | 90 | int (*post)(struct pcmcia_device *); |
| 90 | }; | 91 | }; |
| @@ -108,6 +109,16 @@ struct serial_cfg_mem { | |||
| 108 | u_char buf[256]; | 109 | u_char buf[256]; |
| 109 | }; | 110 | }; |
| 110 | 111 | ||
| 112 | /* | ||
| 113 | * vers_1 5.0, "Brain Boxes", "2-Port RS232 card", "r6" | ||
| 114 | * manfid 0x0160, 0x0104 | ||
| 115 | * This card appears to have a 14.7456MHz clock. | ||
| 116 | */ | ||
| 117 | static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) | ||
| 118 | { | ||
| 119 | port->uartclk = 14745600; | ||
| 120 | } | ||
| 121 | |||
| 111 | static int quirk_post_ibm(struct pcmcia_device *link) | 122 | static int quirk_post_ibm(struct pcmcia_device *link) |
| 112 | { | 123 | { |
| 113 | conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; | 124 | conf_reg_t reg = { 0, CS_READ, 0x800, 0 }; |
| @@ -192,6 +203,11 @@ static void quirk_config_socket(struct pcmcia_device *link) | |||
| 192 | 203 | ||
| 193 | static const struct serial_quirk quirks[] = { | 204 | static const struct serial_quirk quirks[] = { |
| 194 | { | 205 | { |
| 206 | .manfid = 0x0160, | ||
| 207 | .prodid = 0x0104, | ||
| 208 | .multi = -1, | ||
| 209 | .setup = quirk_setup_brainboxes_0104, | ||
| 210 | }, { | ||
| 195 | .manfid = MANFID_IBM, | 211 | .manfid = MANFID_IBM, |
| 196 | .prodid = ~0, | 212 | .prodid = ~0, |
| 197 | .multi = -1, | 213 | .multi = -1, |
| @@ -386,6 +402,10 @@ static int setup_serial(struct pcmcia_device *handle, struct serial_info * info, | |||
| 386 | port.dev = &handle_to_dev(handle); | 402 | port.dev = &handle_to_dev(handle); |
| 387 | if (buggy_uart) | 403 | if (buggy_uart) |
| 388 | port.flags |= UPF_BUGGY_UART; | 404 | port.flags |= UPF_BUGGY_UART; |
| 405 | |||
| 406 | if (info->quirk && info->quirk->setup) | ||
| 407 | info->quirk->setup(handle, &port); | ||
| 408 | |||
| 389 | line = serial8250_register_port(&port); | 409 | line = serial8250_register_port(&port); |
| 390 | if (line < 0) { | 410 | if (line < 0) { |
| 391 | printk(KERN_NOTICE "serial_cs: serial8250_register_port() at " | 411 | printk(KERN_NOTICE "serial_cs: serial8250_register_port() at " |
