Not every function can be muxed to a group. Add proper binding which
documents which function can be muxed to a group or set of groups.
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
---
.../pinctrl/ralink,mt7620-pinctrl.yaml | 632 +++++++++++++++++-
1 file changed, 596 insertions(+), 36 deletions(-)
diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
index 6f17f3991640..06880c80ba80 100644
--- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml
@@ -29,47 +29,608 @@ patternProperties:
$ref: pinmux-node.yaml#
properties:
- groups:
- description: The pin group to select.
- enum: [
- # common
- i2c, spi, wdt,
-
- # For MT7620 SoC
- ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk,
- uartf, uartlite, wled,
-
- # For MT7628 and MT7688 SoCs
- gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
- p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0,
- pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2,
- wled_an, wled_kn,
- ]
-
function:
- description: The mux function to select.
- enum: [
- # common
- gpio, i2c, refclk, spi,
-
- # For MT7620 SoC
- ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa,
- pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf,
- rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk,
- wdt rst, wled,
-
- # For MT7628 and MT7688 SoCs
- antenna, debug, i2s, jtag, p0led_an, p0led_kn,
- p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
- p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
- rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1,
- spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -,
- ]
+ description:
+ A string containing the name of the function to mux to the group.
+ anyOf:
+ - description: For MT7620 SoC
+ enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa,
+ pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk,
+ rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk,
+ wdt rst, wled]
+
+ - description: For MT7628 and MT7688 SoCs
+ enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn,
+ p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+ p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2,
+ refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1,
+ spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -]
+
+ groups:
+ description:
+ An array of strings. Each string contains the name of a group.
required:
- groups
- function
+ allOf:
+ - if:
+ properties:
+ function:
+ const: antenna
+ then:
+ properties:
+ groups:
+ enum: [i2s]
+
+ - if:
+ properties:
+ function:
+ const: debug
+ then:
+ properties:
+ groups:
+ enum: [i2c]
+
+ - if:
+ properties:
+ function:
+ const: ephy
+ then:
+ properties:
+ groups:
+ enum: [ephy]
+
+ - if:
+ properties:
+ function:
+ const: gpio
+ then:
+ properties:
+ groups:
+ oneOf:
+ - description: For MT7620 SoC
+ enum: [ephy, i2c, mdio, nd_sd, pa, pcie, rgmii1, rgmii2,
+ spi, spi refclk, uartf, uartlite, wdt, wled]
+
+ - description: For MT7628 and MT7688 SoCs
+ enum: [gpio, i2c, i2s, p0led_an, p0led_kn, p1led_an,
+ p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn,
+ p4led_an, p4led_kn, perst, pwm0, pwm1, refclk,
+ sdmode, spi, spi cs1, spis, uart0, uart1, uart2,
+ wdt, wled_an, wled_kn]
+
+ - if:
+ properties:
+ function:
+ const: gpio i2s
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: gpio uartf
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: i2c
+ then:
+ properties:
+ groups:
+ enum: [i2c]
+
+ - if:
+ properties:
+ function:
+ const: i2s
+ then:
+ properties:
+ groups:
+ enum: [i2s]
+
+ - if:
+ properties:
+ function:
+ const: i2s uartf
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: jtag
+ then:
+ properties:
+ groups:
+ enum: [p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an,
+ p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn,
+ sdmode]
+
+ - if:
+ properties:
+ function:
+ const: mdio
+ then:
+ properties:
+ groups:
+ enum: [mdio]
+
+ - if:
+ properties:
+ function:
+ const: nand
+ then:
+ properties:
+ groups:
+ enum: [nd_sd]
+
+ - if:
+ properties:
+ function:
+ const: p0led_an
+ then:
+ properties:
+ groups:
+ enum: [p0led_an]
+
+ - if:
+ properties:
+ function:
+ const: p0led_kn
+ then:
+ properties:
+ groups:
+ enum: [p0led_kn]
+
+ - if:
+ properties:
+ function:
+ const: p1led_an
+ then:
+ properties:
+ groups:
+ enum: [p1led_an]
+
+ - if:
+ properties:
+ function:
+ const: p1led_kn
+ then:
+ properties:
+ groups:
+ enum: [p1led_kn]
+
+ - if:
+ properties:
+ function:
+ const: p2led_an
+ then:
+ properties:
+ groups:
+ enum: [p2led_an]
+
+ - if:
+ properties:
+ function:
+ const: p2led_kn
+ then:
+ properties:
+ groups:
+ enum: [p2led_kn]
+
+ - if:
+ properties:
+ function:
+ const: p3led_an
+ then:
+ properties:
+ groups:
+ enum: [p3led_an]
+
+ - if:
+ properties:
+ function:
+ const: p3led_kn
+ then:
+ properties:
+ groups:
+ enum: [p3led_kn]
+
+ - if:
+ properties:
+ function:
+ const: p4led_an
+ then:
+ properties:
+ groups:
+ enum: [p4led_an]
+
+ - if:
+ properties:
+ function:
+ const: p4led_kn
+ then:
+ properties:
+ groups:
+ enum: [p4led_kn]
+
+ - if:
+ properties:
+ function:
+ const: pa
+ then:
+ properties:
+ groups:
+ enum: [pa]
+
+ - if:
+ properties:
+ function:
+ const: pcie
+ then:
+ properties:
+ groups:
+ enum: [gpio]
+
+ - if:
+ properties:
+ function:
+ const: pcie refclk
+ then:
+ properties:
+ groups:
+ enum: [pcie]
+
+ - if:
+ properties:
+ function:
+ const: pcie rst
+ then:
+ properties:
+ groups:
+ enum: [pcie]
+
+ - if:
+ properties:
+ function:
+ const: pcm
+ then:
+ properties:
+ groups:
+ enum: [i2s]
+
+ - if:
+ properties:
+ function:
+ const: pcm gpio
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: pcm i2s
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: pcm uartf
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: perst
+ then:
+ properties:
+ groups:
+ enum: [perst]
+
+ - if:
+ properties:
+ function:
+ const: pwm
+ then:
+ properties:
+ groups:
+ enum: [uart1, uart2]
+
+ - if:
+ properties:
+ function:
+ const: pwm0
+ then:
+ properties:
+ groups:
+ enum: [pwm0]
+
+ - if:
+ properties:
+ function:
+ const: pwm1
+ then:
+ properties:
+ groups:
+ enum: [pwm1]
+
+ - if:
+ properties:
+ function:
+ const: pwm_uart2
+ then:
+ properties:
+ groups:
+ enum: [spis]
+
+ - if:
+ properties:
+ function:
+ const: refclk
+ then:
+ properties:
+ groups:
+ oneOf:
+ - description: For MT7620 SoC
+ enum: [mdio]
+
+ - description: For MT7628 and MT7688 SoCs
+ enum: [gpio, refclk, spi cs1]
+
+ - if:
+ properties:
+ function:
+ const: rgmii1
+ then:
+ properties:
+ groups:
+ enum: [rgmii1]
+
+ - if:
+ properties:
+ function:
+ const: rgmii2
+ then:
+ properties:
+ groups:
+ enum: [rgmii2]
+
+ - if:
+ properties:
+ function:
+ const: rsvd
+ then:
+ properties:
+ groups:
+ enum: [p0led_an, p0led_kn, wled_an, wled_kn]
+
+ - if:
+ properties:
+ function:
+ const: sd
+ then:
+ properties:
+ groups:
+ enum: [nd_sd]
+
+ - if:
+ properties:
+ function:
+ const: sdxc
+ then:
+ properties:
+ groups:
+ enum: [sdmode]
+
+ - if:
+ properties:
+ function:
+ const: sdxc d5 d4
+ then:
+ properties:
+ groups:
+ enum: [uart2]
+
+ - if:
+ properties:
+ function:
+ const: sdxc d6
+ then:
+ properties:
+ groups:
+ enum: [pwm1]
+
+ - if:
+ properties:
+ function:
+ const: sdxc d7
+ then:
+ properties:
+ groups:
+ enum: [pwm0]
+
+ - if:
+ properties:
+ function:
+ const: spi
+ then:
+ properties:
+ groups:
+ enum: [spi]
+
+ - if:
+ properties:
+ function:
+ const: spi cs1
+ then:
+ properties:
+ groups:
+ enum: [spi cs1]
+
+ - if:
+ properties:
+ function:
+ const: spi refclk
+ then:
+ properties:
+ groups:
+ enum: [spi refclk]
+
+ - if:
+ properties:
+ function:
+ const: spis
+ then:
+ properties:
+ groups:
+ enum: [spis]
+
+ - if:
+ properties:
+ function:
+ const: sw_r
+ then:
+ properties:
+ groups:
+ enum: [uart1]
+
+ - if:
+ properties:
+ function:
+ const: uart0
+ then:
+ properties:
+ groups:
+ enum: [uart0]
+
+ - if:
+ properties:
+ function:
+ const: uart1
+ then:
+ properties:
+ groups:
+ enum: [uart1]
+
+ - if:
+ properties:
+ function:
+ const: uart2
+ then:
+ properties:
+ groups:
+ enum: [uart2]
+
+ - if:
+ properties:
+ function:
+ const: uartf
+ then:
+ properties:
+ groups:
+ enum: [uartf]
+
+ - if:
+ properties:
+ function:
+ const: uartlite
+ then:
+ properties:
+ groups:
+ enum: [uartlite]
+
+ - if:
+ properties:
+ function:
+ const: utif
+ then:
+ properties:
+ groups:
+ enum: [p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an,
+ p3led_kn, p4led_an, p4led_kn, pwm0, pwm1, sdmode, spis]
+
+ - if:
+ properties:
+ function:
+ const: wdt
+ then:
+ properties:
+ groups:
+ enum: [wdt]
+
+ - if:
+ properties:
+ function:
+ const: wdt refclk
+ then:
+ properties:
+ groups:
+ enum: [wdt]
+
+ - if:
+ properties:
+ function:
+ const: wdt rst
+ then:
+ properties:
+ groups:
+ enum: [wdt]
+
+ - if:
+ properties:
+ function:
+ const: wled
+ then:
+ properties:
+ groups:
+ enum: [wled]
+
+ - if:
+ properties:
+ function:
+ const: wled_an
+ then:
+ properties:
+ groups:
+ enum: [wled_an]
+
+ - if:
+ properties:
+ function:
+ const: wled_kn
+ then:
+ properties:
+ groups:
+ enum: [wled_kn]
+
+ - if:
+ properties:
+ function:
+ const: "-"
+ then:
+ properties:
+ groups:
+ enum: [i2c, spi cs1, uart0]
+
additionalProperties: false
additionalProperties: false
@@ -83,7 +644,6 @@ required:
additionalProperties: false
examples:
- # Pinmux controller node
- |
pinctrl {
compatible = "ralink,mt7620-pinctrl";
--
2.37.2
On 13/12/2022 14:04, Arınç ÜNAL wrote: > Not every function can be muxed to a group. Add proper binding which > documents which function can be muxed to a group or set of groups. > > Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> > --- > .../pinctrl/ralink,mt7620-pinctrl.yaml | 632 +++++++++++++++++- > 1 file changed, 596 insertions(+), 36 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml > index 6f17f3991640..06880c80ba80 100644 > --- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml > +++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml > @@ -29,47 +29,608 @@ patternProperties: > $ref: pinmux-node.yaml# > > properties: > - groups: > - description: The pin group to select. > - enum: [ > - # common > - i2c, spi, wdt, > - > - # For MT7620 SoC > - ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk, > - uartf, uartlite, wled, > - > - # For MT7628 and MT7688 SoCs > - gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an, > - p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0, > - pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2, > - wled_an, wled_kn, > - ] > - > function: > - description: The mux function to select. > - enum: [ > - # common > - gpio, i2c, refclk, spi, > - > - # For MT7620 SoC > - ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa, > - pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, > - rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk, > - wdt rst, wled, > - > - # For MT7628 and MT7688 SoCs > - antenna, debug, i2s, jtag, p0led_an, p0led_kn, > - p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn, > - p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2, > - rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1, > - spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -, > - ] > + description: > + A string containing the name of the function to mux to the group. > + anyOf: > + - description: For MT7620 SoC > + enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa, > + pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk, > + rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk, > + wdt rst, wled] > + > + - description: For MT7628 and MT7688 SoCs > + enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn, > + p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn, > + p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2, > + refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1, > + spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -] > + > + groups: > + description: > + An array of strings. Each string contains the name of a group. > > required: > - groups > - function > > + allOf: > + - if: > + properties: > + function: > + const: antenna > + then: > + properties: > + groups: > + enum: [i2s] I have doubts such setup is maintainable and readable. I would suggest to leave just few - maybe for gpio, jtag, refclk, utif. Best regards, Krzysztof
On 14.12.2022 14:55, Krzysztof Kozlowski wrote: > On 13/12/2022 14:04, Arınç ÜNAL wrote: >> Not every function can be muxed to a group. Add proper binding which >> documents which function can be muxed to a group or set of groups. >> >> Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> >> --- >> .../pinctrl/ralink,mt7620-pinctrl.yaml | 632 +++++++++++++++++- >> 1 file changed, 596 insertions(+), 36 deletions(-) >> >> diff --git a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml >> index 6f17f3991640..06880c80ba80 100644 >> --- a/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml >> +++ b/Documentation/devicetree/bindings/pinctrl/ralink,mt7620-pinctrl.yaml >> @@ -29,47 +29,608 @@ patternProperties: >> $ref: pinmux-node.yaml# >> >> properties: >> - groups: >> - description: The pin group to select. >> - enum: [ >> - # common >> - i2c, spi, wdt, >> - >> - # For MT7620 SoC >> - ephy, mdio, nd_sd, pa, pcie, rgmii1, rgmii2, spi refclk, >> - uartf, uartlite, wled, >> - >> - # For MT7628 and MT7688 SoCs >> - gpio, i2s, p0led_an, p0led_kn, p1led_an, p1led_kn, p2led_an, >> - p2led_kn, p3led_an, p3led_kn, p4led_an, p4led_kn, perst, pwm0, >> - pwm1, refclk, sdmode, spi cs1, spis, uart0, uart1, uart2, >> - wled_an, wled_kn, >> - ] >> - >> function: >> - description: The mux function to select. >> - enum: [ >> - # common >> - gpio, i2c, refclk, spi, >> - >> - # For MT7620 SoC >> - ephy, gpio i2s, gpio uartf, i2s uartf, mdio, nand, pa, >> - pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, >> - rgmii1, rgmii2, sd, spi refclk, uartf, uartlite, wdt refclk, >> - wdt rst, wled, >> - >> - # For MT7628 and MT7688 SoCs >> - antenna, debug, i2s, jtag, p0led_an, p0led_kn, >> - p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn, >> - p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2, >> - rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi cs1, >> - spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -, >> - ] >> + description: >> + A string containing the name of the function to mux to the group. >> + anyOf: >> + - description: For MT7620 SoC >> + enum: [ephy, gpio, gpio i2s, gpio uartf, i2c, i2s uartf, mdio, nand, pa, >> + pcie refclk, pcie rst, pcm gpio, pcm i2s, pcm uartf, refclk, >> + rgmii1, rgmii2, sd, spi, spi refclk, uartf, uartlite, wdt refclk, >> + wdt rst, wled] >> + >> + - description: For MT7628 and MT7688 SoCs >> + enum: [antenna, debug, gpio, i2c, i2s, jtag, p0led_an, p0led_kn, >> + p1led_an, p1led_kn, p2led_an, p2led_kn, p3led_an, p3led_kn, >> + p4led_an, p4led_kn, pcie, pcm, perst, pwm, pwm0, pwm1, pwm_uart2, >> + refclk, rsvd, sdxc, sdxc d5 d4, sdxc d6, sdxc d7, spi, spi cs1, >> + spis, sw_r, uart0, uart1, uart2, utif, wdt, wled_an, wled_kn, -] >> + >> + groups: >> + description: >> + An array of strings. Each string contains the name of a group. >> >> required: >> - groups >> - function >> >> + allOf: >> + - if: >> + properties: >> + function: >> + const: antenna >> + then: >> + properties: >> + groups: >> + enum: [i2s] > > I have doubts such setup is maintainable and readable. I would suggest > to leave just few - maybe for gpio, jtag, refclk, utif. These bindings are not going to change once all properly defined and I'm here as a maintainer so I don't see an issue with maintaining the binding. It's the whole pin configuration of an SoC squashed under a single document. I guess this is the fate of the pinctrl bindings. The bindings for mt7622 is not so different: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pinctrl/mediatek%2Cmt7622-pinctrl.yaml#n63 It's still much better than reading the code: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pinctrl/ralink/pinctrl-mt7620.c Arınç
On 14/12/2022 14:03, Arınç ÜNAL wrote: > On 14.12.2022 14:55, Krzysztof Kozlowski wrote: >>> >>> + allOf: >>> + - if: >>> + properties: >>> + function: >>> + const: antenna >>> + then: >>> + properties: >>> + groups: >>> + enum: [i2s] >> >> I have doubts such setup is maintainable and readable. I would suggest >> to leave just few - maybe for gpio, jtag, refclk, utif. > > These bindings are not going to change once all properly defined and I'm > here as a maintainer so I don't see an issue with maintaining the binding. > > It's the whole pin configuration of an SoC squashed under a single > document. I guess this is the fate of the pinctrl bindings. The bindings > for mt7622 is not so different: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pinctrl/mediatek%2Cmt7622-pinctrl.yaml#n63 It's much smaller number of if:then: than yours but if you want to manage it then sure: Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Best regards, Krzysztof
© 2016 - 2024 Red Hat, Inc.