Commit 1887bde3 authored by Denis Karpov's avatar Denis Karpov Committed by Linus Torvalds

ARM: OMAP: mmc-twl4030: add context loss counter support

PM dynamic OFF state results in context loss.  That is, the host
controller has been powered off at some point, which means the registers
have been reset.  The driver must detect when this happens, and restore
the context.  This patch adds the means to detect context loss.

Note, the PM side is not yet implemented.
Signed-off-by: default avatarDenis Karpov <ext-denis.2.karpov@nokia.com>
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@nokia.com>
Acked-by: default avatarMatt Fleming <matt@console-pimps.org>
Cc: Ian Molton <ian@mnementh.co.uk>
Cc: "Roberto A. Foglietta" <roberto.foglietta@gmail.com>
Cc: Jarkko Lavinen <jarkko.lavinen@nokia.com>
Cc: Denis Karpov <ext-denis.2.karpov@nokia.com>
Cc: Pierre Ossman <pierre@ossman.eu>
Cc: Philip Langdale <philipl@overt.org>
Cc: "Madhusudhan" <madhu.cr@ti.com>
Cc: <linux-mmc@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5e2ea617
...@@ -198,6 +198,18 @@ static int twl_mmc_resume(struct device *dev, int slot) ...@@ -198,6 +198,18 @@ static int twl_mmc_resume(struct device *dev, int slot)
#define twl_mmc_resume NULL #define twl_mmc_resume NULL
#endif #endif
#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
static int twl4030_mmc_get_context_loss(struct device *dev)
{
/* FIXME: PM DPS not implemented yet */
return 0;
}
#else
#define twl4030_mmc_get_context_loss NULL
#endif
static int twl_mmc1_set_power(struct device *dev, int slot, int power_on, static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
int vdd) int vdd)
{ {
...@@ -390,6 +402,9 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers) ...@@ -390,6 +402,9 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)
} else } else
mmc->slots[0].switch_pin = -EINVAL; mmc->slots[0].switch_pin = -EINVAL;
mmc->get_context_loss_count =
twl4030_mmc_get_context_loss;
/* write protect normally uses an OMAP gpio */ /* write protect normally uses an OMAP gpio */
if (gpio_is_valid(c->gpio_wp)) { if (gpio_is_valid(c->gpio_wp)) {
gpio_request(c->gpio_wp, "mmc_wp"); gpio_request(c->gpio_wp, "mmc_wp");
......
...@@ -59,6 +59,9 @@ struct omap_mmc_platform_data { ...@@ -59,6 +59,9 @@ struct omap_mmc_platform_data {
int (*suspend)(struct device *dev, int slot); int (*suspend)(struct device *dev, int slot);
int (*resume)(struct device *dev, int slot); int (*resume)(struct device *dev, int slot);
/* Return context loss count due to PM states changing */
int (*get_context_loss_count)(struct device *dev);
u64 dma_mask; u64 dma_mask;
struct omap_mmc_slot_data { struct omap_mmc_slot_data {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment