Re: [PATCH RFC] ASoC: rt5663: use msleep() for uncritical delay
From: Nicholas Mc Guire
Date: Thu Jan 19 2017 - 11:55:37 EST
On Tue, Jan 17, 2017 at 07:33:02PM +0000, Mark Brown wrote:
> On Wed, Jan 11, 2017 at 04:03:51PM +0100, Nicholas Mc Guire wrote:
> > The delay here does not seem to be critical with respect to longer
> > delays than 10ms as this delay is to ensure that the write took
> > effect before the next soc_update_bits/write call only, thus a
> > high resolution timer makes little sense here - msleep() should do.
>
> No, that's not what the code is doing at all.
>
> > +++ b/sound/soc/codecs/rt5663.c
> > @@ -2764,7 +2764,7 @@ static int rt5663_set_bias_level(struct snd_soc_codec *codec,
> > RT5663_PWR_FV1_MASK | RT5663_PWR_FV2_MASK |
> > RT5663_PWR_MB_MASK, RT5663_PWR_VREF1 |
> > RT5663_PWR_VREF2 | RT5663_PWR_MB);
> > - usleep_range(10000, 10005);
> > + msleep(10);
>
> The write before is turning on a bunch of analogue power bits, the
> enabled supplies will then take time to ramp up to their operating
> state before we can proceed. That's not just "make sure the change took
> effect", there's a bit more to it than that, and power up sequences are
> generally very latency sensitive as they tend to happen in response to
> user input. People are generally picking the minimum value they can
> reliably get away with and a lot of effort goes into optimising the
> power up procedures.
>
> That doesn't mean that the change is bad but the analysis in the
> changelog is and could cause confusion.
ok - thanks for the explaination - you are right that I was not seeing
the actual intent of the delay here but simply took it as a I/O delay.
The change should stay valid as both msleep() and usleep_range() can
very significantly overrun their stated values and that should be safe here
(or the code has a deeper rooted problem) while the usage of the high-resolution
timers does not seem to bring any benefit here.
Will clean up the commit message and resend this as well.
thx!
hofrat