diff options
Diffstat (limited to 'drivers/ide/legacy')
-rw-r--r-- | drivers/ide/legacy/ide-cs.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index ef79805218e4..982b74af8c29 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
@@ -406,6 +406,28 @@ void ide_release(dev_link_t *link) | |||
406 | 406 | ||
407 | } /* ide_release */ | 407 | } /* ide_release */ |
408 | 408 | ||
409 | static int ide_suspend(struct pcmcia_device *dev) | ||
410 | { | ||
411 | dev_link_t *link = dev_to_instance(dev); | ||
412 | |||
413 | link->state |= DEV_SUSPEND; | ||
414 | if (link->state & DEV_CONFIG) | ||
415 | pcmcia_release_configuration(link->handle); | ||
416 | |||
417 | return 0; | ||
418 | } | ||
419 | |||
420 | static int ide_resume(struct pcmcia_device *dev) | ||
421 | { | ||
422 | dev_link_t *link = dev_to_instance(dev); | ||
423 | |||
424 | link->state &= ~DEV_SUSPEND; | ||
425 | if (DEV_OK(link)) | ||
426 | pcmcia_request_configuration(link->handle, &link->conf); | ||
427 | |||
428 | return 0; | ||
429 | } | ||
430 | |||
409 | /*====================================================================== | 431 | /*====================================================================== |
410 | 432 | ||
411 | The card status event handler. Mostly, this schedules other | 433 | The card status event handler. Mostly, this schedules other |
@@ -432,20 +454,6 @@ int ide_event(event_t event, int priority, | |||
432 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; | 454 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; |
433 | ide_config(link); | 455 | ide_config(link); |
434 | break; | 456 | break; |
435 | case CS_EVENT_PM_SUSPEND: | ||
436 | link->state |= DEV_SUSPEND; | ||
437 | /* Fall through... */ | ||
438 | case CS_EVENT_RESET_PHYSICAL: | ||
439 | if (link->state & DEV_CONFIG) | ||
440 | pcmcia_release_configuration(link->handle); | ||
441 | break; | ||
442 | case CS_EVENT_PM_RESUME: | ||
443 | link->state &= ~DEV_SUSPEND; | ||
444 | /* Fall through... */ | ||
445 | case CS_EVENT_CARD_RESET: | ||
446 | if (DEV_OK(link)) | ||
447 | pcmcia_request_configuration(link->handle, &link->conf); | ||
448 | break; | ||
449 | } | 457 | } |
450 | return 0; | 458 | return 0; |
451 | } /* ide_event */ | 459 | } /* ide_event */ |
@@ -498,6 +506,8 @@ static struct pcmcia_driver ide_cs_driver = { | |||
498 | .event = ide_event, | 506 | .event = ide_event, |
499 | .detach = ide_detach, | 507 | .detach = ide_detach, |
500 | .id_table = ide_ids, | 508 | .id_table = ide_ids, |
509 | .suspend = ide_suspend, | ||
510 | .resume = ide_resume, | ||
501 | }; | 511 | }; |
502 | 512 | ||
503 | static int __init init_ide_cs(void) | 513 | static int __init init_ide_cs(void) |