diff mbox series

[2/6] dt-bindings: pinctrl: mt7620: add proper function muxing binding

Message ID 20221213130430.172876-3-arinc.unal@arinc9.com
State Accepted
Commit 4e5410668af5475681793df2bb8c7d8dc6f9c327
Headers show
Series Enhance Ralink pinctrl documentation | expand

Commit Message

Arınç ÜNAL Dec. 13, 2022, 1:04 p.m. UTC
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(-)

Comments

Krzysztof Kozlowski Dec. 14, 2022, 11:55 a.m. UTC | #1
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
Arınç ÜNAL Dec. 14, 2022, 1:03 p.m. UTC | #2
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ç
Krzysztof Kozlowski Dec. 14, 2022, 1:10 p.m. UTC | #3
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
diff mbox series

Patch

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";