aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
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/usb
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/usb')
-rw-r--r--drivers/usb/host/sl811_cs.c41
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
326static 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
337static 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
326static int 348static int
327sl811_cs_event(event_t event, int priority, event_callback_args_t *args) 349sl811_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/*====================================================================*/