From: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
To: Mark Brown <broonie@kernel.org>
Cc: Doug Anderson <dianders@chromium.org>,
Liam Girdwood <lgirdwood@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/1] regulator: Only enable disabled regulators on resume
Date: Mon, 09 Mar 2015 08:40:20 +0100 [thread overview]
Message-ID: <54FD4E64.2070909@collabora.co.uk> (raw)
In-Reply-To: <20150308193812.GW28806@sirena.org.uk>
On 03/08/2015 08:38 PM, Mark Brown wrote:
> On Wed, Mar 04, 2015 at 02:45:00PM +0100, Javier Martinez Canillas wrote:
>
>> The thing is that _regulator_is_enabled() used to return -EINVAL if
>> the rdev didn't have an .is_enabled callback but that changed in
>> commit 9a7f6a4c6edc8 ("regulator: Assume regulators are enabled if
>> they don't report anything") and now returns 1 in that case. But
>> _regulator_enable() was not changed and is still checking for -EINVAL
>> which seems to me like a left over after the mentioned commit.
>
> You mean _do_enable(), not _enable() here. It's not really a leftover
No, I meant _enable() here. What I said is that _enable() is checking
if -EINVAL was returned by _is_enabled():
static int _regulator_enable(struct regulator_dev *rdev)
{
...
ret = _regulator_is_enabled(rdev);
if (ret == -EINVAL || ret == 0) {
if (!_regulator_can_change_status(rdev))
return -EPERM;
ret = _regulator_do_enable(rdev);
if (ret < 0)
return ret;
} else if (ret < 0) {
rdev_err(rdev, "is_enabled() failed: %d\n", ret);
return ret;
}
...
}
and my point was that it is checking because _is_enabled() used to return
-EINVAL if the regulator driver didn't provide a .is_enabled callback:
static int _regulator_is_enabled(struct regulator_dev *rdev)
{
...
if (!rdev->desc->ops->is_enabled)
return -EINVAL;
return rdev->desc->ops->is_enabled(rdev);
...
}
so, if a driver didn't provide a way to query if the regulator was enabled,
it was assumed that it was disabled. But after the mentioned commit, the
assumption was changed and now not having .is_enabled means that it's enabled:
static int _regulator_is_enabled(struct regulator_dev *rdev)
{
...
if (!rdev->desc->ops->is_enabled)
return 1;
return rdev->desc->ops->is_enabled(rdev);
...
}
So my question was if _is_enabled() returning -EINVAL should still mean
that the regulator has to be enabled or the error has to be propagated
since now -EINVAL will be returned by the driver .is_enabled callback.
> as the two operations are doing somewhat different things and the
> changes are a bit separate, _is_enabled() is reporting the current state
> while _do_enable() is making a change so it should fail if it can't do
> that.
>
Yes, I understand that.
> A better way of writing it in the _do_enable() case is that it possibly
> ought to be checking if the regulator is enabled before it does
> anything, though for uncached regulator operations that then means an
> extra I/O which isn't great. Given that I think rather than ignoring
> the missing op it should instead fall back to checking _is_enabled() -
> that way if we can read the state but not change it the right thing will
> happen. I'll do a patch, probably tomorrow.
>
Best regards,
Javier
next prev parent reply other threads:[~2015-03-09 7:40 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-02 20:40 [PATCH 1/1] regulator: Only enable disabled regulators on resume Javier Martinez Canillas
2015-03-03 17:24 ` Doug Anderson
2015-03-03 19:05 ` Javier Martinez Canillas
2015-03-04 13:45 ` Javier Martinez Canillas
2015-03-08 19:38 ` Mark Brown
2015-03-09 7:40 ` Javier Martinez Canillas [this message]
2015-03-11 10:57 ` Mark Brown
2015-03-11 11:00 ` Javier Martinez Canillas
2015-03-08 19:38 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54FD4E64.2070909@collabora.co.uk \
--to=javier.martinez@collabora.co.uk \
--cc=broonie@kernel.org \
--cc=dianders@chromium.org \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.