diff options
author | Alex Dubov <oakad@yahoo.com> | 2008-03-10 14:43:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-10 21:01:18 -0400 |
commit | d114ad54ffb020dc781b6159c1c2f391c6ec418f (patch) | |
tree | fbb4d6c263583bf3ec5de167124fd87cd28c2914 | |
parent | e1f19995f55294fbb00ea22ba85d7b0d80ba3813 (diff) |
memstick: add memstick_suspend/resume_host methods
Bus driver may need to be informed that host is being suspended/resumed.
Signed-off-by: Alex Dubov <oakad@yahoo.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/memstick/core/memstick.c | 25 | ||||
-rw-r--r-- | drivers/memstick/host/tifm_ms.c | 8 | ||||
-rw-r--r-- | include/linux/memstick.h | 2 |
3 files changed, 31 insertions, 4 deletions
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c index 5e0e960df456..3c97bac4e47b 100644 --- a/drivers/memstick/core/memstick.c +++ b/drivers/memstick/core/memstick.c | |||
@@ -561,6 +561,31 @@ void memstick_free_host(struct memstick_host *host) | |||
561 | } | 561 | } |
562 | EXPORT_SYMBOL(memstick_free_host); | 562 | EXPORT_SYMBOL(memstick_free_host); |
563 | 563 | ||
564 | /** | ||
565 | * memstick_suspend_host - notify bus driver of host suspension | ||
566 | * @host - host to use | ||
567 | */ | ||
568 | void memstick_suspend_host(struct memstick_host *host) | ||
569 | { | ||
570 | mutex_lock(&host->lock); | ||
571 | host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); | ||
572 | mutex_unlock(&host->lock); | ||
573 | } | ||
574 | EXPORT_SYMBOL(memstick_suspend_host); | ||
575 | |||
576 | /** | ||
577 | * memstick_resume_host - notify bus driver of host resumption | ||
578 | * @host - host to use | ||
579 | */ | ||
580 | void memstick_resume_host(struct memstick_host *host) | ||
581 | { | ||
582 | mutex_lock(&host->lock); | ||
583 | host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_ON); | ||
584 | mutex_unlock(&host->lock); | ||
585 | memstick_detect_change(host); | ||
586 | } | ||
587 | EXPORT_SYMBOL(memstick_resume_host); | ||
588 | |||
564 | int memstick_register_driver(struct memstick_driver *drv) | 589 | int memstick_register_driver(struct memstick_driver *drv) |
565 | { | 590 | { |
566 | drv->driver.bus = &memstick_bus_type; | 591 | drv->driver.bus = &memstick_bus_type; |
diff --git a/drivers/memstick/host/tifm_ms.c b/drivers/memstick/host/tifm_ms.c index 5b5bd61b3a4a..8b1c102fc317 100644 --- a/drivers/memstick/host/tifm_ms.c +++ b/drivers/memstick/host/tifm_ms.c | |||
@@ -627,17 +627,17 @@ static void tifm_ms_remove(struct tifm_dev *sock) | |||
627 | 627 | ||
628 | static int tifm_ms_suspend(struct tifm_dev *sock, pm_message_t state) | 628 | static int tifm_ms_suspend(struct tifm_dev *sock, pm_message_t state) |
629 | { | 629 | { |
630 | struct memstick_host *msh = tifm_get_drvdata(sock); | ||
631 | |||
632 | memstick_suspend_host(msh); | ||
630 | return 0; | 633 | return 0; |
631 | } | 634 | } |
632 | 635 | ||
633 | static int tifm_ms_resume(struct tifm_dev *sock) | 636 | static int tifm_ms_resume(struct tifm_dev *sock) |
634 | { | 637 | { |
635 | struct memstick_host *msh = tifm_get_drvdata(sock); | 638 | struct memstick_host *msh = tifm_get_drvdata(sock); |
636 | struct tifm_ms *host = memstick_priv(msh); | ||
637 | |||
638 | tifm_ms_initialize_host(host); | ||
639 | memstick_detect_change(msh); | ||
640 | 639 | ||
640 | memstick_resume_host(msh); | ||
641 | return 0; | 641 | return 0; |
642 | } | 642 | } |
643 | 643 | ||
diff --git a/include/linux/memstick.h b/include/linux/memstick.h index c104e722de06..b7ee25888836 100644 --- a/include/linux/memstick.h +++ b/include/linux/memstick.h | |||
@@ -312,6 +312,8 @@ int memstick_add_host(struct memstick_host *host); | |||
312 | void memstick_remove_host(struct memstick_host *host); | 312 | void memstick_remove_host(struct memstick_host *host); |
313 | void memstick_free_host(struct memstick_host *host); | 313 | void memstick_free_host(struct memstick_host *host); |
314 | void memstick_detect_change(struct memstick_host *host); | 314 | void memstick_detect_change(struct memstick_host *host); |
315 | void memstick_suspend_host(struct memstick_host *host); | ||
316 | void memstick_resume_host(struct memstick_host *host); | ||
315 | 317 | ||
316 | void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, | 318 | void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, |
317 | struct scatterlist *sg); | 319 | struct scatterlist *sg); |