On 17 April 2015 at 11:12, Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> wrote: > Ulf, > > On Tue, Mar 31, 2015 at 02:23:06PM +0200, Ulf Hansson wrote: >> On 17 March 2015 at 04:13, Chaotian Jing <chaotian.jing@xxxxxxxxxxxx> wrote: >> > + >> > + msdc_set_buswidth(host, ios->bus_width); >> > + >> > + /* Suspend/Resume will do power off/on */ >> > + switch (ios->power_mode) { >> > + case MMC_POWER_UP: >> > + msdc_init_hw(host); >> > + if (!IS_ERR(mmc->supply.vmmc)) { >> > + ret = mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, >> > + ios->vdd); >> > + if (ret) { >> > + dev_err(host->dev, "Failed to set vmmc power!\n"); >> > + return; >> > + } >> > + } >> > + break; >> > + case MMC_POWER_ON: >> > + if (!IS_ERR(mmc->supply.vqmmc)) { >> > + ret = regulator_enable(mmc->supply.vqmmc); >> >> The calls to regulator_enable|disable() for the vqmmc will not be >> balanced properly here. You need a local cache variable like >> "is_enabled" to keep track of this. > > Shouldn't the MMC core provide balanced hooks for this? What about > MMC_POWER_UP, can this be used for enabling regulators? Currently host drivers deals with vqmmc enabling/disabling, setting voltage, etc - entirely by them selves. Dough Anderson is working on fixing that: http://lkml.iu.edu/hypermail/linux/kernel/1503.1/03108.html MMC_POWER_UP is when vmmc shall be enabled. MMC_POWER_ON is when vqmmc shall be enabled. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html