From: Herve Codina <herve.codina@bootlin.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>,
Ayush Singh <ayush@beagleboard.org>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Krzysztof Kozlowski <krzk@kernel.org>,
devicetree@vger.kernel.org, Rob Herring <robh@kernel.org>,
Jason Kridner <jkridner@gmail.com>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree-compiler@vger.kernel.org,
linux-kernel@vger.kernel.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Andrew Davis <afd@ti.com>
Subject: Re: Device tree representation of (hotplug) connectors: discussion at ELCE
Date: Thu, 11 Sep 2025 12:11:03 +0200 [thread overview]
Message-ID: <20250911121103.40ccb112@bootlin.com> (raw)
In-Reply-To: <aMEAXrAC0uEW2sCc@zatzit>
Hi David, Geert,
On Wed, 10 Sep 2025 14:36:46 +1000
David Gibson <david@gibson.dropbear.id.au> wrote:
...
> >
> > A PMOD Type 2A (expanded SPI) connector provides SPI and 4 GPIOS.
> > A PMOD Type 6A (expanded I2C) connector provides I2C and 4 GPIOS.
> > Hence a plug-in board that needs SPI, I2C, and a few GPIOs, would need
> > to plug into two PMOD connectors.
> >
> > Or:
> > A PMOD Type 1A (expanded GPIO) connector provides 8 GPIOS.
> > Hence a non-multiplexed dual 7-segment LED display plug-in board needs
> > 14 or 16 GPIOS, and thus would plug into two PMOD connectors.
> >
> > To plug into two connectors, a mapping needs to provided between two
> > connectors on base and add-on board.
> >
Base on this, let me draft some ideas to have some basis to move forward.
Suppose:
- A base board with:
2x PMOD Type 2A (SPI + 4 GPIOS)
1x PMOD Type 6A (I2C + 4 GPIOS)
3x PMOD Type 1A ( 8 GPIOS)
- An addon board which needs:
- 1x PMOD type 2A
- 2x PMOD type 1A
Hardware connection:
base board addon board
PMOD 2A #0 +------+ PMOD 2A
PMOD 2A #1
PMOD 6A
PMOD 1A #0
PMOD 1A #1 +------+ PMOD 1A I
PMOD 1A #2 +------+ PMOD 1A II
The base board 'PMOD 1A #0' is not connected to the addon board.
The addon board uses the base board PMOD 1A #1 and #2.
The base board DT:
pmods {
compatible = "pmods";
pmod_2a_0: pmod-2a-0 {
compatible = "pmod-2a"
/* Describe 4 gpios connected to this connector */
gpio-map = < 0 &gpio 10>,
...
< 3 &gpio 43>;
/* Describe the bus connected to this connector */
spi_bus_2a_0: spi-bus {
compatible = "spi-bus-extension";
spi-parent = <&spi2>;
};
/* Export symbols related to this connector */
export-symbols {
pmod-2a = <&pmod_2a_0>;
spi = <&spi_bus_2a_0>;
...
};
};
pmod_2a_1: pmod-2a-1 {
compatible = "pmod-2a"
/* Describe 4 gpios connected to this connector */
gpio-map = ...
/* Describe the bus connected to this connector */
spi_bus_2a_1: spi-bus { ... };
/* Export symbols related to this connector */
export-symbols {
pmod_2a = <&pmod_2a_1>;
spi = <&spi_bus_2a_1>;
...
};
};
pmod_6a: pmod-6a {
compatible = "pmod-6a";
...
export-symbols {
pmod_6a = <&pmod_6a>;
...
};
};
pmod_1a_0: pmod-1a-0 {
compatible = "pmod-1a"
/* Describe 8 gpios connected to this connector */
gpio-map = < 0 &gpio 16>,
...
< 7 &gpio 33>;
export-symbols {
pmod_1a = <&pmod_1a_0>;
gpio0_muxed_as_gpio = <&pin_mux_xxxx>;
gpio1_muxed_as_gpio = <&pin_mux_yyyy>;
gpio2_muxed_as_gpio = <&pin_mux_zzzz>;
};
};
pmod_1a_1: pmod-1a-1 {
compatible = "pmod-1a"
/* Describe 8 gpios connected to this connector */
...
export-symbols {
pmod_1a = <&pmod_1a_1>;
};
};
pmod_1a_2: pmod-1a-2 {
compatible = "pmod-1a"
/* Describe 8 gpios connected to this connector */
...
export-symbols {
pmod_1a = <&pmod_1a_2>;
};
};
};
-- Question 1: How to describe resources needed by the addon
On the addon side, we need to tell that we need 1 PMOD 2A and 2
PMODs 1A (named i and ii).
Proposal supposing that this description will be applied at
base board pmods node (the one grouping pmod connectors):
\{ or ??? corresponding to the entry point of the addon
import-symbols {
pmod_2a = "pmod_2a";
pmod_1a_i = "pmod_1a";
pmod_1a_ii = "pmod_1a";
};
&pmod_2a {
spi-bus {
regulator@0 {
compatible "gpio-regulator";
pinctrl-0 = <&pmod_1a_i.gpio2_muxed_as_gpio>;
enable-gpios = <&pmod_1a_i 2>; /* Use GPIO #2 available on PMOD 1A I */
};
...
};
};
Import-symbols asked for symbols with local name and type (compatible string ?).
for instance 'pmod_1a_i = "pmod_2a";' means:
Hey I refernce localy 'pmod_1a_i' but I don't define it and so 'pmod_1a_i' should
be remapped to a symbol, probably a node of my expected type "pmod_2a".
Also, we can node the syntax:
&pmod_1a_i.gpio2_muxed_as_gpio
meaning I use the symbols gpio2_muxed_as_gpio provided by pmod_1a_i (namespace).
In other word, to have the addon DT successfully applied,
the node remapped to 'pmod_1a_i' has to export the symbol 'gpio2_muxed_as_gpio'.
--- Question 2: how to perform the mapping between pmods available on the
base board and pmods needed by the addon board.
The addon board describes what it is expected:
import-symbols {
pmod_2a = "pmod_2a";
pmod_1a_i = "pmod_1a";
pmod_1a_ii = "pmod_1a";
};
Based on compatible string:
pmod_2a expected by the addon can be remapped to the node
pmod-2a-0 or pmod-2a-1 described in the base board.
pmod_1a_i and pmod_1a_ii expected by the addon can be remapped
to pmod-1a-0, pmod-1a-1, pmod-1a-2.
We need some more information to set correct mapping
pmod_2a <---> pmod-2a-0
pmod_1a_i <---> pmod-1a-1
pmod_1a_ii <---> pmod-1a-2
Can we imagine that this mapping is set by the compatible "pmods"
driver base on some specific external information.
- Read info from addon to have some more hardware connection
details (not sure it is relavant with PMODs connector)
- Expect this information from user-space ?
- Any other ideas ?
Best regards,
Hervé
next prev parent reply other threads:[~2025-09-11 10:11 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 8:57 Device tree representation of (hotplug) connectors: discussion at ELCE Luca Ceresoli
2025-09-04 5:23 ` David Gibson
2025-09-04 5:45 ` Ayush Singh
2025-09-08 4:36 ` David Gibson
2025-09-08 9:01 ` Geert Uytterhoeven
2025-09-09 2:44 ` David Gibson
2025-09-08 12:51 ` Herve Codina
2025-09-09 5:09 ` David Gibson
2025-09-09 9:41 ` Herve Codina
2025-09-09 13:04 ` Geert Uytterhoeven
2025-09-10 4:36 ` David Gibson
2025-09-11 10:11 ` Herve Codina [this message]
2025-09-12 9:40 ` Luca Ceresoli
2025-09-10 4:33 ` David Gibson
2025-09-11 8:48 ` Herve Codina
2025-09-11 8:54 ` Geert Uytterhoeven
2025-09-11 10:23 ` Herve Codina
2025-09-11 12:15 ` Ayush Singh
2025-09-11 12:45 ` Herve Codina
2025-09-11 13:08 ` Geert Uytterhoeven
2025-09-11 13:58 ` Herve Codina
2025-09-15 4:51 ` David Gibson
2025-09-16 6:46 ` Herve Codina
2025-09-16 10:14 ` Geert Uytterhoeven
2025-09-16 12:22 ` Ayush Singh
2025-09-16 13:34 ` Geert Uytterhoeven
2025-09-16 14:25 ` Herve Codina
2025-09-16 15:35 ` Ayush Singh
2025-09-18 3:16 ` David Gibson
2025-09-18 7:44 ` Herve Codina
2025-09-18 8:06 ` Herve Codina
2025-09-19 4:52 ` David Gibson
2025-09-19 5:17 ` Ayush Singh
2025-09-19 15:20 ` Luca Ceresoli
2025-09-23 8:09 ` David Gibson
2025-09-23 9:48 ` Herve Codina
2025-09-23 10:29 ` Geert Uytterhoeven
2025-09-23 13:36 ` Herve Codina
2025-09-23 16:47 ` Andrew Davis
2025-09-24 4:17 ` David Gibson
2025-09-24 4:11 ` David Gibson
2025-09-24 17:03 ` Ayush Singh
2025-09-30 4:07 ` David Gibson
2025-09-30 7:52 ` Geert Uytterhoeven
2025-10-10 7:58 ` David Gibson
2025-10-10 16:31 ` Herve Codina
2025-09-24 3:54 ` David Gibson
2025-09-24 12:31 ` Herve Codina
2025-09-29 9:23 ` David Gibson
2025-09-30 7:09 ` Herve Codina
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=20250911121103.40ccb112@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=afd@ti.com \
--cc=ayush@beagleboard.org \
--cc=conor+dt@kernel.org \
--cc=david@gibson.dropbear.id.au \
--cc=devicetree-compiler@vger.kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=geert@linux-m68k.org \
--cc=jkridner@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=robh@kernel.org \
--cc=thomas.petazzoni@bootlin.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.