public inbox for linux-iio@vger.kernel.org
 help / color / mirror / Atom feed
From: Andi Shyti <andi.shyti@kernel.org>
To: Matti Vaittinen <mazziesaccount@gmail.com>
Cc: Andi Shyti <andi.shyti@kernel.org>,
	Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>,
	Jonathan Cameron <jic23@kernel.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Zhigang Shi <Zhigang.Shi@liteon.com>,
	Shreeya Patel <shreeya.patel@collabora.com>,
	Paul Gazzillo <paul@pgazz.com>,
	Dmitry Osipenko <dmitry.osipenko@collabora.com>,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 4/5] iio: light: ROHM BU27008 color sensor
Date: Wed, 26 Apr 2023 12:12:00 +0200	[thread overview]
Message-ID: <20230426101200.7czyp6nlg44tweyb@intel.intel> (raw)
In-Reply-To: <102a1605-d6dc-80c7-2075-212569c97042@gmail.com>

Hi Matti,

> Thanks for the review! It's nice to see you're still keeping an eye on ROHM
> / Kionix senor drivers ;)

yeah... this is fun... if I just had a bit more time :)

> > > +static int bu27008_read_one(struct bu27008_data *data, struct iio_dev *idev,
> > > +			    struct iio_chan_spec const *chan, int *val, int *val2)
> > > +{
> > > +	int ret, int_time;
> > > +
> > > +	ret = bu27008_chan_cfg(data, chan);
> > > +	if (ret)
> > > +		return ret;
> > > +
> > > +	ret = bu27008_meas_set(data, BU27008_MEAS_EN);
> > > +	if (ret)
> > > +		return ret;
> > > +
> > > +	int_time = bu27008_get_int_time(data);
> > > +	if (int_time < 0)
> > > +		int_time = 400000;
> > > +
> > > +	msleep((int_time + 500) / 1000);
> > 
> > What is this 500 doing? Is it making a real difference? it's
> > 0.5ms.
> 
> Thanks for the question, having extra pairs of eyes helps spotting
> brainfarts :)
> 
> The 500 here is half of the value of the divider - idea was to do rounding
> correctly upwards to prevent premature wake-up. Well, this is incorrect
> because we should always round up the sleep time, not just 'mathematically
> correctly' (Eg, not only upwards when value >= 0.5 but upwards always when
> the division is not even).
> 
> After this being said, integration times for this device are full milli
> seconds so they can all be divided by 1000 uS.
> 
> Nevertheless, it's good to note that the sensor is definitely not being
> clocked by the same clock as CPU and I assume the timing for it will be
> drifting quite a bit from the CPU clock. This means some sensors will for
> sure complete the measurement later than this wake-up. In order to tackle
> this we have the valid-bit polling in bu27008_chan_read_data(). So, at the
> end of the day, this rounding correction is lkely to be just some
> unnecessary noise.

I understand the logic of the waiting, but msleep is not the
right function as waiting with msleep is always very approximate,
that's why it's recommended to use it for a large waiting period,
where the error is smaller.

If int_time is 1ms, waiting 1.5 or 2 or 1, is the same thing,
most probably you will end up waiting more.

> > What's the minimum int_time? Can we set a minimum, as well, just
> > for the sake of the msleep?
> 
> Can you please elaborate what you mean by this? The minimum integration time
> for bu27008 is 55 mS and this is set in the time tables for the gts-helpers.
> The bu27008_get_int_time() should never return valid time smaller than that.

Witha minimum i mean a minimum value for the msleep to start
working decently. E.g. what if int_time is lower than 1ms? Can we
have msleep(0)?

[...]

> > > +static int bu27008_chip_init(struct bu27008_data *data)
> > > +{
> > > +	int ret;
> > > +
> > > +	ret = regmap_update_bits(data->regmap, BU27008_REG_SYSTEM_CONTROL,
> > > +			   BU27008_MASK_SW_RESET, BU27008_MASK_SW_RESET);
> > > +	if (ret)
> > > +		return dev_err_probe(data->dev, ret, "Sensor reset failed\n");
> > > +
> > > +	/*
> > > +	 * The data-sheet does not tell how long performing the IC reset takes.
> > > +	 * However, the data-sheet says the minimum time it takes the IC to be
> > > +	 * able to take inputs after power is applied, is 100 uS. I'd assume
> > > +	 * > 1 mS is enough.
> > > +	 */
> > > +	msleep(1);
> > 
> > please use usleep_range().
> 
> I prefer to not require setting up hrtimers as we have no real requirements
> for the duration of this sleep. I know the msleep() is likely to exceed the
> 1 mS, potentially a lot if there is things to do - but we don't really care
> at this point. The main thing is to give the HW time to reset while allowing
> other things to be scheduled.

For the reason above, msleep(1) is quite a meaningless
instruction. If you need to wait around 1ms, then usleep_range is
the function to be used.

Refer, also, to the Documentation/timers/timers-howto.rst

> > > +
> > > +	return ret;
> > > +}

[...]

> > > +static irqreturn_t bu27008_trigger_handler(int irq, void *p)
> > 
> > Do we really need to be in atomic context here? Can this be
> > handled from a thread?
> 
> As far as I understand, this is handled from a process context.

Sorry... I misread it... I thought you used request_irq() for
this and request_threaded_irq() for bu27008_irq_thread_handler().

Ignore :)

Andi

  reply	other threads:[~2023-04-26 10:12 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-24 13:07 [PATCH v2 0/5] Support ROHM BU27008 RGB sensor Matti Vaittinen
2023-04-24 13:07 ` [PATCH v2 1/5] dt-bindings: iio: light: ROHM BU27008 Matti Vaittinen
2023-04-24 14:00   ` Krzysztof Kozlowski
2023-04-24 13:08 ` [PATCH v2 2/5] iio:trigger: Add simple trigger_validation helper Matti Vaittinen
2023-04-24 15:08   ` Andy Shevchenko
2023-04-25  5:17     ` Matti Vaittinen
2023-04-24 13:08 ` [PATCH v2 3/5] iio: kx022a: Use new iio_validate_own_trigger() Matti Vaittinen
2023-04-24 13:10 ` [PATCH v2 4/5] iio: light: ROHM BU27008 color sensor Matti Vaittinen
2023-04-24 15:22   ` Andy Shevchenko
2023-04-25  5:24     ` Matti Vaittinen
2023-04-25 13:45       ` Andy Shevchenko
2023-04-25 16:45   ` Andi Shyti
2023-04-26  5:32     ` Matti Vaittinen
2023-04-26 10:12       ` Andi Shyti [this message]
2023-04-26 10:19         ` Matti Vaittinen
2023-04-26 12:20           ` Andi Shyti
2023-04-24 13:10 ` [PATCH v2 5/5] MAINTAINERS: Add ROHM BU27008 Matti Vaittinen

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=20230426101200.7czyp6nlg44tweyb@intel.intel \
    --to=andi.shyti@kernel.org \
    --cc=Zhigang.Shi@liteon.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.osipenko@collabora.com \
    --cc=jic23@kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matti.vaittinen@fi.rohmeurope.com \
    --cc=mazziesaccount@gmail.com \
    --cc=paul@pgazz.com \
    --cc=robh+dt@kernel.org \
    --cc=shreeya.patel@collabora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox