[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <81006771-99bf-a5f9-4001-2cf3dc84f69d@gmail.com>
Date: Fri, 6 Aug 2021 13:44:45 +0530
From: Ravikumar Kattekola <callmerk1986@...il.com>
To: Mark Brown <broonie@...nel.org>, Peter Geis <pgwipeout@...il.com>
Cc: Jaehoon Chung <jh80.chung@...sung.com>,
Ulf Hansson <ulf.hansson@...aro.org>,
Liam Girdwood <lgirdwood@...il.com>,
Rob Herring <robh+dt@...nel.org>, linux-mmc@...r.kernel.org,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
"open list:ARM/Rockchip SoC..." <linux-rockchip@...ts.infradead.org>,
devicetree@...r.kernel.org
Subject: Re: [BUG] mmc_regulator_set_ocr can't cope with regulator-fixed
Hi,
Resending my reply as my Mail client settings prevented delivery
On 05/08/21 6:38 pm, Mark Brown wrote:
> On Thu, Aug 05, 2021 at 08:58:58AM -0400, Peter Geis wrote:
>> On Thu, Aug 5, 2021 at 8:47 AM Mark Brown <broonie@...nel.org> wrote:
>
>>> One thing to watch out for with this approach is if there's things that
>>> really need a specific voltage to be set then you'll have to stop those
>>> things happening if you've got a voltage regulator that can't deliver a
>>> voltage in the required range. I don't know if this affects MMC or not,
>>> if it's just a case of being less efficient it's not such an issue.
>
>> Yeah, but if this is a fixed regulator and it's a problem, then the
>> hardware is screwed anyways.
>
> Well, the fact that the voltage is being changed at runtime indicates
> that we're changing something from whatever was in the fixed setup - it
> can sometimes be that we don't have access to some higher performance or
> lower power features for example. That's not ideal but works perfectly
> safely.
>
Suggested approach of checking "mmc->ocr_avail" might work.
But, IMO mmc core should check if the voltage can be changed or not
before trying to do regulator_set_voltage() in mmc_regulator_set_ocr().
Wouldn't that be better and solve this issue for other hosts as well.
Something like below in mmc_regulator_set_ocr ():
+ result = regulator_check_voltage_constraints(supply,
+ min_uV, max_uV);
+ if(!result) {
+ result = regulator_set_voltage(supply, min_uV,
max_uV);
+ if (result != -EINVAL && !mmc->regulator_enabled) {
+ result = regulator_enable(supply);
+ if (!result)
+ mmc->regulator_enabled = true;
+ }
We could wrap the existing check_voltage function
+/* Check voltage constraints helper function */
+int regulator_check_voltage_constraints(struct regulator *regulator,
+ int min_uV, int max_uV)
+{
+ return regulator_check_voltage(regulator->rdev, &min_uV, &max_uV);
+}
+EXPORT_SYMBOL_GPL(regulator_check_voltage_constraints);
I hope this makes sense.
Regards,
RK
Powered by blists - more mailing lists