diff options
author | Magnus Damm <damm@opensource.se> | 2009-11-27 04:31:27 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-11-30 12:01:24 +0900 |
commit | be9cd7b6f84fd0cc59c8770771073b5c66f958ac (patch) | |
tree | 6ecc43a8424b87828131c4ed2a4a45ca812db847 | |
parent | c60f55fa1f82984bbb168c7721db893451f9de6c (diff) | |
download | kernel_samsung_smdk4412-be9cd7b6f84fd0cc59c8770771073b5c66f958ac.zip kernel_samsung_smdk4412-be9cd7b6f84fd0cc59c8770771073b5c66f958ac.tar.gz kernel_samsung_smdk4412-be9cd7b6f84fd0cc59c8770771073b5c66f958ac.tar.bz2 |
mfd: Add power control platform data to SDHI driver
This patch adds platform data with a function for power
control to the SDHI driver. The idea is that board specific
code can provide their own functions so power can be enabled
and disabled for the sd-cards.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | drivers/mfd/sh_mobile_sdhi.c | 11 | ||||
-rw-r--r-- | include/linux/mfd/sh_mobile_sdhi.h | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/mfd/sh_mobile_sdhi.c b/drivers/mfd/sh_mobile_sdhi.c index 56f72cc..03efae8 100644 --- a/drivers/mfd/sh_mobile_sdhi.c +++ b/drivers/mfd/sh_mobile_sdhi.c @@ -24,6 +24,7 @@ #include <linux/mfd/core.h> #include <linux/mfd/tmio.h> +#include <linux/mfd/sh_mobile_sdhi.h> struct sh_mobile_sdhi { struct clk *clk; @@ -50,6 +51,15 @@ static struct mfd_cell sh_mobile_sdhi_cell = { .resources = sh_mobile_sdhi_resources, }; +static void sh_mobile_sdhi_set_pwr(struct platform_device *tmio, int state) +{ + struct platform_device *pdev = to_platform_device(tmio->dev.parent); + struct sh_mobile_sdhi_info *p = pdev->dev.platform_data; + + if (p && p->set_pwr) + p->set_pwr(pdev, state); +} + static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) { struct sh_mobile_sdhi *priv; @@ -87,6 +97,7 @@ static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) /* FIXME: silly const unsigned int hclk */ *(unsigned int *)&priv->mmc_data.hclk = clk_get_rate(priv->clk); + priv->mmc_data.set_pwr = sh_mobile_sdhi_set_pwr; memcpy(&priv->cell_mmc, &sh_mobile_sdhi_cell, sizeof(priv->cell_mmc)); priv->cell_mmc.driver_data = &priv->mmc_data; diff --git a/include/linux/mfd/sh_mobile_sdhi.h b/include/linux/mfd/sh_mobile_sdhi.h new file mode 100644 index 0000000..3bcd716 --- /dev/null +++ b/include/linux/mfd/sh_mobile_sdhi.h @@ -0,0 +1,8 @@ +#ifndef __SH_MOBILE_SDHI_H__ +#define __SH_MOBILE_SDHI_H__ + +struct sh_mobile_sdhi_info { + void (*set_pwr)(struct platform_device *pdev, int state); +}; + +#endif /* __SH_MOBILE_SDHI_H__ */ |