aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Dubov <oakad@yahoo.com>2008-03-10 14:43:38 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-03-10 21:01:18 -0400
commitd114ad54ffb020dc781b6159c1c2f391c6ec418f (patch)
treefbb4d6c263583bf3ec5de167124fd87cd28c2914
parente1f19995f55294fbb00ea22ba85d7b0d80ba3813 (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.c25
-rw-r--r--drivers/memstick/host/tifm_ms.c8
-rw-r--r--include/linux/memstick.h2
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}
562EXPORT_SYMBOL(memstick_free_host); 562EXPORT_SYMBOL(memstick_free_host);
563 563
564/**
565 * memstick_suspend_host - notify bus driver of host suspension
566 * @host - host to use
567 */
568void 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}
574EXPORT_SYMBOL(memstick_suspend_host);
575
576/**
577 * memstick_resume_host - notify bus driver of host resumption
578 * @host - host to use
579 */
580void 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}
587EXPORT_SYMBOL(memstick_resume_host);
588
564int memstick_register_driver(struct memstick_driver *drv) 589int 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
628static int tifm_ms_suspend(struct tifm_dev *sock, pm_message_t state) 628static 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
633static int tifm_ms_resume(struct tifm_dev *sock) 636static 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);
312void memstick_remove_host(struct memstick_host *host); 312void memstick_remove_host(struct memstick_host *host);
313void memstick_free_host(struct memstick_host *host); 313void memstick_free_host(struct memstick_host *host);
314void memstick_detect_change(struct memstick_host *host); 314void memstick_detect_change(struct memstick_host *host);
315void memstick_suspend_host(struct memstick_host *host);
316void memstick_resume_host(struct memstick_host *host);
315 317
316void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, 318void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc,
317 struct scatterlist *sg); 319 struct scatterlist *sg);