From: lars@metafoo.de (Lars-Peter Clausen)
To: linux-arm-kernel@lists.infradead.org
Subject: [alsa-devel] [RFC PATCH] ASoC: wm8731: let codec to manage clock by itself
Date: Tue, 03 Feb 2015 18:49:02 +0100 [thread overview]
Message-ID: <54D10A0E.5050907@metafoo.de> (raw)
In-Reply-To: <54D104AC.5010603@metafoo.de>
On 02/03/2015 06:26 PM, Lars-Peter Clausen wrote:
> On 02/03/2015 06:17 PM, Russell King - ARM Linux wrote:
>> On Tue, Feb 03, 2015 at 05:53:48PM +0100, Lars-Peter Clausen wrote:
>>> On 02/03/2015 01:44 PM, Mark Brown wrote:
>>>> On Tue, Feb 03, 2015 at 08:54:57AM +0100, Manuel Lauss wrote:
>>>>
>>>>> + wm8731->mclk = devm_clk_get(&spi->dev, "mclk");
>>>>> + if (IS_ERR(wm8731->mclk)) {
>>>>> + wm8731->mclk = NULL;
>>>>> + dev_warn(&spi->dev, "assuming static MCLK\n");
>>>>> + }
>>>>
>>>> This is broken for both deferred probe and in the case where the clock
>>>> API genuinely returns a NULL clock. Other than that it's the kind of
>>>> thing that we've done for some other drivers, though it's not good to
>>>> have to do this. Check them for correct behaviour.
>>>
>>> Ideally we'd introduce a {devm_}clk_get_optional(), with the same semantics
>>> as gpiod_get_optional(), which handles the finer details of differentiating
>>> between clock specified, but not yet probed, clock specified, but
>>> incorrectly and no clock specified, so this doesn't have to be done over and
>>> over by each driver.
>>
>> No, we don't need to. It clk_get() already knows this distinction, and
>> it appropriately returns -ENOENT vs -EPROBE_DEFER according to whether
>> there's a clock specified in DT or not.
>
> I know, but it returns a error when no clock is specified (-ENOENT), whereas
> gpiod_get_optional()-like semantics mean, it would return no error.
What I wanted to say is that pretty much every user of clk_get() that wants
a optional clock gets the handling wrong. E.g. they check for PTR_ERR(clk)
== -EPROBE_DEFER rather than checking for PTR_ERR(clk) != -ENOENT. Which
causes errors when the clock is specified, but incorrectly specified (e.g.
invalid phandle or specifier) to be silently ignored.
My hope is that having a explicit API for requesting a optional clock might
make it easier for users to gets things right.
If you have coccinelle you can use the following script to find good and bad
users:
@@
expression clk;
@@
clk =
(
devm_clk_get
|
clk_get
)
(...);
<+...
(
*PTR_ERR(clk) == -EPROBE_DEFER
|
*PTR_ERR(clk) != -ENOENT
)
...+>
prev parent reply other threads:[~2015-02-03 17:49 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-03 3:33 [RFC PATCH] ASoC: wm8731: let codec to manage clock by itself Bo Shen
2015-02-03 7:54 ` Manuel Lauss
2015-02-03 12:44 ` Mark Brown
2015-02-03 14:40 ` Manuel Lauss
2015-02-03 16:21 ` Mark Brown
2015-02-04 3:45 ` Bo Shen
2015-02-04 11:13 ` Mark Brown
2015-02-03 16:53 ` [alsa-devel] " Lars-Peter Clausen
2015-02-03 17:17 ` Russell King - ARM Linux
2015-02-03 17:26 ` Lars-Peter Clausen
2015-02-03 17:49 ` Lars-Peter Clausen [this message]
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=54D10A0E.5050907@metafoo.de \
--to=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).