reg = regulator_get(dev, "vmmc_aux");
                        hsmmc[i].vcc_aux = IS_ERR(reg) ? NULL : reg;
 
+                       /* UGLY HACK:  workaround regulator framework bugs.
+                        * When the bootloader leaves a supply active, it's
+                        * initialized with zero usecount ... and we can't
+                        * disable it without first disabling it.  Until the
+                        * framework is fixed, we need a workaround like this
+                        * (which is safe for MMC, but not in general).
+                        */
+                       if (regulator_is_enabled(hsmmc[i].vcc) > 0) {
+                               dev_warn(dev, "APPLY REGULATOR HACK for vmmc\n");
+                               regulator_enable(hsmmc[i].vcc);
+                               regulator_disable(hsmmc[i].vcc);
+                       }
+                       if (hsmmc[i].vcc_aux) {
+                               if (regulator_is_enabled(reg) > 0) {
+                                       dev_warn(dev, "APPLY REGULATOR HACK "
+                                               "for vmmc_aux\n");
+                                       regulator_enable(reg);
+                                       regulator_disable(reg);
+                               }
+                       }
+
                        break;
                }
        }
                }
        } else {
                if (c->vcc_aux)
-                       ret = regulator_enable(c->vcc_aux);
+                       ret = regulator_disable(c->vcc_aux);
                if (ret == 0)
                        ret = mmc_regulator_set_ocr(c->vcc, 0);
        }