All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: "Javier Carrasco" <javier.carrasco.cruz@gmail.com>
Cc: "Lars-Peter Clausen" <lars@metafoo.de>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"David Lechner" <dlechner@baylibre.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 4/4] iio: light: veml6031x00: add support for events and trigger
Date: Mon, 17 Aug 2026 03:36:57 +0100	[thread overview]
Message-ID: <20260817033657.4767671f@jic23-huawei> (raw)
In-Reply-To: <DKNTPHF7K5G7.AJEIRCWO8FAM@gmail.com>

On Thu, 13 Aug 2026 14:43:26 +0200
"Javier Carrasco" <javier.carrasco.cruz@gmail.com> wrote:

> Hi Jonathan, thank you for your review to the series.
> 
> On Thu Aug 13, 2026 at 3:24 AM CEST, Jonathan Cameron wrote:
> > On Wed, 12 Aug 2026 22:27:43 +0200
> > Javier Carrasco <javier.carrasco.cruz@gmail.com> wrote:
> >  
> >> The device provides a shared interrupt line for to notify events and
> >> data ready, which can be used as a trigger. The interrupt line is not a
> >> requirement for the device to work. Implement variants for the cases
> >> whether the interrupt line is provided or not.
> >>
> >> Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
> >> @@ -549,11 +948,78 @@ static int veml6031x00_buffer_postdisable(struct iio_dev *iio)
> >>  	return 0;
> >>  }
> >>
> >> +static int veml6031x00_set_trigger_state(struct iio_trigger *trig, bool state)
> >> +{
> >> +	struct iio_dev *iio = iio_trigger_get_drvdata(trig);
> >> +	struct veml6031x00_data *data = iio_priv(iio);
> >> +	int ret;
> >> +
> >> +	guard(mutex)(&data->irq_lock);
> >> +
> >> +	if (state == data->trig_en)
> >> +		return 0;
> >> +
> >> +	ret = veml6031x00_set_interrupt(data, state);
> >> +	if (ret)
> >> +		return ret;
> >> +
> >> +	/* The AF bit must be updated before updating AF_TRIG */
> >> +	ret = regmap_update_bits(data->regmap, VEML6031X00_REG_CONF0,
> >> +				 VEML6031X00_CONF0_AF,
> >> +				 FIELD_PREP(VEML6031X00_CONF0_AF, state));
> >> +	if (ret) {
> >> +		veml6031x00_set_interrupt(data, !state);
> >> +
> >> +		return ret;
> >> +	}
> >> +
> >> +	ret = regmap_update_bits(data->regmap, VEML6031X00_REG_CONF0,
> >> +				 VEML6031X00_CONF0_AF_TRIG,
> >> +				 FIELD_PREP(VEML6031X00_CONF0_AF_TRIG, state));
> >> +	if (ret) {
> >> +		regmap_update_bits(data->regmap, VEML6031X00_REG_CONF0,
> >> +				   VEML6031X00_CONF0_AF,
> >> +				   FIELD_PREP(VEML6031X00_CONF0_AF, !state));
> >> +		veml6031x00_set_interrupt(data, !state);  
> >
> > This dance vs a goto is I guess due to the mutex.  I'd clean it up
> > by using a helper function for the stuff done under the guard(). The
> > helper can do goto based cleanup and avoid repetition plus reduce chance
> > of missing cleaning something up on error.  The outer function can
> > still use guard().
> >  
> 
> Yes, that was the reason why some code was duplicated. I will add a
> helper function with the __must_hold() annotation and
> lockdep_assert_held().
> 
> >> +
> >> +		return ret;
> >> +	}
> >> +
> >> +	data->trig_en = state;
> >> +
> >> +	return 0;
> >> +}  
> >  
> >>
> >> +static int veml6031x00_setup_irq(struct i2c_client *i2c, struct iio_dev *iio)
> >> +{
> >> +	struct veml6031x00_data *data = iio_priv(iio);
> >> +	struct device *dev = regmap_get_device(data->regmap);
> >> +	int ret;
> >> +
> >> +	data->trig = devm_iio_trigger_alloc(dev, "%s-drdy%d",
> >> +					    iio->name, iio_device_id(iio));
> >> +	if (!data->trig)
> >> +		return -ENOMEM;
> >> +
> >> +	data->trig->ops = &veml6031x00_trigger_ops;
> >> +	iio_trigger_set_drvdata(data->trig, iio);
> >> +
> >> +	ret = devm_iio_trigger_register(dev, data->trig);
> >> +	if (ret)
> >> +		return ret;
> >> +
> >> +	iio->trig = iio_trigger_get(data->trig);  
> >
> > Sashiko is correct that we loose a reference here on error and right now
> > there is no IIO core infrastructure to solve this
> >
> > Why are we setting a default trigger?   Userspace tools should be
> > fine looking for a data ready trigger, or choosing a different one if they
> > would prefer. Added advantage of not setting it here is the reference count
> > issue goes away :)
> >  
> 
> I will drop iio->trig = iio_trigger_get(data->trig) for v7.
> 
> I added it because it is (or at least, it was) a common practice in many IIO
> drivers to assign their own trigger, and in the end it is by far the most
> common use case. Of course, we're not going to touch existing drivers to
> remove that, but is it then something to be advised against in the future
> unless there is a good reason for it?

It makes sense if they also 'require' that trigger - but generally if 
a driver has dealt with the potential extra complexity of allowing other
triggers that is because they want to use them. As such a default has
no particular benefit.

I probably let a few defaults in over the years where this wasn't
the case though :(

Jonathan

> 
> Thanks and best regards,
> Javier


  reply	other threads:[~2026-08-17  2:37 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-12 20:27 [PATCH v6 0/4] iio: light: add support for veml6031x00 ALS series Javier Carrasco
2026-08-12 20:27 ` [PATCH v6 1/4] dt-bindings: iio: light: veml6030: add " Javier Carrasco
2026-08-12 20:27 ` [PATCH v6 2/4] iio: light: add support for " Javier Carrasco
2026-08-13  1:04   ` Jonathan Cameron
2026-08-13  1:27     ` Jonathan Cameron
2026-08-13  7:30       ` Andy Shevchenko
2026-08-17 11:03     ` Javier Carrasco
2026-08-13  6:59   ` Andy Shevchenko
2026-08-13  9:46     ` Javier Carrasco
2026-08-14  7:49       ` Andy Shevchenko
2026-08-14  8:58         ` Javier Carrasco
2026-08-14  9:07           ` Andy Shevchenko
2026-08-14  9:23             ` Javier Carrasco
2026-08-17  2:34             ` Jonathan Cameron
2026-08-12 20:27 ` [PATCH v6 3/4] iio: light: veml6031x00: add support for triggered buffers Javier Carrasco
2026-08-13  1:09   ` Jonathan Cameron
2026-08-13  8:34     ` Andy Shevchenko
2026-08-12 20:27 ` [PATCH v6 4/4] iio: light: veml6031x00: add support for events and trigger Javier Carrasco
2026-08-12 20:47   ` sashiko-bot
2026-08-13  1:24   ` Jonathan Cameron
2026-08-13 12:43     ` Javier Carrasco
2026-08-17  2:36       ` Jonathan Cameron [this message]
2026-08-17 10:41         ` Javier Carrasco
2026-08-13  8:41   ` Andy Shevchenko
2026-08-14 22:29   ` Javier Carrasco
2026-08-13  0:48 ` [PATCH v6 0/4] iio: light: add support for veml6031x00 ALS series Jonathan Cameron

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=20260817033657.4767671f@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=andy@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=javier.carrasco.cruz@gmail.com \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nuno.sa@analog.com \
    --cc=robh@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.