From: "Nuno Sá" <noname.nuno@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>
Cc: Angelo Dureghello <adureghello@baylibre.com>,
Lars-Peter Clausen <lars@metafoo.de>,
Michael Hennerich <Michael.Hennerich@analog.com>,
Nuno Sa <nuno.sa@analog.com>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Olivier Moysan <olivier.moysan@foss.st.com>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, dlechner@baylibre.com
Subject: Re: [PATCH v3 04/10] dt-bindings: iio: dac: ad3552r: add io-backend support
Date: Mon, 30 Sep 2024 09:20:08 +0200 [thread overview]
Message-ID: <ae4cfdfb9880e0a833c105fcb9e9442ef04f461b.camel@gmail.com> (raw)
In-Reply-To: <20240929115919.0318034c@jic23-huawei>
On Sun, 2024-09-29 at 11:59 +0100, Jonathan Cameron wrote:
> On Sat, 28 Sep 2024 14:20:29 +0200
> Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> > On 25/09/2024 13:55, Nuno Sá wrote:
> > > On Wed, 2024-09-25 at 09:22 +0200, Krzysztof Kozlowski wrote:
> > > > On 24/09/2024 14:27, Nuno Sá wrote:
> > > > > On Tue, 2024-09-24 at 10:02 +0200, Krzysztof Kozlowski wrote:
> > > > > > On 23/09/2024 17:50, Angelo Dureghello wrote:
> > > > > > > Hi Krzysztof,
> > > > > > >
> > > > > > > On 22/09/24 23:02, Krzysztof Kozlowski wrote:
> > > > > > > > On Thu, Sep 19, 2024 at 11:20:00AM +0200, Angelo Dureghello
> > > > > > > > wrote:
> > > > > > > > > From: Angelo Dureghello <adureghello@baylibre.com>
> > > > > > > > >
> > > > > > > > > There is a version AXI DAC IP block (for FPGAs) that provides
> > > > > > > > > a physical bus for AD3552R and similar chips, and acts as
> > > > > > > > > an SPI controller.
> > > > > > > > >
> > > > > > > > > For this case, the binding is modified to include some
> > > > > > > > > additional properties.
> > > > > > > > >
> > > > > > > > > Signed-off-by: Angelo Dureghello <adureghello@baylibre.com>
> > > > > > > > > ---
> > > > > > > > > .../devicetree/bindings/iio/dac/adi,ad3552r.yaml | 42
> > > > > > > > > ++++++++++++++++++++++
> > > > > > > > > 1 file changed, 42 insertions(+)
> > > > > > > > >
> > > > > > > > > diff --git
> > > > > > > > > a/Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml
> > > > > > > > > b/Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml
> > > > > > > > > index 41fe00034742..aca4a41c2633 100644
> > > > > > > > > ---
> > > > > > > > > a/Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml
> > > > > > > > > +++
> > > > > > > > > b/Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml
> > > > > > > > > @@ -60,6 +60,18 @@ properties:
> > > > > > > > > $ref: /schemas/types.yaml#/definitions/uint32
> > > > > > > > > enum: [0, 1, 2, 3]
> > > > > > > > >
> > > > > > > > > + io-backends:
> > > > > > > > > + description: The iio backend reference.
> > > > > > > > > + An example backend can be found at
> > > > > > > > > +
> > > > > > > > > https://analogdevicesinc.github.io/hdl/library/axi_ad3552r/index.html
> > > > > > > > > + maxItems: 1
> > > > > > > > > +
> > > > > > > > > + adi,synchronous-mode:
> > > > > > > > > + description: Enable waiting for external synchronization
> > > > > > > > > signal.
> > > > > > > > > + Some AXI IP configuration can implement a dual-IP
> > > > > > > > > layout,
> > > > > > > > > with
> > > > > > > > > internal
> > > > > > > > > + wirings for streaming synchronization.
> > > > > > > > > + type: boolean
> > > > > > > > > +
> > > > > > > > > '#address-cells':
> > > > > > > > > const: 1
> > > > > > > > >
> > > > > > > > > @@ -128,6 +140,7 @@ patternProperties:
> > > > > > > > > - custom-output-range-config
> > > > > > > > >
> > > > > > > > > allOf:
> > > > > > > > > + - $ref: /schemas/spi/spi-peripheral-props.yaml#
> > > > > > > > > - if:
> > > > > > > > > properties:
> > > > > > > > > compatible:
> > > > > > > > > @@ -238,4 +251,33 @@ examples:
> > > > > > > > > };
> > > > > > > > > };
> > > > > > > > > };
> > > > > > > > > +
> > > > > > > > > + - |
> > > > > > > > > + axi_dac: spi@44a70000 {
> > > > > > > > > + compatible = "adi,axi-ad3552r";
> > > > > > > > That is either redundant or entire example should go to the
> > > > > > > > parent
> > > > > > > > node,
> > > > > > > > if this device is fixed child of complex device (IOW,
> > > > > > > > adi,ad3552r
> > > > > > > > cannot
> > > > > > > > be used outside of adi,axi-ad3552r).
> > > > > > >
> > > > > > > ad3552r can still be used by a generic "classic" spi
> > > > > > > controller (SCLK/CS/MISO) but at a slower samplerate, fpga
> > > > > > > controller only (axi-ad3552r) can reach 33MUPS.
> > > > > >
> > > > > > OK, then this is just redundant. Drop the node. Parent example
> > > > > > should
> > > > > > contain the children, though.
> > > > > > >
> > > > > > > >
> > > > > > > > > + reg = <0x44a70000 0x1000>;
> > > > > > > > > + dmas = <&dac_tx_dma 0>;
> > > > > > > > > + dma-names = "tx";
> > > > > > > > > + #io-backend-cells = <0>;
> > > > > > > > > + clocks = <&ref_clk>;
> > > > > > > > > +
> > > > > > > > > + #address-cells = <1>;
> > > > > > > > > + #size-cells = <0>;
> > > > > > > > > +
> > > > > > > > > + dac@0 {
> > > > > > > > > + compatible = "adi,ad3552r";
> > > > > > > > > + reg = <0>;
> > > > > > > > > + reset-gpios = <&gpio0 92 0>;
> > > > > > > > Use standard defines for GPIO flags.
> > > > > > >
> > > > > > > fixed, thanks
> > > > > > >
> > > > > > > > > + io-backends = <&axi_dac>;
> > > > > > > > Why do you need to point to the parent? How much coupled are
> > > > > > > > these
> > > > > > > > devices? Child pointing to parent is not usually expected,
> > > > > > > > because
> > > > > > > > that's obvious.
> > > > > > >
> > > > > > >
> > > > > > > "io-backends" is actually the way to refer to the backend module,
> > > > > > > (used already for i.e. ad9739a),
> > > > > > > it is needed because the backend is not only acting as spi-
> > > > > > > controller,
> > > > > > > but is also providing some APIs for synchronization and bus setup
> > > > > > > support.
> > > > > >
> > > > > >
> > > > > > But if backend is the parent, then this is redundant. You can take
> > > > > > it
> > > > > > from the child-parent relationship. Is this pointing to other
> > > > > > devices
> > > > > > (non-parent) in other ad3552r configurations?
> > > > > >
> > > > >
> > > > > The backend is a provider-consumer type of API. On the consumer side
> > > > > (which
> > > > > is the
> > > > > driver the child node will probe on), we need to call
> > > > > devm_iio_backend_get()
> > > > > to get
> > > > > the backend object (which obviously is the parent). For that, 'io-
> > > > > backends'
> > > > > is being
> > > >
> > > > You described the driver, so how does it matter? Driver can call
> > > > get_backend_from_parent(), right? Or get_backend_from_fwnode(parent)?
> > >
> > > Well yes, just stating what the framework (also in terms of bindings) is
> > > expecting. Of course that on the driver side we can paper around it the
> > > way we
> > > want. But my main point was that we can only paper around it if we use
> > > code that
> > > is meant not to be used.
> > >
> > > And, FWIW, I was (trying) replying to your comment
> > >
> > > "You can take it from the child-parent relationship"
> > >
> > > Again, we can only do that by introducing new code or use code that's not
> > > meant
> > > to be used. The way we're supposed to reference backends is by explicitly
> > > using
> > > the proper FW property.
> > >
> > > Put it in another way and a completely hypothetical case. If we have a spi
> > > controller which happens to export some clock and one of it's peripherals
> > > ends
> > > up using that clock, wouldn't we still use 'clocks' to reference that
> > > clock?
> >
> > I asked how coupled are these devices. Never got the answer and you are
> > reflecting with question. Depends. Please do not create hypothetical,
> > generic scenarios and then apply them to your one particular opposite case.
>
> I'll throw a possible clarifying question in here. Could we use this
> device with a multimaster SPI setup such that the control is on a conventional
> SPI controller (maybe a qspi capable one), and the data plane only goes
> through
> a specific purpose backend? If so, then they are not tightly coupled and
> the reference makes sense. Putting it another way, the difference between
> this case and all the prior iio-backend bindings is the control and dataplanes
> use the same pins. Does that have to be the case at the host end? If it
> does,
> then the reference isn't strictly needed and this becomes a bit like
> registering a single device on an spi bus or an i2c bus depending on who
> does the registering (which is down to the parent in DT).
>
So, we currently have two drivers (with a new one being added in this series)
for the same device:
1) A SPI one tied to a typical spi controller. This is the "low speed"
implementation and does not use backends;
2) The new platform device that is connected like this to the backend.
So yes, my understanding (but Angelo should know better :)) is that they are
tightly coupled. Putting it in another way, the new platform device is very much
specific to this parent (and yeah, this is a very special usecase where control
and data planes are controlled by the IIO backend) and should not exist with it.
- Nuno Sá
next prev parent reply other threads:[~2024-09-30 7:15 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-19 9:19 [PATCH v3 00/10] iio: add support for the ad3552r AXI DAC IP Angelo Dureghello
2024-09-19 9:19 ` [PATCH v3 01/10] iio: backend: adi-axi-dac: fix wrong register bitfield Angelo Dureghello
2024-09-20 12:45 ` Nuno Sá
2024-09-29 10:38 ` Jonathan Cameron
2024-09-19 9:19 ` [PATCH v3 02/10] dt-bindings: iio: dac: axi-dac: add ad3552r axi variant Angelo Dureghello
2024-09-20 12:47 ` Nuno Sá
2024-09-22 20:59 ` Krzysztof Kozlowski
2024-09-29 10:46 ` Jonathan Cameron
2024-09-30 12:52 ` Angelo Dureghello
2024-09-30 13:15 ` Nuno Sá
2024-09-30 14:52 ` Jonathan Cameron
2024-09-19 9:19 ` [PATCH v3 03/10] dt-bindings: iio: dac: ad3552r: fix maximum spi speed Angelo Dureghello
2024-09-22 20:59 ` Krzysztof Kozlowski
2024-09-19 9:20 ` [PATCH v3 04/10] dt-bindings: iio: dac: ad3552r: add io-backend support Angelo Dureghello
2024-09-22 21:02 ` Krzysztof Kozlowski
2024-09-23 15:50 ` Angelo Dureghello
2024-09-24 8:02 ` Krzysztof Kozlowski
2024-09-24 12:27 ` Nuno Sá
2024-09-25 7:22 ` Krzysztof Kozlowski
2024-09-25 11:55 ` Nuno Sá
2024-09-28 12:20 ` Krzysztof Kozlowski
2024-09-29 10:59 ` Jonathan Cameron
2024-09-30 7:20 ` Nuno Sá [this message]
2024-09-30 7:31 ` Krzysztof Kozlowski
2024-09-30 8:24 ` Nuno Sá
2024-09-30 13:22 ` Angelo Dureghello
2024-09-30 15:09 ` Jonathan Cameron
2024-10-01 8:23 ` Nuno Sá
2024-10-01 18:29 ` Jonathan Cameron
2024-10-02 5:54 ` Krzysztof Kozlowski
2024-10-02 9:00 ` Nuno Sá
2024-09-29 10:51 ` Jonathan Cameron
2024-09-30 14:15 ` Angelo Dureghello
2024-09-30 14:49 ` Jonathan Cameron
2024-09-30 15:08 ` Angelo Dureghello
2024-09-30 19:20 ` David Lechner
2024-10-01 8:09 ` Angelo Dureghello
2024-09-19 9:20 ` [PATCH v3 05/10] iio: backend: extend features Angelo Dureghello
2024-09-20 12:50 ` Nuno Sá
2024-09-24 14:11 ` Angelo Dureghello
2024-09-25 11:59 ` Nuno Sá
2024-10-02 9:14 ` Angelo Dureghello
2024-09-29 11:05 ` Jonathan Cameron
2024-09-30 19:25 ` David Lechner
2024-10-01 8:14 ` Nuno Sá
2024-10-01 8:35 ` Angelo Dureghello
2024-10-01 18:32 ` Jonathan Cameron
2024-09-19 9:20 ` [PATCH v3 06/10] iio: backend: adi-axi-dac: " Angelo Dureghello
2024-09-20 13:10 ` Nuno Sá
2024-09-29 11:28 ` Jonathan Cameron
2024-09-19 9:20 ` [PATCH v3 07/10] iio: dac: ad3552r: changes to use FIELD_PREP Angelo Dureghello
2024-09-19 9:20 ` [PATCH v3 08/10] iio: dac: ad3552r: extract common code (no changes in behavior intended) Angelo Dureghello
2024-09-29 11:57 ` Jonathan Cameron
2024-10-02 15:50 ` Angelo Dureghello
2024-10-04 14:21 ` Jonathan Cameron
2024-09-19 9:20 ` [PATCH v3 09/10] iio: dac: ad3552r: add axi platform driver Angelo Dureghello
2024-09-29 12:17 ` Jonathan Cameron
2024-09-19 9:20 ` [PATCH v3 10/10] iio: backend: adi-axi-dac: add registering of child fdt node Angelo Dureghello
2024-09-29 12:21 ` 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=ae4cfdfb9880e0a833c105fcb9e9442ef04f461b.camel@gmail.com \
--to=noname.nuno@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=adureghello@baylibre.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=olivier.moysan@foss.st.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;
as well as URLs for NNTP newsgroup(s).