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