Commit b1c1df7a7d50bf94de89704e963467bc94b1fef9

Authored by Balaji T K
Committed by Tony Lindgren
1 parent e68273baf3

ARM: OMAP4: MMC: no regulator off during probe for eMMC

eMMC does not handle power off when not in sleep state,
Skip regulator disable during probe when eMMC is
not in known state - state left by bootloader.

Resolves eMMC failure on OMAP4
mmc0: error -110 whilst initialising MMC card

Signed-off-by: Balaji T K <balajitk@ti.com>
Tested-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
Acked-by: Kishore Kadiyala <kishore.kadiyala@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>

Showing 5 changed files with 11 additions and 0 deletions Side-by-side Diff

arch/arm/mach-omap2/board-4430sdp.c
... ... @@ -322,6 +322,7 @@
322 322 .gpio_wp = -EINVAL,
323 323 .nonremovable = true,
324 324 .ocr_mask = MMC_VDD_29_30,
  325 + .no_off_init = true,
325 326 },
326 327 {
327 328 .mmc = 1,
arch/arm/mach-omap2/hsmmc.c
... ... @@ -331,6 +331,9 @@
331 331 if (c->no_off)
332 332 mmc->slots[0].no_off = 1;
333 333  
  334 + if (c->no_off_init)
  335 + mmc->slots[0].no_regulator_off_init = c->no_off_init;
  336 +
334 337 if (c->vcc_aux_disable_is_sleep)
335 338 mmc->slots[0].vcc_aux_disable_is_sleep = 1;
336 339  
arch/arm/mach-omap2/hsmmc.h
... ... @@ -18,6 +18,7 @@
18 18 bool nonremovable; /* Nonremovable e.g. eMMC */
19 19 bool power_saving; /* Try to sleep or power off when possible */
20 20 bool no_off; /* power_saving and power is not to go off */
  21 + bool no_off_init; /* no power off when not in MMC sleep state */
21 22 bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */
22 23 int gpio_cd; /* or -EINVAL */
23 24 int gpio_wp; /* or -EINVAL */
arch/arm/plat-omap/include/plat/mmc.h
... ... @@ -101,6 +101,9 @@
101 101 /* If using power_saving and the MMC power is not to go off */
102 102 unsigned no_off:1;
103 103  
  104 + /* eMMC does not handle power off when not in sleep state */
  105 + unsigned no_regulator_off_init:1;
  106 +
104 107 /* Regulator off remapped to sleep */
105 108 unsigned vcc_aux_disable_is_sleep:1;
106 109  
drivers/mmc/host/omap_hsmmc.c
... ... @@ -435,6 +435,9 @@
435 435 reg = regulator_get(host->dev, "vmmc_aux");
436 436 host->vcc_aux = IS_ERR(reg) ? NULL : reg;
437 437  
  438 + /* For eMMC do not power off when not in sleep state */
  439 + if (mmc_slot(host).no_regulator_off_init)
  440 + return 0;
438 441 /*
439 442 * UGLY HACK: workaround regulator framework bugs.
440 443 * When the bootloader leaves a supply active, it's