aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/legacy/ide-cs.c
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2005-11-14 15:21:18 -0500
committerDominik Brodowski <linux@dominikbrodowski.net>2006-01-05 17:59:02 -0500
commit98e4c28b7ec390c2dad6a4c69d69629c0f7e8b10 (patch)
treeb3d46f0643352e541d6a39e6da09059687cf713d /drivers/ide/legacy/ide-cs.c
parent63e7ebd06402951bc8863ba5b7bc9b9f42044849 (diff)
[PATCH] pcmcia: new suspend core
Move the suspend and resume methods out of the event handler, and into special functions. Also use these functions for pre- and post-reset, as almost all drivers already do, and the remaining ones can easily be converted. Bugfix to include/pcmcia/ds.c Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/ide/legacy/ide-cs.c')
-rw-r--r--drivers/ide/legacy/ide-cs.c38
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
409static 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
420static 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
503static int __init init_ide_cs(void) 513static int __init init_ide_cs(void)