Message ID | m3wqzqf557.fsf@pullcord.laptop.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 09/19/2012 11:39 PM, Chris Ball wrote: > Hi, > > On Wed, Sep 19 2012, Jaehoon Chung wrote: >>> On Wed, Sep 19 2012, Tomasz Figa wrote: >>>> We could just check if the regulator provides the capability to change the >>>> voltage. >>>> >>>> I don't see any direct way of querying the regulator for provided >>>> capabilities (correct me if I'm just blind), but calling >>>> regulator_count_voltages() on the regulator and checking if the returned >>>> value is 1 should be enough to assume that the regulator is fixed. >>> >>> Sounds good, I agree. Are you able to test that the obvious patch below >>> works on your fixed-regulator board? >>> >>> Jaehoon and Adrian, can you think of any reason why we shouldn't replace >>> MMC_CAP2_BROKEN_VOLTAGE with the regulator_count_voltages() call below? >>> Thanks. >> >> I think this is better than using MMC_CAP2_BROKEN_VOLTAGE. >> I tested with this..and working fine. > > Great, here's the patch. Jaehoon, once this is merged, maybe you could > help remove the uses of MMC_CAP2_BROKEN_VOLTAGE from arch/arm/mach-exynos > and arch/arm/mach-s5pv210 now that they're no longer needed? Right, I will remove them and send the patch. Best Regards, Jaehoon Chung > > Thanks, > > - Chris. > > > Subject: [PATCH] mmc: core: Replace MMC_CAP2_BROKEN_VOLTAGE with test for fixed regulator > > Before this patch, we were using MMC_CAP2_BROKEN_VOLTAGE as a way to > avoid calling regulator_set_voltage() on a fixed regulator, but that's > just duplicating information that already exists -- we should test > whether the regulator is fixed directly, instead of via a capability. > > This patch implements that test. We can't reclaim the capability bit > just yet, since there are still boards in arch/arm/ that reference it; > those references can be removed now. > > Reported-by: Tomasz Figa <t.figa@samsung.com> > Signed-off-by: Chris Ball <cjb@laptop.org> > --- > drivers/mmc/core/core.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 044cd01..6612163 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -1113,7 +1113,8 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc, > int tmp; > int voltage; > > - /* REVISIT mmc_vddrange_to_ocrmask() may have set some > + /* > + * REVISIT mmc_vddrange_to_ocrmask() may have set some > * bits this regulator doesn't quite support ... don't > * be too picky, most cards and regulators are OK with > * a 0.1V range goof (it's a small error percentage). > @@ -1127,12 +1128,13 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc, > max_uV = min_uV + 100 * 1000; > } > > - /* avoid needless changes to this voltage; the regulator > - * might not allow this operation > + /* > + * If we're using a fixed/static regulator, don't call > + * regulator_set_voltage; it would fail. > */ > voltage = regulator_get_voltage(supply); > > - if (mmc->caps2 & MMC_CAP2_BROKEN_VOLTAGE) > + if (regulator_count_voltages(supply) == 1) > min_uV = max_uV = voltage; > > if (voltage < 0) >
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 044cd01..6612163 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1113,7 +1113,8 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc, int tmp; int voltage; - /* REVISIT mmc_vddrange_to_ocrmask() may have set some + /* + * REVISIT mmc_vddrange_to_ocrmask() may have set some * bits this regulator doesn't quite support ... don't * be too picky, most cards and regulators are OK with * a 0.1V range goof (it's a small error percentage). @@ -1127,12 +1128,13 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc, max_uV = min_uV + 100 * 1000; } - /* avoid needless changes to this voltage; the regulator - * might not allow this operation + /* + * If we're using a fixed/static regulator, don't call + * regulator_set_voltage; it would fail. */ voltage = regulator_get_voltage(supply); - if (mmc->caps2 & MMC_CAP2_BROKEN_VOLTAGE) + if (regulator_count_voltages(supply) == 1) min_uV = max_uV = voltage; if (voltage < 0)