diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2005-11-14 15:21:18 -0500 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2006-01-05 17:59:02 -0500 |
commit | 98e4c28b7ec390c2dad6a4c69d69629c0f7e8b10 (patch) | |
tree | b3d46f0643352e541d6a39e6da09059687cf713d /drivers/usb/host/sl811_cs.c | |
parent | 63e7ebd06402951bc8863ba5b7bc9b9f42044849 (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/usb/host/sl811_cs.c')
-rw-r--r-- | drivers/usb/host/sl811_cs.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c index 5056b7459994..cb8c2bdbbd04 100644 --- a/drivers/usb/host/sl811_cs.c +++ b/drivers/usb/host/sl811_cs.c | |||
@@ -323,6 +323,28 @@ cs_failed: | |||
323 | } | 323 | } |
324 | } | 324 | } |
325 | 325 | ||
326 | static int sl811_suspend(struct pcmcia_device *dev) | ||
327 | { | ||
328 | dev_link_t *link = dev_to_instance(dev); | ||
329 | |||
330 | link->state |= DEV_SUSPEND; | ||
331 | if (link->state & DEV_CONFIG) | ||
332 | pcmcia_release_configuration(link->handle); | ||
333 | |||
334 | return 0; | ||
335 | } | ||
336 | |||
337 | static int sl811_resume(struct pcmcia_device *dev) | ||
338 | { | ||
339 | dev_link_t *link = dev_to_instance(dev); | ||
340 | |||
341 | link->state &= ~DEV_SUSPEND; | ||
342 | if (link->state & DEV_CONFIG) | ||
343 | pcmcia_request_configuration(link->handle, &link->conf); | ||
344 | |||
345 | return 0; | ||
346 | } | ||
347 | |||
326 | static int | 348 | static int |
327 | sl811_cs_event(event_t event, int priority, event_callback_args_t *args) | 349 | sl811_cs_event(event_t event, int priority, event_callback_args_t *args) |
328 | { | 350 | { |
@@ -341,23 +363,6 @@ sl811_cs_event(event_t event, int priority, event_callback_args_t *args) | |||
341 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; | 363 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; |
342 | sl811_cs_config(link); | 364 | sl811_cs_config(link); |
343 | break; | 365 | break; |
344 | |||
345 | case CS_EVENT_PM_SUSPEND: | ||
346 | link->state |= DEV_SUSPEND; | ||
347 | /* Fall through... */ | ||
348 | case CS_EVENT_RESET_PHYSICAL: | ||
349 | if (link->state & DEV_CONFIG) | ||
350 | pcmcia_release_configuration(link->handle); | ||
351 | break; | ||
352 | |||
353 | case CS_EVENT_PM_RESUME: | ||
354 | link->state &= ~DEV_SUSPEND; | ||
355 | /* Fall through... */ | ||
356 | case CS_EVENT_CARD_RESET: | ||
357 | if (link->state & DEV_CONFIG) | ||
358 | pcmcia_request_configuration(link->handle, &link->conf); | ||
359 | DBG(0, "reset sl811-hcd here?\n"); | ||
360 | break; | ||
361 | } | 366 | } |
362 | return 0; | 367 | return 0; |
363 | } | 368 | } |
@@ -417,6 +422,8 @@ static struct pcmcia_driver sl811_cs_driver = { | |||
417 | .event = sl811_cs_event, | 422 | .event = sl811_cs_event, |
418 | .detach = sl811_cs_detach, | 423 | .detach = sl811_cs_detach, |
419 | .id_table = sl811_ids, | 424 | .id_table = sl811_ids, |
425 | .suspend = sl811_suspend, | ||
426 | .resume = sl811_resume, | ||
420 | }; | 427 | }; |
421 | 428 | ||
422 | /*====================================================================*/ | 429 | /*====================================================================*/ |