diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2012-03-09 10:16:00 +0100 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2012-03-27 12:20:19 -0400 |
commit | 7f524217439cc17da74523582c303cced432713e (patch) | |
tree | cf3d25dd99f12c8ce73ea1ce45e0ae9f86503f2c /drivers/mmc | |
parent | e82b4ac94e5c43fad51b975aed058858ceda1f0f (diff) | |
download | linux-stable-7f524217439cc17da74523582c303cced432713e.tar.gz linux-stable-7f524217439cc17da74523582c303cced432713e.tar.bz2 linux-stable-7f524217439cc17da74523582c303cced432713e.zip |
mmc: sh_mobile_sdhi: support modular mmc-core with non-standard hotplug
Currently if a platform wants to implement a non-standard card-detection
method, it would need to call tmio_mmc_cd_wakeup(), which is an inline
function, calling mmc_detect_change(). For this the platform would have
to link mmc_core statically into the kernel, losing the ability to build
it as a module. This patch adds a callback to the sh_mobile_sdhi driver,
which eliminates this dependency.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sh_mobile_sdhi.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/mmc/host/sh_mobile_sdhi.c b/drivers/mmc/host/sh_mobile_sdhi.c index 07ff3fee77b3..934b68e9efc3 100644 --- a/drivers/mmc/host/sh_mobile_sdhi.c +++ b/drivers/mmc/host/sh_mobile_sdhi.c @@ -90,6 +90,15 @@ static int sh_mobile_sdhi_write16_hook(struct tmio_mmc_host *host, int addr) return 0; } +static void sh_mobile_sdhi_cd_wakeup(const struct platform_device *pdev) +{ + mmc_detect_change(dev_get_drvdata(&pdev->dev), msecs_to_jiffies(100)); +} + +static const struct sh_mobile_sdhi_ops sdhi_ops = { + .cd_wakeup = sh_mobile_sdhi_cd_wakeup, +}; + static int __devinit sh_mobile_sdhi_probe(struct platform_device *pdev) { struct sh_mobile_sdhi *priv; @@ -110,7 +119,7 @@ static int __devinit sh_mobile_sdhi_probe(struct platform_device *pdev) p->pdata = mmc_data; if (p->init) { - ret = p->init(pdev); + ret = p->init(pdev, &sdhi_ops); if (ret) goto einit; } |