From: Philipp Zabel <p.zabel@pengutronix.de>
To: Mark Brown <broonie@kernel.org>
Cc: linux-kernel@vger.kernel.org, kernel@pengutronix.de
Subject: Re: [PATCH] regmap: add iopoll-like polling macro
Date: Fri, 08 Jul 2016 18:26:22 +0200 [thread overview]
Message-ID: <1467995182.2365.45.camel@pengutronix.de> (raw)
In-Reply-To: <20160708143925.GY6247@sirena.org.uk>
Am Freitag, den 08.07.2016, 16:39 +0200 schrieb Mark Brown:
> On Thu, Jul 07, 2016 at 12:01:43PM +0200, Philipp Zabel wrote:
> > Am Donnerstag, den 07.07.2016, 11:42 +0200 schrieb Mark Brown:
> > > On Wed, Jul 06, 2016 at 04:19:41PM +0200, Philipp Zabel wrote:
>
> > > > This patch adds a macro regmap_read_poll_timeout that works similar
> > > > to the readx_poll_timeout defined in linux/iopoll.h, except that this
> > > > can also return the error value returned by a failed regmap_read.
>
> > > Please make this a proper function.
>
> > I can't, the condition has to be evaluated inside the loop. This is
> > basically a poor man's function template.
>
> Given that the condition is always going to be essentially the same one
> checking that (read & mask) == value we could just parameterize it
> couldn't we?
The iopoll macros also allow comparisons like < > !=, more complicated
expressions, or even function calls.
Granted, the only existing example I am aware of is
drivers/dma/qcom/hidma_ll.c, which calls a static function in
readl_poll_wait_timeout, that evaluates to ((read == 1) || (read == 2)).
There's a similar condition in rt5659_headset_detect, although that may
be dismissed as it's using snd_soc_read and variable delays:
while (i < 5) {
msleep(sleep_time[i]);
val = snd_soc_read(codec, RT5659_EJD_CTRL_2) & 0x0003;
i++;
if (val == 0x1 || val == 0x2 || val == 0x3)
break;
}
A potential user for an inequality condition is
drivers/media/tuners/it913x.c, which has a loop where the condition is
(read != 0):
#define TIMEOUT 50
timeout = jiffies + msecs_to_jiffies(TIMEOUT);
while (!time_after(jiffies, timeout)) {
ret = regmap_read(dev->regmap, 0x80ec82, &utmp);
if (ret)
goto err;
if (utmp)
break;
}
Even if by far the most common cases can be covered as you suggest,
I would find it useful to keep this the same as the other
readx_poll_wait_timeout variants.
regards
Philipp
next prev parent reply other threads:[~2016-07-08 16:26 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-06 14:19 [PATCH] regmap: add iopoll-like polling macro Philipp Zabel
2016-07-07 9:42 ` Mark Brown
2016-07-07 10:01 ` Philipp Zabel
2016-07-08 14:39 ` Mark Brown
2016-07-08 16:26 ` Philipp Zabel [this message]
2016-07-13 7:37 ` Philipp Zabel
2016-07-14 16:29 ` Mark Brown
2016-07-15 12:44 ` Applied "regmap: add iopoll-like polling macro" to the regmap tree 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=1467995182.2365.45.camel@pengutronix.de \
--to=p.zabel@pengutronix.de \
--cc=broonie@kernel.org \
--cc=kernel@pengutronix.de \
--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.