mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
tifm_sd: add suspend and resume functionality
Signed-off-by: Alex Dubov <oakad@yahoo.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
parent
41d78f7405
commit
dba4accab1
1 changed files with 38 additions and 1 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue