From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oa1-f43.google.com (mail-oa1-f43.google.com [209.85.160.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0AD22386C20 for ; Wed, 17 Jun 2026 22:39:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781735989; cv=none; b=BPqboBTq6qo8lETQR+iRjGExaucrwJHYfk1RYQCRq/GP0lCQrV4XOPD/VHFzOH7Rg1yT0lwH6zOwg4KzkPKHnsfp+V5vhHUqc0T8CPVrc+RhHVcO80oIaUhv4v1H5dXZ9r9UifqOfnkFcXqlbrbmSDNxamW1Zce4V2ERoNL3nmg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781735989; c=relaxed/simple; bh=dK3ZVHC2+yjIeAkZAQyp5QYaZMYe9UWFF9c+QJVlVB8=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=MpC4yI71615JKyKqsP6keIqzSBF5Z70ca1TeD4u1AvGGwgLrUUfDyjxIruHehOnkC4vjGR3D1lGnfobnV/Fgx6jEegTehIPwwLpXdMgHkiYCMf0CTPX23AG5cWRUA1vzyZ3Tn1m0LhDVXIF5YXJV3PqSFmeycfRXVdU741IzXVk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=YZggMySd; arc=none smtp.client-ip=209.85.160.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="YZggMySd" Received: by mail-oa1-f43.google.com with SMTP id 586e51a60fabf-43bf9548df4so182282fac.0 for ; Wed, 17 Jun 2026 15:39:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1781735986; x=1782340786; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=nF/Q+/JmKyCTSBbxyYiT7cadNyPaZLke2/CQXqkm8VQ=; b=YZggMySdA9ULGF4Hcl2egzvgkrzF2hR9WcVO7txWuohatKtEMau8a2fS+HJFIc9c55 CdFx8Iqe9sn0rQF8+ktEtpmad/Od2afqCzyoX5xhdaZ1OwBv/yD/ZimZjgVfYLw1iS6G heMV6ERXTu5SjmeoEv/xdkrrfy7glBaY95iPYyG8yKVm8I7QM3k/N6ACpPZn56Unyj06 yDHX8T/5LWygNh9YKjAMeoASeOBVtOty+9Cp6WRgMP+hcQ0BOY+FY1yfP+yqjjqdYlIo ni2p5C8uRGGg1YCnjjs79kwx/BC51ezyhmXT0/efkDQWoOXqNJuuUtpmL0PqMO/kfDRu Ey9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781735986; x=1782340786; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nF/Q+/JmKyCTSBbxyYiT7cadNyPaZLke2/CQXqkm8VQ=; b=mSicUO+wiDVNl2JBudEbVxccSeCJFLeOpMHVxYgKi69wkosIxD/PBBk16MlpFUp0Uo saZjYzAI4eRGWHTtXmOavF4XJo4fvdTqxhNAvfA6RvKgS1m/819av4t+QWG2AzAnWqAF risq80YDXlFGApf+rDzueb7yRLDo8Zf0VwBtKD+y0eH4sOlafKPW2aF0MlmVBgwWaQTN rSMH2zPMDBOaxSdmhmzMhZSiTzQ4SinYvYcvK4g6K8yEftL81ivYewoinuoJOgVcH+04 e4Pq8IrrESDi42huOjoHG/xjpSips0mtUpu3snz20mMLEPp904Mj/TpweNLYb4Yf/ZV3 FaHQ== X-Forwarded-Encrypted: i=1; AFNElJ8GgykP8E5wmalqezgXK6BhJgxGAYMiW3phLJQyX5GRHB6VBc0jZY7wT3LtgAlASf+eOe+PlGHUtkYshTI=@vger.kernel.org X-Gm-Message-State: AOJu0Yytfk6WX4hR0exCcgZCX8CZf50u6LX0Xe4sxgZG5N4yC0qt5X6q coNOOu32vyf+W8tMboUlJY73pDX2mW8uuovQWBSCRQ1OrevZF17uGI/5OwZaPCi1dKs= X-Gm-Gg: AfdE7cllOsI7AsppV+N7ZEsazpGJvgfdf0O1wDEU39Xn04TMdK9LsIej8JR5+RRpNQF kMKoyhRqxZ+zVh0ohy04xQi9oCZEPyPPxJ0RLw8w1RppIA/c0HOcSVfT0FlU3NLvRXVBFjKzMcY GSy69gqYP+miVEXzQEMLnG5Zz2uSxd2ZwUP8JpTA5CojJ77++n6ioyX+Ik0SJlpkeNR7lH6DN7+ lLn1EBRk0FlIHQ+gZi/D/V+Pn9lW5hkp+83vDu6XaWHRK6XGHcAlJhq5AHQYNJ25vfzII9PL+ao zoZSBXVwxOTo5rI9v8NZvkGoBMB/0aKv0/NADE97Mat6ynDyQ16kGd9KzDbYUbJe38U+L50vE/A P5bVNZnhnXf7kjWdi16vsVnouQiGghXjYz/epq909SxGw3OyYeASntNJMyvAxuJwQITkBnxM7Ls 1NMzJTttT3B19DpxTbfvzyi4qRLbfDZ0wNft22Cz/iSmdV9WwCdSFh08HtONu0YmM= X-Received: by 2002:a05:6870:f624:b0:434:482:ecbd with SMTP id 586e51a60fabf-4466bee8fe4mr4406884fac.6.1781735985994; Wed, 17 Jun 2026 15:39:45 -0700 (PDT) Received: from ?IPV6:2600:8803:e7e4:500:9458:d356:778c:22ac? ([2600:8803:e7e4:500:9458:d356:778c:22ac]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-44308a66401sm5452397fac.3.2026.06.17.15.39.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jun 2026 15:39:45 -0700 (PDT) Message-ID: <4f7f50ad-c305-4947-b4e9-3666a4f31031@baylibre.com> Date: Wed, 17 Jun 2026 17:39:44 -0500 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 5/5] iio: adc: ltc2378: Enable triggered buffer data capture To: Marcelo Schmitt , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: jic23@kernel.org, nuno.sa@analog.com, Michael.Hennerich@analog.com, andy@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, pop.ioan-daniel@analog.com, marcelo.schmitt1@gmail.com References: <22248e8ba646fbe8edfc87e2b9be527632d5b48c.1781661028.git.marcelo.schmitt@analog.com> Content-Language: en-US From: David Lechner In-Reply-To: <22248e8ba646fbe8edfc87e2b9be527632d5b48c.1781661028.git.marcelo.schmitt@analog.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 6/16/26 9:04 PM, Marcelo Schmitt wrote: > Enable users to run triggered data captures with LTC2378 and similar ADCs. > > Signed-off-by: Marcelo Schmitt > --- > Change log v2 -> v3: > - Extracted from main driver file into a separate buffer-specific containment. > > drivers/iio/adc/ltc2378-lib-core.c | 17 +++++++- > drivers/iio/adc/ltc2378-triggered-buffer.c | 49 ++++++++++++++++++++++ > drivers/iio/adc/ltc2378.h | 15 +++++++ > 3 files changed, 80 insertions(+), 1 deletion(-) > create mode 100644 drivers/iio/adc/ltc2378-triggered-buffer.c > > diff --git a/drivers/iio/adc/ltc2378-lib-core.c b/drivers/iio/adc/ltc2378-lib-core.c > index 1160f4324d01..ec83e9f2ae81 100644 > --- a/drivers/iio/adc/ltc2378-lib-core.c > +++ b/drivers/iio/adc/ltc2378-lib-core.c > @@ -18,7 +18,7 @@ int ltc2378_lib_buffer_setup(struct iio_dev *indio_dev, struct ltc2378_state *st > > ret = __ltc2378_set_offload_ops(st); > if (ret == -EOPNOTSUPP) > - return 0; /* Let device setup complete without buffer support */ > + goto trigger_buf_setup; > > if (!ret) > ret = st->ops->buffer_setup(indio_dev, st); > @@ -27,6 +27,21 @@ int ltc2378_lib_buffer_setup(struct iio_dev *indio_dev, struct ltc2378_state *st > return dev_err_probe(dev, ret, "error on SPI offload setup\n"); > > return 0; > + > +trigger_buf_setup: > + ret = __ltc2378_set_triggered_buf_ops(st); > + if (ret == -EOPNOTSUPP) > + return 0; /* Let device setup complete without buffer support */ > + > + if (!ret) > + ret = st->ops->buffer_setup(indio_dev, st); > + > + if (ret) > + return dev_err_probe(dev, ret, "error on buffer setup\n"); This is repeating the code above. Seems like it would be better without the goto. > + > + st->chans[st->num_iio_chans++] = IIO_CHAN_SOFT_TIMESTAMP(1); Adding a channel here seems messy. I still think static const channel data would be better. But at least would be better if this was moved to the same function as the other channel setup. > + > + return 0; > } > EXPORT_SYMBOL_NS_GPL(ltc2378_lib_buffer_setup, "IIO_LTC2378"); > > diff --git a/drivers/iio/adc/ltc2378-triggered-buffer.c b/drivers/iio/adc/ltc2378-triggered-buffer.c > new file mode 100644 > index 000000000000..d1d788fb5cb4 > --- /dev/null > +++ b/drivers/iio/adc/ltc2378-triggered-buffer.c > @@ -0,0 +1,49 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright (C) 2026 Analog Devices, Inc. > + * Author: Marcelo Schmitt > + */ > + > +#include > +#include > +#include > + > +#include > + > +static irqreturn_t ltc2378_trigger_handler(int irq, void *p) > +{ > + struct iio_poll_func *pf = p; > + struct iio_dev *indio_dev = pf->indio_dev; > + struct ltc2378_state *st = iio_priv(indio_dev); > + int ret; > + > + ret = ltc2378_convert_and_acquire(st); > + if (ret < 0) > + goto err_out; As mentioned elsewhere, SPI xfer size may be 2 or 4 bytes, but we are always pushing 4 bytes, so this only works on little-endian architecture. I think best would be to have storagesize = 16 when appropriate to avoid having to manually handle this. > + > + iio_push_to_buffers_with_ts(indio_dev, &st->scan, sizeof(st->scan), > + pf->timestamp); > + > +err_out: > + iio_trigger_notify_done(indio_dev->trig); > + return IRQ_HANDLED; > +} > +