From: David Lechner <dlechner@baylibre.com>
To: Kurt Borja <kuurtb@gmail.com>,
Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: "Jonathan Cameron" <jic23@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Tobias Sperling" <tobias.sperling@softing.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,
"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH v3 2/2] iio: adc: Add ti-ads1018 driver
Date: Mon, 1 Dec 2025 15:53:19 -0600 [thread overview]
Message-ID: <248b009e-0401-4531-b9f0-56771e16bdef@baylibre.com> (raw)
In-Reply-To: <DEN50VFOIB5O.1ENBKI6JQ0ZC@gmail.com>
On 12/1/25 1:47 PM, Kurt Borja wrote:
> On Mon Dec 1, 2025 at 11:07 AM -05, David Lechner wrote:
>
> ...
>
>>>>> + if (iio_device_claim_buffer_mode(indio_dev))
>>>>> + goto out_notify_done;
>>>>> +
>>>>> + if (iio_trigger_using_own(indio_dev)) {
>>>>> + disable_irq(ads1018->drdy_irq);
>>>>> + ret = ads1018_read_unlocked(ads1018, &scan.conv, true);
>>>>> + enable_irq(ads1018->drdy_irq);
>>>>> + } else {
>>>>> + ret = spi_read(ads1018->spi, ads1018->rx_buf, sizeof(ads1018->rx_buf));
>>>>> + scan.conv = ads1018->rx_buf[0];
>>>>> + }
>>>>> +
>>>>> + iio_device_release_buffer_mode(indio_dev);
>>>>> +
>>>>> + if (ret)
>>>>> + goto out_notify_done;
>>>>> +
>>>>> + iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan), pf->timestamp);
>>>>> +
>>>>> +out_notify_done:
>>>>> + iio_trigger_notify_done(ads1018->indio_trig);
>>>>
>>>> Jonathan et al., maybe we need an ACQUIRE() class for this? It will solve
>>>> the conditional scoped guard case, no?
>>
>> No, ACQUIRE() is not scoped, just conditional. I don't think it
>> will improve anything here.
>
> Maybe I'm not understanding the problem fully?
>
> I interpreted "ACQUIRE() class" as a general GUARD class, i.e.
>
> guard(iio_trigger_notify)(indio_dev->trig);
>
> This way drivers may use other cleanup.h helpers cleaner, because of the
> goto problem?
>
> I do think it's a good idea, like a `defer` keyword. But it is a bit
> unorthodox using guard for non locks.
>
>
To take a simple example first:
static int
ads1018_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan,
int *val, int *val2, long mask)
{
int ret;
if (!iio_device_claim_direct(indio_dev))
return -EBUSY;
ret = ads1018_read_raw_unlocked(indio_dev, chan, val, val2, mask);
iio_device_release_direct(indio_dev);
return ret;
}
using ACQUIRE would look like:
static int
ads1018_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan,
int *val, int *val2, long mask)
{
int ret;
ACQUIRE(iio_device_claim_direct_mode, claim)(indio_dev);
if ((ret = ACQUIRE_ERR(iio_device_claim_direct_mode, &claim)))
return ret;
return ads1018_read_raw_unlocked(indio_dev, chan, val, val2, mask);
}
It makes it quite more verbose IMHO with little benefit (the direct
return is nice, but comes at at an expense of the rest being less
readable).
And when we need it to be scoped, it adds indent and we have to do
some unusual things still to avoid using goto.
static irqreturn_t ads1018_trigger_handler(int irq, void *p)
{
struct iio_poll_func *pf = p;
struct iio_dev *indio_dev = pf->indio_dev;
struct ads1018 *ads1018 = iio_priv(indio_dev);
struct {
__be16 conv;
aligned_s64 ts;
} scan = {};
int ret;
do {
ACQUIRE(iio_device_claim_direct_mode, claim)(indio_dev);
if ((ret = ACQUIRE_ERR(iio_device_claim_direct_mode, &claim)))
break;
if (iio_trigger_using_own(indio_dev)) {
disable_irq(ads1018->drdy_irq);
ret = ads1018_read_unlocked(ads1018, &scan.conv, true);
enable_irq(ads1018->drdy_irq);
} else {
ret = spi_read(ads1018->spi, ads1018->rx_buf, sizeof(ads1018->rx_buf));
scan.conv = ads1018->rx_buf[0];
}
} while (0);
if (!ret)
iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan), pf->timestamp);
iio_trigger_notify_done(ads1018->indio_trig);
return IRQ_HANDLED;
}
So unless Jonathan says this is what he wants, I would avoid it.
next prev parent reply other threads:[~2025-12-01 21:53 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-29 3:47 [PATCH v3 0/2] iio: Add support for TI ADS1X18 ADCs Kurt Borja
2025-11-29 3:47 ` [PATCH v3 1/2] dt-bindings: iio: adc: Add TI ADS1018/ADS1118 Kurt Borja
2025-11-29 9:25 ` Krzysztof Kozlowski
2025-11-30 3:32 ` Kurt Borja
2025-11-29 3:47 ` [PATCH v3 2/2] iio: adc: Add ti-ads1018 driver Kurt Borja
2025-11-29 14:21 ` Andy Shevchenko
2025-11-29 14:23 ` Andy Shevchenko
2025-11-30 3:31 ` Kurt Borja
2025-11-30 16:45 ` Andy Shevchenko
2025-12-01 16:07 ` David Lechner
2025-12-01 19:47 ` Kurt Borja
2025-12-01 21:53 ` David Lechner [this message]
2025-12-02 14:46 ` Kurt Borja
2025-12-06 19:27 ` Jonathan Cameron
2025-12-07 16:01 ` Kurt Borja
2025-11-29 17:08 ` kernel test robot
2025-12-01 23:09 ` David Lechner
2025-12-02 14:39 ` Kurt Borja
2025-12-02 14:59 ` Andy Shevchenko
2025-12-02 17:49 ` Kurt Borja
2025-12-02 18:04 ` Andy Shevchenko
2025-12-02 16:52 ` Kurt Borja
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=248b009e-0401-4531-b9f0-56771e16bdef@baylibre.com \
--to=dlechner@baylibre.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=andriy.shevchenko@intel.com \
--cc=andy@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuurtb@gmail.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=robh@kernel.org \
--cc=tobias.sperling@softing.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
all inboxes | Powered by JetHome®