From f8b0fbcffa244228a2f85b4dd44dce944610ef2b Mon Sep 17 00:00:00 2001 From: Alex Dubov Date: Mon, 11 Dec 2006 01:55:38 +1100 Subject: [PATCH] --- yaml --- r: 46207 b: refs/heads/master c: dba4accab17bd2e2e09088f746257a8c14af1cc2 h: refs/heads/master i: 46205: 39bd5230d76a7cf07c555a16ef12194c66e1d819 46203: c6a373874b74188ad9f9564a053931a2a38f3f11 46199: f2350a60ea56050ac8a584b0e6a52ff74d01be62 46191: be8746609c75bfd07664a505e8d2561e4f0329a9 46175: 2b9391091b6efbd91ba10795c765748d0a5ed01f 46143: b56e0b582c9c81e8acfcefce39ea4549615892d7 46079: a05d72002dc73f8b659b2f85f77829a36e0a9827 v: v3 --- [refs] | 2 +- trunk/drivers/mmc/tifm_sd.c | 39 ++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index dd84c5c5ae71..33ac43415eaf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 41d78f7405659b55e082c5f0b3d1b625e75e1294 +refs/heads/master: dba4accab17bd2e2e09088f746257a8c14af1cc2 diff --git a/trunk/drivers/mmc/tifm_sd.c b/trunk/drivers/mmc/tifm_sd.c index 2adfe3467019..ce19b045ca6a 100644 --- a/trunk/drivers/mmc/tifm_sd.c +++ b/trunk/drivers/mmc/tifm_sd.c @@ -921,6 +921,41 @@ static void tifm_sd_remove(struct tifm_dev *sock) mmc_free_host(mmc); } +#ifdef CONFIG_PM + +static int tifm_sd_suspend(struct tifm_dev *sock, pm_message_t state) +{ + struct mmc_host *mmc = tifm_get_drvdata(sock); + int rc; + + rc = mmc_suspend_host(mmc, state); + /* The meaning of the bit majority in this constant is unknown. */ + writel(0xfff8 & readl(sock->addr + SOCK_CONTROL), + sock->addr + SOCK_CONTROL); + return rc; +} + +static int tifm_sd_resume(struct tifm_dev *sock) +{ + struct mmc_host *mmc = tifm_get_drvdata(sock); + struct tifm_sd *host = mmc_priv(mmc); + + if (sock->media_id != FM_SD + || tifm_sd_initialize_host(host)) { + tifm_eject(sock); + return 0; + } else { + return mmc_resume_host(mmc); + } +} + +#else + +#define tifm_sd_suspend NULL +#define tifm_sd_resume NULL + +#endif /* CONFIG_PM */ + static tifm_media_id tifm_sd_id_tbl[] = { FM_SD, 0 }; @@ -932,7 +967,9 @@ static struct tifm_driver tifm_sd_driver = { }, .id_table = tifm_sd_id_tbl, .probe = tifm_sd_probe, - .remove = tifm_sd_remove + .remove = tifm_sd_remove, + .suspend = tifm_sd_suspend, + .resume = tifm_sd_resume }; static int __init tifm_sd_init(void)