mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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.  
> > >   
> 
> 


  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®