diff options
Diffstat (limited to 'drivers/pcmcia/pcmcia_resource.c')
-rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index f4dcea6ac44b..16504f852af2 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
@@ -442,6 +442,28 @@ int pcmcia_modify_configuration(struct pcmcia_device *p_dev, | |||
442 | (mod->Attributes & CONF_VPP2_CHANGE_VALID)) | 442 | (mod->Attributes & CONF_VPP2_CHANGE_VALID)) |
443 | return CS_BAD_VPP; | 443 | return CS_BAD_VPP; |
444 | 444 | ||
445 | if (mod->Attributes & CONF_IO_CHANGE_WIDTH) { | ||
446 | pccard_io_map io_off = { 0, 0, 0, 0, 1 }; | ||
447 | pccard_io_map io_on; | ||
448 | int i; | ||
449 | |||
450 | io_on.speed = io_speed; | ||
451 | for (i = 0; i < MAX_IO_WIN; i++) { | ||
452 | if (!s->io[i].res) | ||
453 | continue; | ||
454 | io_off.map = i; | ||
455 | io_on.map = i; | ||
456 | |||
457 | io_on.flags = MAP_ACTIVE | IO_DATA_PATH_WIDTH_8; | ||
458 | io_on.start = s->io[i].res->start; | ||
459 | io_on.stop = s->io[i].res->end; | ||
460 | |||
461 | s->ops->set_io_map(s, &io_off); | ||
462 | mdelay(40); | ||
463 | s->ops->set_io_map(s, &io_on); | ||
464 | } | ||
465 | } | ||
466 | |||
445 | return CS_SUCCESS; | 467 | return CS_SUCCESS; |
446 | } /* modify_configuration */ | 468 | } /* modify_configuration */ |
447 | EXPORT_SYMBOL(pcmcia_modify_configuration); | 469 | EXPORT_SYMBOL(pcmcia_modify_configuration); |
@@ -479,7 +501,6 @@ int pcmcia_release_configuration(struct pcmcia_device *p_dev) | |||
479 | 501 | ||
480 | return CS_SUCCESS; | 502 | return CS_SUCCESS; |
481 | } /* pcmcia_release_configuration */ | 503 | } /* pcmcia_release_configuration */ |
482 | EXPORT_SYMBOL(pcmcia_release_configuration); | ||
483 | 504 | ||
484 | 505 | ||
485 | /** pcmcia_release_io | 506 | /** pcmcia_release_io |