Re: [PATCH 1/4] iio: proximity: vcnl3020: add periodic mode

Jonathan Cameron
2021-05-05T08:24:27Z

On Tue, 4 May 2021 22:07:53 +0300
Ivan Mikhaylov <i.mikhaylov@yadro.com> wrote:

> On Sun, 2021-05-02 at 19:00 +0100, Jonathan Cameron wrote:
> > On Fri, 30 Apr 2021 18:24:16 +0300
> > Ivan Mikhaylov <i.mikhaylov@yadro.com> wrote:
> >
> > > Add the possibility to run proximity sensor in periodic measurement
> > > mode.
> >
> > Without an interrupt? Unusual and perhaps best left to userspace.
>
> Do you mean without interrupt handler in driver for this particular interrupt?
> If it's need to be added here, I can add it. In this patch I just added trigger
> to enable/disable periodic measurement mode without interrupt handler.

The model for events in IIO is that they are 'pushed' to userspace.
So it is possible to do this with a polling thread, but on a device
with an interrupt line tied to the event, it makes much more sense
to do it that way.

We don't have read on demand event as there has been little real
demand for them (and they can be implemented in userspase).

Jonathan

>
> >
> > > + if (rc)
> > > + return rc;
> > > +
> > > + /* Enable periodic measurement of proximity data. */
> > > + cmd = VCNL_PS_EN | VCNL_PS_SELFTIMED_EN;
> > > +
> > > + /*
> > > + * Enable interrupts on threshold, for proximity data by
> > > + * default.
> > > + */
> > > + icr = VCNL_ICR_THRES_EN;
> > > + } else {
> > > + if (!vcnl3020_is_thr_enabled(data))
> > > + return 0;
> > > +
> > > + cmd = 0;
> > > + icr = 0;
> > > + isr = 0;
> > > + }
> > > +
> > > + rc = regmap_write(data->regmap, VCNL_COMMAND, cmd);
> > > + if (rc)
> > > + goto end;
> > > +
> > > + rc = regmap_write(data->regmap, VCNL_PS_ICR, icr);
> > > + if (rc)
> > > + goto end;
> > > +
> > > + if (!state)
> > > + /* Clear interrupts */
> >
> > Given you don't seem to have an interrupt. I guess this is clearing
> > a status flag?
>
> Yes, it is clearing flag in interrupt status register.
>
> >
> > > + rc = regmap_write(data->regmap, VCNL_ISR, isr);
> > > +
> > > +end:
> > > + if (state)
> > > + iio_device_release_direct_mode(indio_dev);
> >
>
>