diff options
Diffstat (limited to 'drivers/serial/serial_cs.c')
| -rw-r--r-- | drivers/serial/serial_cs.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index fe7adcdfde9e..141c69554bd4 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
| @@ -335,8 +335,8 @@ static int serial_probe(struct pcmcia_device *link) | |||
| 335 | info->p_dev = link; | 335 | info->p_dev = link; |
| 336 | link->priv = info; | 336 | link->priv = info; |
| 337 | 337 | ||
| 338 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; | 338 | link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; |
| 339 | link->io.NumPorts1 = 8; | 339 | link->resource[0]->end = 8; |
| 340 | link->conf.Attributes = CONF_ENABLE_IRQ; | 340 | link->conf.Attributes = CONF_ENABLE_IRQ; |
| 341 | if (do_sound) { | 341 | if (do_sound) { |
| 342 | link->conf.Attributes |= CONF_ENABLE_SPKR; | 342 | link->conf.Attributes |= CONF_ENABLE_SPKR; |
| @@ -424,12 +424,13 @@ static int simple_config_check(struct pcmcia_device *p_dev, | |||
| 424 | p_dev->conf.Vpp = | 424 | p_dev->conf.Vpp = |
| 425 | cf->vpp1.param[CISTPL_POWER_VNOM] / 10000; | 425 | cf->vpp1.param[CISTPL_POWER_VNOM] / 10000; |
| 426 | 426 | ||
| 427 | p_dev->io_lines = ((*try & 0x1) == 0) ? | ||
| 428 | 16 : cf->io.flags & CISTPL_IO_LINES_MASK; | ||
| 429 | |||
| 427 | if ((cf->io.nwin > 0) && (cf->io.win[0].len == size_table[(*try >> 1)]) | 430 | if ((cf->io.nwin > 0) && (cf->io.win[0].len == size_table[(*try >> 1)]) |
| 428 | && (cf->io.win[0].base != 0)) { | 431 | && (cf->io.win[0].base != 0)) { |
| 429 | p_dev->io.BasePort1 = cf->io.win[0].base; | 432 | p_dev->resource[0]->start = cf->io.win[0].base; |
| 430 | p_dev->io.IOAddrLines = ((*try & 0x1) == 0) ? | 433 | if (!pcmcia_request_io(p_dev)) |
| 431 | 16 : cf->io.flags & CISTPL_IO_LINES_MASK; | ||
| 432 | if (!pcmcia_request_io(p_dev, &p_dev->io)) | ||
| 433 | return 0; | 434 | return 0; |
| 434 | } | 435 | } |
| 435 | return -EINVAL; | 436 | return -EINVAL; |
| @@ -446,9 +447,9 @@ static int simple_config_check_notpicky(struct pcmcia_device *p_dev, | |||
| 446 | 447 | ||
| 447 | if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { | 448 | if ((cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) { |
| 448 | for (j = 0; j < 5; j++) { | 449 | for (j = 0; j < 5; j++) { |
| 449 | p_dev->io.BasePort1 = base[j]; | 450 | p_dev->resource[0]->start = base[j]; |
| 450 | p_dev->io.IOAddrLines = base[j] ? 16 : 3; | 451 | p_dev->io_lines = base[j] ? 16 : 3; |
| 451 | if (!pcmcia_request_io(p_dev, &p_dev->io)) | 452 | if (!pcmcia_request_io(p_dev)) |
| 452 | return 0; | 453 | return 0; |
| 453 | } | 454 | } |
| 454 | } | 455 | } |
| @@ -521,9 +522,9 @@ static int multi_config_check(struct pcmcia_device *p_dev, | |||
| 521 | /* The quad port cards have bad CIS's, so just look for a | 522 | /* The quad port cards have bad CIS's, so just look for a |
| 522 | window larger than 8 ports and assume it will be right */ | 523 | window larger than 8 ports and assume it will be right */ |
| 523 | if ((cf->io.nwin == 1) && (cf->io.win[0].len > 8)) { | 524 | if ((cf->io.nwin == 1) && (cf->io.win[0].len > 8)) { |
| 524 | p_dev->io.BasePort1 = cf->io.win[0].base; | 525 | p_dev->resource[0]->start = cf->io.win[0].base; |
| 525 | p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK; | 526 | p_dev->io_lines = cf->io.flags & CISTPL_IO_LINES_MASK; |
| 526 | if (!pcmcia_request_io(p_dev, &p_dev->io)) { | 527 | if (!pcmcia_request_io(p_dev)) { |
| 527 | *base2 = p_dev->resource[0]->start + 8; | 528 | *base2 = p_dev->resource[0]->start + 8; |
| 528 | return 0; | 529 | return 0; |
| 529 | } | 530 | } |
| @@ -540,10 +541,10 @@ static int multi_config_check_notpicky(struct pcmcia_device *p_dev, | |||
| 540 | int *base2 = priv_data; | 541 | int *base2 = priv_data; |
| 541 | 542 | ||
| 542 | if (cf->io.nwin == 2) { | 543 | if (cf->io.nwin == 2) { |
| 543 | p_dev->io.BasePort1 = cf->io.win[0].base; | 544 | p_dev->resource[0]->start = cf->io.win[0].base; |
| 544 | p_dev->io.BasePort2 = cf->io.win[1].base; | 545 | p_dev->resource[1]->start = cf->io.win[1].base; |
| 545 | p_dev->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK; | 546 | p_dev->io_lines = cf->io.flags & CISTPL_IO_LINES_MASK; |
| 546 | if (!pcmcia_request_io(p_dev, &p_dev->io)) { | 547 | if (!pcmcia_request_io(p_dev)) { |
| 547 | *base2 = p_dev->resource[1]->start; | 548 | *base2 = p_dev->resource[1]->start; |
| 548 | return 0; | 549 | return 0; |
| 549 | } | 550 | } |
| @@ -557,10 +558,10 @@ static int multi_config(struct pcmcia_device *link) | |||
| 557 | int i, base2 = 0; | 558 | int i, base2 = 0; |
| 558 | 559 | ||
| 559 | /* First, look for a generic full-sized window */ | 560 | /* First, look for a generic full-sized window */ |
| 560 | link->io.NumPorts1 = info->multi * 8; | 561 | link->resource[0]->end = info->multi * 8; |
| 561 | if (pcmcia_loop_config(link, multi_config_check, &base2)) { | 562 | if (pcmcia_loop_config(link, multi_config_check, &base2)) { |
| 562 | /* If that didn't work, look for two windows */ | 563 | /* If that didn't work, look for two windows */ |
| 563 | link->io.NumPorts1 = link->io.NumPorts2 = 8; | 564 | link->resource[0]->end = link->resource[1]->end = 8; |
| 564 | info->multi = 2; | 565 | info->multi = 2; |
| 565 | if (pcmcia_loop_config(link, multi_config_check_notpicky, | 566 | if (pcmcia_loop_config(link, multi_config_check_notpicky, |
| 566 | &base2)) { | 567 | &base2)) { |
