From: Jonathan Cameron <jic23@kernel.org>
To: Jonathan Santos <jonath4nns@gmail.com>
Cc: Conor Dooley <conor@kernel.org>,
Jonathan Santos <Jonathan.Santos@analog.com>,
linux-spi@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
linux@analog.com, broonie@kernel.org, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org,
Michael.Hennerich@analog.com, nuno.sa@analog.com,
dlechner@baylibre.com, andriy.shevchenko@intel.com
Subject: Re: [PATCH v4 1/9] spi: dt-bindings: Add spi-cs-composite property
Date: Sun, 1 Nov 2026 23:27:07 +0000 [thread overview]
Message-ID: <20261101232707.4c08cc7a@jic23-hlaptop> (raw)
In-Reply-To: <auWIqpIaegH+AWV4@JSANTO12-L01.ad.analog.com>
On Sat, 31 Oct 2026 03:20:26 -0300
Jonathan Santos <jonath4nns@gmail.com> wrote:
> On 10/27, Conor Dooley wrote:
> > On Mon, Oct 26, 2026 at 02:00:03AM +0000, Jonathan Cameron wrote:
> > > On Tue, 20 Oct 2026 22:56:41 -0300
> > > Jonathan Santos <Jonathan.Santos@analog.com> wrote:
> > >
> > > > Some setups combine several SPI devices into one logical device, with
> > > > each chip on its own CS line. All of those CS lines must be asserted at
> > > > the same time, so that one transfer reaches every chip.
> > > >
> > > > Add the 'spi-cs-composite' boolean property. When it is set, every chip
> > > > select listed in 'reg' is asserted together on each transfer.
> > >
> > > To me it feels inevitable that we will see a device / combination of
> > > devices that want groups of CS lines together and others independent.
> > >
> > > Seems less likely we'll see more than one set of composite entrees.
> > > Maybe this should be an array of values that match with specific
> > > entrees in reg?
> > >
> > > I'm not sure though. Conor, Kryzsztof or Rob, any thoughts on this
> > > or similar things that have arisen elsewhere?
> >
> > Why does the property actually exist in the first place? Does the device
> > driver not know how each CS should be treated?
> >
>
> Hi Conor, Jonathan,
>
> Thanks for the feedback.
>
> The problem we are addressing now: today the SPI core gives a driver very
> little control over chip selects. The main spi_device only drives the first
> 'reg' entry and the only way a driver can use the other CS lines is through
> ancillary devices, but for individual access only. For aggregated chips
> (AD7768-1 in this case) we need all CS lines asserted at the same time, and
> nothing in the core lets the driver ask for that AFAIK.
>
> In v1 I added a CS mask to struct spi_transfer, but that also needed a
> lane mask to work, and after the feedback we agreed it was too flexible
> and too easy to get wrong. In v2 and v3 I switched to ancillary devices
> (each with a lane attached) for single-CS access. That covered
> individual access, but there was still no way to assert all the CS lines
> at once. The spi-cs-composite property in v4 was my way around that,
> letting the main device be the aggregator and using the ancillaries for
> single access.
>
> David also suggested two alternatives before that don't need any DT changes:
>
> a) Add a CS description to struct spi_transfer or spi_message, e.g.
> passing the ancillary devices whose CS should be asserted. This also
> allows dynamic CS selection within the main device. And since the
> ancillary devices are already bound to a lane, this is less prone to
> errors than the approach on v1.
>
> b) Add a new "composite" spi device, so a driver would have the main
> device, ancillaries for individual access, and a composite device
> for simultaneous access. The issue I saw is that the ancillary and
> composite devices are siblings and their CS lines would conflict in
> the core's CS check, so only one kind could exist for a given
> device, not both (without some more complex logic in the spi cs check).
>
> I like the (b) approach, but we would have to bypass that sibling problem.
> The (a) looks less harmful to existing projects, if everyone agrees I can
> implement it on v5. Also with (a) I think we can drop the spi device
> name for now (or not?).
I don't have a strong opinion on the way forward here.
Mark, any thoughts on what is going to work best long term for SPI?
I'm nervous that we might wall ourselves into a corner if not
careful about bindings. That is less of a concern for in kernel
interfaces which probably won't be that widely used.
Jonathan
>
> Best regards,
> Jonathan Santos
>
> > >
> > > The most general case would (subject to it not working) smell like
> > >
> > > reg = < <0x1 0x4 0x5> <0x2> >
> > >
> > > Where intent is that 1 4 and 5 are meant to switch together and
> > > 2 is separate.
> >
> > I would expect that for this kind of device, the driver should know that
> > the first 3 CS are switched together and the 4th is not. I'm not really
> > sure what the internal representation should be, because if someone can
> > make a device like this, they could surely also make a device where (to
> > borrow your format) it behaves like
> >
> > | reg = < <0x1 0x4> <0x5 0x2> >
> >
> > and so on. But if those devices don't actually exist at the moment, and
> > everything is either all together or all seperate, the API for this
> > stuff in the SPI core doesn't have to solve that until a device actually
> > shows up.
> >
>
> Yes, this is a bit out of the scope and kind of complex.
>
> > Worst case is something where there's a variable grouping of chip
> > selects, e.g.
> >
> > | reg = < <0x1 0x4 0x5> <0x2> >
> >
> > or
> >
> > | reg = < <0x1 0x4> <0x2> >
> >
> > but maybe if that happens the thing to do is permit reg-names for that
> > device, and again store the relationships in the driver rather than
> > try to convey it via DT.
> >
> > Cheers,
> > Conor.
> >
> > >
> > > How to do lookup on something like this is another question.
> > >
> > > Jonathan
> > >
> > >
> > > >
> > > > Signed-off-by: Jonathan Santos <Jonathan.Santos@analog.com>
> > > > ---
> > > > Changes in v4:
> > > > * New patch. This has been included because without an explicit property,
> > > > every device with more than one 'reg' entry would have all its chip
> > > > selects asserted together. That breaks devices that use ancillary
> > > > devices for the extra CS lines, so the composite behavior is now opt-in.
> > > > ---
> > > > .../devicetree/bindings/spi/spi-peripheral-props.yaml | 8 ++++++++
> > > > 1 file changed, 8 insertions(+)
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/spi/spi-peripheral-props.yaml b/Documentation/devicetree/bindings/spi/spi-peripheral-props.yaml
> > > > index 4894196c8f9c..456cb9095632 100644
> > > > --- a/Documentation/devicetree/bindings/spi/spi-peripheral-props.yaml
> > > > +++ b/Documentation/devicetree/bindings/spi/spi-peripheral-props.yaml
> > > > @@ -60,6 +60,14 @@ properties:
> > > > Delay in nanoseconds to be introduced by the controller after CS is
> > > > de-asserted.
> > > >
> > > > + spi-cs-composite:
> > > > + description: Some SPI devices can be aggregated into a single logical
> > > > + device by asserting all their chip selects simultaneously. When this
> > > > + property is present, all chip selects listed in the 'reg' property are
> > > > + asserted together on every transfer, treating the group as one composite
> > > > + device.
> > > > + type: boolean
> > > > +
> > > > spi-rx-bus-width:
> > > > description:
> > > > Bus width to the SPI bus used for read transfers.
> > >
>
>
next prev parent reply other threads:[~2026-11-01 23:27 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-21 1:56 [PATCH v4 0/9] spi: add multi-CS and multi-chip aggregation support Jonathan Santos
2026-10-21 1:56 ` [PATCH v4 1/9] spi: dt-bindings: Add spi-cs-composite property Jonathan Santos
2026-10-26 2:00 ` Jonathan Cameron
2026-10-27 20:43 ` Conor Dooley
2026-10-31 6:20 ` Jonathan Santos
2026-11-01 23:27 ` Jonathan Cameron [this message]
2026-10-21 1:56 ` [PATCH v4 2/9] dt-bindings: iio: adc: ad7768-1: Document multidevice support Jonathan Santos
2026-10-26 2:05 ` Jonathan Cameron
2026-10-31 6:28 ` Jonathan Santos
2026-11-01 23:28 ` Jonathan Cameron
2026-10-21 1:57 ` [PATCH v4 3/9] spi: support simultaneous assertion of multiple CS Jonathan Santos
2026-10-21 1:57 ` [PATCH v4 4/9] spi: restrict CS logical values to a contiguous sequence Jonathan Santos
2026-10-21 15:06 ` Andy Shevchenko
2026-10-30 11:24 ` Nuno Sá
2026-10-21 1:57 ` [PATCH v4 5/9] spi: expand device name to include enabled CS lines for multi-CS devices Jonathan Santos
2026-10-26 2:07 ` Jonathan Cameron
2026-10-21 1:58 ` [PATCH v4 6/9] spi: introduce SPI ancillary device with lanes Jonathan Santos
2026-10-26 2:17 ` Jonathan Cameron
2026-10-21 1:58 ` [PATCH v4 7/9] spi: add KUnit tests for the multi-CS framework Jonathan Santos
2026-10-21 1:58 ` [PATCH v4 8/9] spi: spi-engine-ex: Add support for multi-CS devices Jonathan Santos
2026-10-21 15:13 ` Andy Shevchenko
2026-10-21 1:58 ` [PATCH v4 9/9] iio: adc: ad7768-1: add support for multiple chip aggregation Jonathan Santos
2026-10-26 2:26 ` Jonathan Cameron
2026-10-30 11:24 ` Nuno Sá
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=20261101232707.4c08cc7a@jic23-hlaptop \
--to=jic23@kernel.org \
--cc=Jonathan.Santos@analog.com \
--cc=Michael.Hennerich@analog.com \
--cc=andriy.shevchenko@intel.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=conor@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jonath4nns@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=linux@analog.com \
--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 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®