All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Mark Brown <broonie@kernel.org>
Cc: Thierry Reding <treding@nvidia.com>,
	Jelle van der Waa <jelle@vdwaa.nl>,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-kernel@vger.kernel.org
Subject: Re: regulator_get_optional() no longer returning NULL?
Date: Fri, 3 Feb 2017 13:51:20 -0800	[thread overview]
Message-ID: <20170203215120.GA22933@dtor-ws> (raw)
In-Reply-To: <20170203112001.m5nwfrw7ickum3r7@sirena.org.uk>

On Fri, Feb 03, 2017 at 12:20:01PM +0100, Mark Brown wrote:
> On Wed, Feb 01, 2017 at 02:23:31PM -0800, Dmitry Torokhov wrote:
> 
> > It appears that [devm_]regulator_get_optional() and
> > [devm_]gpiod_get_optional() behave irritatingly differently. While the
> > latter returns NULL for non-existing GPIOs, the former started returning
> > -ENODEV instead of NULL, starting with commit below.
> 
> > Why did we do that? It is much more convenient to write:
> 
> As the commit description for that commit says it's fixing a bug with us
> not returning the error code we get from regulator_dev_lookup().
> 
> > I.e. it is nice to treat *all* codes returned by
> > devm_regulator_get_optional() as fatal and NULL as special instead of
> > vetting by hand (and having chance that list of vetted codes will bit
> > rot).
> 
> There's no real risk of bitrot I can see here, the only thing something
> using optional regulator is looking for is that the regulator does not
> exist and we have the specific error code -ENODEV for that.
> 
> > Can we please revert this patch?
> 
> That won't do what you want so I don't know why you're asking for it -
> the default value of regulator is ERR_PTR(-EPROBE_DEFER) so if we skip
> assigning the actual return code you'll get that and not NULL.  I don't
> recall that behaviour ever working, it's not what's documented so it
> doesn't look like something broke here.  If you wanted to implement it
> you'd need to add new code to do it (eg, squash down -ENODEV in
> _get_optional()).

Yes, you are right. The _regulator_get() is a bit confusing, I have a
patch series that hopefully makes it a bit more straightforward.

Unfortunately it seems some of the drivers are not ready for
regulator_get_optional() to return NULL, I'll have to prepare them
first.

> 
> However I am a bit dubious about doing that as I'm not thrilled with
> adding in more things for people to check.  Even if you check for NULL
> with an optional regulator you'd still need to also go and check that
> you didn't get an error code like -EPROBE_DEFER, you'd only get a NULL
> in cases where the regulator does not exist.  Given that I'm not sure
> that it's actually simplifying things.

Like I said, I want people to simply check for error/!error and have all
errors be fatal, and the rest of the checks (when trying to use said
regulator) should be in form of:

	if (blah->supply)
		regulator_enable(supply).

Or even teach regulator_enable() to like NULLs.

Allowing regulator_get_optional() return NULL will make it work
similarly to gpiod_get_optional() which I think is a good thing.

By the way, I see quite a few drivers using regulator_get_optional() for
cases when regulator is mandatory, but it might be handled by the
firmware. I.e. it seems they can be converted to regulator_get() with
the expectation that it will give us dummy supply. Would such
conversions be OK/accepted?

Thanks.

-- 
Dmitry

  reply	other threads:[~2017-02-03 21:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-01 22:23 regulator_get_optional() no longer returning NULL? Dmitry Torokhov
2017-02-03 11:20 ` Mark Brown
2017-02-03 21:51   ` Dmitry Torokhov [this message]
2017-02-04 10:08     ` 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=20170203215120.GA22933@dtor-ws \
    --to=dmitry.torokhov@gmail.com \
    --cc=broonie@kernel.org \
    --cc=jelle@vdwaa.nl \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=treding@nvidia.com \
    /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.