<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof">From: Rob Herring <robh@kernel.org></div>
<div class="elementToProof">Sent: Friday, March 14, 2025 10:06 PM</div>
<div> </div>
<div class="elementToProof">>On Wed, Feb 26, 2025 at 03:19:14PM +0100, Maud Spierings wrote:</div>
<div class="elementToProof">>> Add the bindings that describe a GOcontroll Moduline module slot. This</div>
<div class="elementToProof">>> slot provides all the interfaces to interface with a Moduline compatible</div>
<div>>> IO module. The actual module is not reasonable to describe as it can be</div>
<div class="elementToProof">>> swapped at will, with this connector the driver will be able to probe</div>
<div class="elementToProof">>> for a module on boot.</div>
<div>>></div>
<div class="elementToProof">>> The connector consists of 2 parts, one part for interfacing with the SoC</div>
<div class="elementToProof">>> and main board, the other part has 13 IO channels for the module to</div>
<div>>> interact with the outside world. The functions of these IO channels are</div>
<div class="elementToProof">>> determined by the type of module in the slot. The IO on the SoC side is</div>
<div class="elementToProof">>> as follows:</div>
<div>>></div>
<div class="elementToProof">>>  - a 3v3 supply, this tends to be the logic level of the module and its</div>
<div>>>    microcontroller</div>
<div class="elementToProof">>>  - a 5v0 supply, this can be used to power low power peripherals on the</div>
<div class="elementToProof">>>    module</div>
<div class="elementToProof">>>  - a 6v-8v supply, this can be used for high power peripherals on the</div>
<div>>>    module</div>
<div class="elementToProof">>>  - a 6v-30v supply, this tends to be a dirty supply that comes from the</div>
<div class="elementToProof">>>    controller supply after some circuit protection, or is the same as</div>
<div class="elementToProof">>>    the 6v-8v supply.</div>
<div class="elementToProof">>>  - an SPI bus which carries the communication between the SoC and the</div>
<div>>>    microcontroller on the module.</div>
<div class="elementToProof">>>  - an I2C bus shared between the SoC and all module slots which can</div>
<div class="elementToProof">>>    carry direct module-to-module communication.</div>
<div class="elementToProof">>>  - a reset line</div>
<div class="elementToProof">>>  - an interrupt line that indicates a clear to transmit signal</div>
<div class="elementToProof">>>  - a sync line shared between the SoC and all module slots which could</div>
<div>>>    be used to synchronize modules for time sensitive IO spread across</div>
<div class="elementToProof">>>    modules.</div>
<div class="elementToProof">>>  - a SMBus alert line that is shared between the modules but is not</div>
<div class="elementToProof">>>    connected to the SoC so that is ignored.</div>
<div class="elementToProof">>></div>
<div class="elementToProof">>> A slot-number property is used to identify the physical location of a</div>
<div class="elementToProof">>> module slot. Without it, it would be impossible to identify which module</div>
<div class="elementToProof">>> to control if there are multiple of one type, to address the desired IO.</div>
<div class="elementToProof">></div>
<div class="elementToProof">>Is that for a person to identify slots or s/w? If just a person, we</div>
<div>>generally use 'label' as in a sticker on the connector. If s/w, we</div>
<div class="elementToProof">>generally try to avoid made up indexing in DT though there are some</div>
<div class="elementToProof">>exceptions.</div>
<div class="elementToProof"><br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I guess both, I am not quite sure how the uapi will look like eventually.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Right now we just kind of know that spidev1.0 is slot 1 etc.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Maybe label: true could be enough but that seems to generic, it allows too</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
much wiggle room, if there is an eventual library that uses the kernel</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
uapi instead of the spidev interface it must be consistent. Or can the</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
label be restricted to being "moduleslot#"? I feel that numbers best</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
represent the way we lay out these module slots, and will provide the best</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
interface.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof">>> Signed-off-by: Maud Spierings <maudspierings@gocontroll.com></div>
<div class="elementToProof">>> ---</div>
<div>>>  .../connector/gocontroll,moduline-module-slot.yaml | 88 ++++++++++++++++++++++</div>
<div class="elementToProof">>>  1 file changed, 88 insertions(+)</div>
<div class="elementToProof">>></div>
<div>>> diff --git a/Documentation/devicetree/bindings/connector/gocontroll,moduline-module-slot.yaml b/Documentation/devicetree/bindings/connector/gocontroll,moduline-module-slot.yaml</div>
<div class="elementToProof">>> new file mode 100644</div>
<div class="elementToProof">>> index 0000000000000000000000000000000000000000..a16ae2762d160180d5b163e20f5294235e65053b</div>
<div>>> --- /dev/null</div>
<div class="elementToProof">>> +++ b/Documentation/devicetree/bindings/connector/gocontroll,moduline-module-slot.yaml</div>
<div class="elementToProof">>> @@ -0,0 +1,88 @@</div>
<div>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)</div>
<div class="elementToProof">>> +%YAML 1.2</div>
<div class="elementToProof">>> +---</div>
<div class="elementToProof">>> +$id: http://devicetree.org/schemas/connector/gocontroll,moduline-module-slot.yaml#</div>
<div class="elementToProof">>> +$schema: http://devicetree.org/meta-schemas/core.yaml#</div>
<div>>> +</div>
<div class="elementToProof">>> +title: GOcontroll Moduline Module slot</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +maintainers:</div>
<div>>> +  - Maud Spierings <maudspierings@gocontroll.com></div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +description:</div>
<div class="elementToProof">>> +  The GOcontroll Moduline module slot represents a connector that fullfills the</div>
<div class="elementToProof">>> +  Moduline slot specification, and can thus house any IO module that is also</div>
<div>>> +  built to this spec.</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +properties:</div>
<div class="elementToProof">>> +  compatible:</div>
<div>>> +    const: gocontroll,moduline-module-slot</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +  reg:</div>
<div class="elementToProof">>> +    maxItems: 1</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +  interrupts:</div>
<div class="elementToProof">>> +    description: indicates readiness, high means busy.</div>
<div>>> +    maxItems: 1</div>
<div class="elementToProof">>> +  reset-gpios:</div>
<div class="elementToProof">>> +    description: resets the module, active low.</div>
<div class="elementToProof">>> +    maxItems: 1</div>
<div class="elementToProof">>> +  sync-gpios:</div>
<div class="elementToProof">>> +    description: sync line between all module slots.</div>
<div>>> +    maxItems: 1</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +  vdd-supply:</div>
<div class="elementToProof">>> +    description: low power 3v3 supply generally for the microcontroller.</div>
<div class="elementToProof">>> +  vddp-supply:</div>
<div>>> +    description: medium power 5v0 supply for on module low power peripherals.</div>
<div class="elementToProof">>> +  vddhpp-supply:</div>
<div class="elementToProof">>> +    description: high power 6v-8v supply for on module high power peripherals.</div>
<div class="elementToProof">>> +  power-supply:</div>
<div class="elementToProof">>> +    description: high power 6v-30v supply for high power module circuits.</div>
<div>>> +</div>
<div class="elementToProof">>> +  i2c-bus:</div>
<div class="elementToProof">>> +    description: i2c bus shared between module slots and the SoC</div>
<div class="elementToProof">>> +    $ref: /schemas/types.yaml#/definitions/phandle</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +  slot-number:</div>
<div>>> +    description:</div>
<div class="elementToProof">>> +      The number of the module slot representing the location of on the pcb.</div>
<div class="elementToProof">>> +      This enables access to the modules based on slot location.</div>
<div class="elementToProof">>> +    $ref: /schemas/types.yaml#/definitions/uint32</div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">></span>> +</div>
<div class="elementToProof">>> +  spi-max-frequency: true</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +required:</div>
<div>>> +  - compatible</div>
<div class="elementToProof">>> +  - reg</div>
<div class="elementToProof">>> +  - reset-gpios</div>
<div class="elementToProof">>> +  - interrupts</div>
<div class="elementToProof">>> +  - sync-gpios</div>
<div>>> +  - i2c-bus</div>
<div class="elementToProof">>> +  - slot-number</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +additionalProperties: false</div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +examples:</div>
<div class="elementToProof">>> +  - |</div>
<div>>> +    #include <dt-bindings/gpio/gpio.h></div>
<div class="elementToProof">>> +    #include <dt-bindings/interrupt-controller/irq.h></div>
<div class="elementToProof">>> +</div>
<div class="elementToProof">>> +    spi {</div>
<div class="elementToProof">>> +        #address-cells = <1>;</div>
<div class="elementToProof">>> +        #size-cells = <0>;</div>
<div>>> +</div>
<div class="elementToProof">>> +        connector@0 {</div>
<div class="elementToProof">></div>
<div class="elementToProof">>I find this being a SPI device a bit strange. Is there a defined SPI</div>
<div>>device that every slot is going to have? Or the connector has SPI</div>
<div class="elementToProof">>interface and *anything* could be attached on it?</div>
<div class="elementToProof"><br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
So a module slot is like a pcie slot, it can be occupied or not, and when</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
it is occupied it can be any kind of module, but it can at least only be</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
one module, there is no hub like functionality.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
On this module is a microcontroller or perhaps even an FPGA in the future</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
which is the spi-device, it has the miso, mosi, sclk and cs hooked up to</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
it.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
For now this tends to be some kind of stm32f4xx, but it is very much not</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
set in stone. The only thing sure is there is some kind of module</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
controller that is hooked up to the spi device when a module is present.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
So I would say it is option 2 of what you ask. But the 'anything' is</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
restricted to module compatible with the standard, its not just going to </div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
be some IC like an ADC chip like the mcp3004 that we use on the mainboard.</div>
<div class="elementToProof"><br>
</div>
<div class="elementToProof">>> +            reg = <0>;</div>
<div class="elementToProof">>> +            compatible = "gocontroll,moduline-module-slot";</div>
<div class="elementToProof">>> +            reset-gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;</div>
<div class="elementToProof">>> +            sync-gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>;</div>
<div class="elementToProof">>> +            interrupt-parent = <&gpio4>;</div>
<div class="elementToProof">>> +            interrupts = <5 IRQ_TYPE_EDGE_FALLING>;</div>
<div class="elementToProof">>> +            vdd-supply = <&reg_3v3_per>;</div>
<div class="elementToProof">>> +            vddp-supply = <&reg_5v0>;</div>
<div class="elementToProof">>> +            vddhpp-supply = <&reg_6v4>;</div>
<div class="elementToProof">>> +            i2c-bus = <&i2c2>;</div>
<div>>> +            slot-number = <1>;</div>
<div class="elementToProof">>> +        };</div>
<div class="elementToProof">>> +    };</div>
<div class="elementToProof">>></div>
<div>>> --</div>
<div class="elementToProof">>> 2.48.1</div>
<div class="elementToProof">>></div>
<div class="elementToProof"><br>
</div>
<div class="elementToProof">I hope this cleared everything up and the bindings are still okay<br>
<br>
Kind Regards,<br>
Maud</div>
</body>
</html>