Re: [PATCH 1/4] iio: proximity: vcnl3020: add periodic mode
From: Andy Shevchenko
Date: Sat May 01 2021 - 14:48:24 EST
On Fri, Apr 30, 2021 at 6:17 PM Ivan Mikhaylov <i.mikhaylov@xxxxxxxxx> wrote:
>
> Add the possibility to run proximity sensor in periodic measurement
> mode.
...
> +static int vcnl3020_config_threshold(struct iio_dev *indio_dev, bool state)
> +{
> + struct vcnl3020_data *data = iio_priv(indio_dev);
> + int rc;
> + int icr;
> + int cmd;
> + int isr;
> +
> + if (state) {
> + rc = iio_device_claim_direct_mode(indio_dev);
> + 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 */
> + rc = regmap_write(data->regmap, VCNL_ISR, isr);
> +
> +end:
> + if (state)
> + iio_device_release_direct_mode(indio_dev);
> +
> + return rc;
> +}
The code will benefit in case you split above to two helpers, i.e.
_on() and _off().
It will gain better readability.
--
With Best Regards,
Andy Shevchenko