[PATCH v5 3/5] dt-bindings: pinctrl: add binding for MT7988 SoC
Rob Herring
robh at kernel.org
Wed Dec 4 06:43:41 PST 2024
On Mon, Dec 02, 2024 at 12:00:37PM +0100, Frank Wunderlich wrote:
> From: Frank Wunderlich <frank-w at public-files.de>
>
> This adds bindings for MT7988 pinctrl driver.
>
> Signed-off-by: Frank Wunderlich <frank-w at public-files.de>
> ---
> changes in v5 (so not adding RB from Rob given in v4):
> - do not use MTK_DRIVE_8mA in example
> - add _0 functions for pwm
Minor enough to keep my R-by, but if I review it again I can always find
more. :)
>
> changes in v4:
> - dt-binding: pinctrl: fix dt_binding_check fixed-string error
>
> '^mux$' should not be valid under {'pattern': '^\\^[a-zA-Z0-9,\\-._#@]+\\$$'}
> hint: Fixed strings belong in 'properties', not 'patternProperties'
>
> changes in v3:
> - limit conf subnode name with optional suffix like mmc on mt7986
> - match mux subnode without wildcards
>
> changes in v2:
> - drop gpio-cells description
> - move ref in mux subnode up
> - order uart-functions alphanumeric and fix typo
> ---
> .../pinctrl/mediatek,mt7988-pinctrl.yaml | 578 ++++++++++++++++++
> 1 file changed, 578 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/pinctrl/mediatek,mt7988-pinctrl.yaml
>
> diff --git a/Documentation/devicetree/bindings/pinctrl/mediatek,mt7988-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mediatek,mt7988-pinctrl.yaml
> new file mode 100644
> index 000000000000..dd5584557135
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pinctrl/mediatek,mt7988-pinctrl.yaml
> @@ -0,0 +1,578 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pinctrl/mediatek,mt7988-pinctrl.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek MT7988 Pin Controller
> +
> +maintainers:
> + - Sean Wang <sean.wang at kernel.org>
> +
> +description:
> + The MediaTek's MT7988 Pin controller is used to control SoC pins.
> +
> +properties:
> + compatible:
> + enum:
> + - mediatek,mt7988-pinctrl
> +
> + reg:
> + minItems: 7
> + maxItems: 7
> +
> + reg-names:
> + items:
> + - const: gpio
> + - const: iocfg_tr
> + - const: iocfg_br
> + - const: iocfg_rb
> + - const: iocfg_lb
> + - const: iocfg_tl
> + - const: eint
> +
> + gpio-controller: true
> +
> + "#gpio-cells":
> + const: 2
> +
> + gpio-ranges:
> + minItems: 1
> + maxItems: 5
> + description:
> + GPIO valid number range.
> +
> + interrupt-controller: true
> +
> + interrupts:
> + maxItems: 1
> +
> + "#interrupt-cells":
> + const: 2
> +
> +allOf:
> + - $ref: pinctrl.yaml#
> +
> +required:
> + - compatible
> + - reg
> + - reg-names
> + - gpio-controller
> + - "#gpio-cells"
> +
> +patternProperties:
> + '-pins$':
> + type: object
> + additionalProperties: false
> +
> + properties:
> + 'mux':
Drop quotes.
> + type: object
> + additionalProperties: false
> + $ref: /schemas/pinctrl/pinmux-node.yaml
> + description: |
> + pinmux configuration nodes.
> +
> + The following table shows the effective values of "group", "function"
> + properties and chip pinout pins
> +
> + groups function pins (in pin#)
> + ---------------------------------------------------------------------
> + "tops_jtag0_0" "jtag" 0, 1, 2, 3, 4
> + "wo0_jtag" "jtag" 50, 51, 52, 53, 54
> + "wo1_jtag" "jtag" 50, 51, 52, 53, 54
> + "wo2_jtag" "jtag" 50, 51, 52, 53, 54
> + "jtag" "jtag" 58, 59, 60, 61, 62
> + "tops_jtag0_1" "jtag" 58, 59, 60, 61, 62
> + "int_usxgmii" "int_usxgmii" 2, 3
> + "pwm0" "pwm" 57
> + "pwm1" "pwm" 21
> + "pwm2" "pwm" 80
> + "pwm2_0" "pwm" 58
> + "pwm3" "pwm" 81
> + "pwm3_0" "pwm" 59
> + "pwm4" "pwm" 82
> + "pwm4_0" "pwm" 60
> + "pwm5" "pwm" 83
> + "pwm5_0" "pwm" 61
> + "pwm6" "pwm" 69
> + "pwm6_0" "pwm" 62
> + "pwm7" "pwm" 70
> + "pwm7_0" "pwm" 4
> + "dfd" "dfd" 0, 1, 2, 3, 4
> + "xfi_phy0_i2c0" "i2c" 0, 1
> + "xfi_phy1_i2c0" "i2c" 0, 1
> + "xfi_phy_pll_i2c0" "i2c" 3, 4
> + "xfi_phy_pll_i2c1" "i2c" 3, 4
> + "i2c0_0" "i2c" 5, 6
> + "i2c1_sfp" "i2c" 5, 6
> + "xfi_pextp_phy0_i2c" "i2c" 5, 6
> + "xfi_pextp_phy1_i2c" "i2c" 5, 6
> + "i2c0_1" "i2c" 15, 16
> + "u30_phy_i2c0" "i2c" 15, 16
> + "u32_phy_i2c0" "i2c" 15, 16
> + "xfi_phy0_i2c1" "i2c" 15, 16
> + "xfi_phy1_i2c1" "i2c" 15, 16
> + "xfi_phy_pll_i2c2" "i2c" 15, 16
> + "i2c1_0" "i2c" 17, 18
> + "u30_phy_i2c1" "i2c" 17, 18
> + "u32_phy_i2c1" "i2c" 17, 18
> + "xfi_phy_pll_i2c3" "i2c" 17, 18
> + "sgmii0_i2c" "i2c" 17, 18
> + "sgmii1_i2c" "i2c" 17, 18
> + "i2c1_2" "i2c" 69, 70
> + "i2c2_0" "i2c" 69, 70
> + "i2c2_1" "i2c" 71, 72
> + "mdc_mdio0" "eth" 5, 6
> + "2p5g_ext_mdio" "eth" 28, 29
> + "gbe_ext_mdio" "eth" 30, 31
> + "mdc_mdio1" "eth" 69, 70
> + "pcie_wake_n0_0" "pcie" 7
> + "pcie_clk_req_n0_0" "pcie" 8
> + "pcie_wake_n3_0" "pcie" 9
> + "pcie_clk_req_n3" "pcie" 10
> + "pcie_clk_req_n0_1" "pcie" 10
> + "pcie_p0_phy_i2c" "pcie" 7, 8
> + "pcie_p1_phy_i2c" "pcie" 7, 8
> + "pcie_p3_phy_i2c" "pcie" 9, 10
> + "pcie_p2_phy_i2c" "pcie" 7, 8
> + "ckm_phy_i2c" "pcie" 9, 10
> + "pcie_wake_n0_1" "pcie" 13
> + "pcie_wake_n3_1" "pcie" 14
> + "pcie_2l_0_pereset" "pcie" 19
> + "pcie_1l_1_pereset" "pcie" 20
> + "pcie_clk_req_n2_1" "pcie" 63
> + "pcie_2l_1_pereset" "pcie" 73
> + "pcie_1l_0_pereset" "pcie" 74
> + "pcie_wake_n1_0" "pcie" 75
> + "pcie_clk_req_n1" "pcie" 76
> + "pcie_wake_n2_0" "pcie" 77
> + "pcie_clk_req_n2_0" "pcie" 78
> + "pcie_wake_n2_1" "pcie" 79
> + "pmic" "pmic" 11
> + "watchdog" "watchdog" 12
> + "spi0_wp_hold" "spi" 22, 23
> + "spi0" "spi" 24, 25, 26, 27
> + "spi1" "spi" 28, 29, 30, 31
> + "spi2" "spi" 32, 33, 34, 35
> + "spi2_wp_hold" "spi" 36, 37
> + "snfi" "flash" 22, 23, 24, 25, 26, 27
> + "emmc_45" "flash" 21, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37
> + "sdcard" "flash" 32, 33, 34, 35, 36, 37
> + "emmc_51" "flash" 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
> + "uart2" "uart" 0, 1, 2, 3
> + "tops_uart0_0" "uart" 22, 23
> + "uart2_0" "uart" 28, 29, 30, 31
> + "uart1_0" "uart" 32, 33, 34, 35
> + "uart2_1" "uart" 32, 33, 34, 35
> + "net_wo0_uart_txd_0" "uart" 28
> + "net_wo1_uart_txd_0" "uart" 29
> + "net_wo2_uart_txd_0" "uart" 30
> + "tops_uart1_0" "uart" 28, 29
> + "tops_uart0_1" "uart" 30, 31
> + "tops_uart1_1" "uart" 36, 37
> + "uart0" "uart" 55, 56
> + "tops_uart0_2" "uart" 55, 56
> + "uart2_2" "uart" 50, 51, 52, 53
> + "uart1_1" "uart" 58, 59, 60, 61
> + "uart2_3" "uart" 58, 59, 60, 61
> + "uart1_2" "uart" 80, 81, 82, 83
> + "uart1_2_lite" "uart" 80, 81
> + "tops_uart1_2" "uart" 80, 81
> + "net_wo0_uart_txd_1" "uart" 80
> + "net_wo1_uart_txd_1" "uart" 81
> + "net_wo2_uart_txd_1" "uart" 82
> + "udi" "udi" 32, 33, 34, 35, 36
> + "i2s" "audio" 50, 51, 52, 53, 54
> + "pcm" "audio" 50, 51, 52, 53
> + "gbe0_led1" "led" 58
> + "gbe1_led1" "led" 59
> + "gbe2_led1" "led" 60
> + "gbe3_led1" "led" 61
> + "2p5gbe_led1" "led" 62
> + "gbe0_led0" "led" 64
> + "gbe1_led0" "led" 65
> + "gbe2_led0" "led" 66
> + "gbe3_led0" "led" 67
> + "2p5gbe_led0" "led" 68
> + "drv_vbus_p1" "usb" 63
> + "drv_vbus" "usb" 79
> +
> + properties:
> + function:
> + description:
> + A string containing the name of the function to mux to the group.
> + enum: [audio, dfd, eth, flash, i2c, int_usxgmii, jtag, led, pcie, pmic, pwm, spi,
> + uart, udi, usb, watchdog]
> + groups:
> + description:
> + An array of strings. Each string contains the name of a group.
blank line
> + required:
> + - function
> + - groups
> +
> + allOf:
> + - if:
> + properties:
> + function:
> + const: audio
> + then:
> + properties:
> + groups:
> + enum: [i2s, pcm]
> + - if:
> + properties:
> + function:
> + const: jtag
> + then:
> + properties:
> + groups:
> + enum: [jtag, tops_jtag0_0, tops_jtag0_1, wo0_jtag, wo1_jtag, wo2_jtag]
> + - if:
> + properties:
> + function:
> + const: int_usxgmii
> + then:
> + properties:
> + groups:
> + enum: [int_usxgmii]
Use const if only 1. Elsewhere too.
> + - if:
> + properties:
> + function:
> + const: dfd
> + then:
> + properties:
> + groups:
> + enum: [dfd]
> + - if:
> + properties:
> + function:
> + const: flash
> + then:
> + properties:
> + groups:
> + enum: [emmc_45, emmc_51, sdcard, snfi]
> + - if:
> + properties:
> + function:
> + const: eth
> + then:
> + properties:
> + groups:
> + enum: [2p5g_ext_mdio, gbe_ext_mdio, mdc_mdio0, mdc_mdio1]
> + - if:
> + properties:
> + function:
> + const: i2c
> + then:
> + properties:
> + groups:
> + enum: [xfi_phy0_i2c0, xfi_phy1_i2c0, xfi_phy_pll_i2c0,
> + xfi_phy_pll_i2c1, i2c0_0, i2c1_sfp, xfi_pextp_phy0_i2c,
> + xfi_pextp_phy1_i2c, i2c0_1, u30_phy_i2c0, u32_phy_i2c0,
> + xfi_phy0_i2c1, xfi_phy1_i2c1, xfi_phy_pll_i2c2, i2c1_0,
> + u30_phy_i2c1, u32_phy_i2c1, xfi_phy_pll_i2c3, sgmii0_i2c,
> + sgmii1_i2c, i2c1_2, i2c2_0, i2c2_1]
> + - if:
> + properties:
> + function:
> + const: led
> + then:
> + properties:
> + groups:
> + enum: [2p5gbe_led0, 2p5gbe_led1, gbe0_led0, gbe0_led1, gbe1_led0, gbe1_led1,
> + gbe2_led0, gbe2_led1, gbe3_led0, gbe3_led1, wf5g_led0, wf5g_led1]
> + - if:
> + properties:
> + function:
> + const: pcie
> + then:
> + properties:
> + groups:
> + items:
> + enum: [pcie_wake_n0_0, pcie_clk_req_n0_0, pcie_wake_n3_0,
> + pcie_clk_req_n3, pcie_p0_phy_i2c, pcie_p1_phy_i2c,
> + pcie_p3_phy_i2c, pcie_p2_phy_i2c, ckm_phy_i2c,
> + pcie_wake_n0_1, pcie_wake_n3_1, pcie_2l_0_pereset,
> + pcie_1l_1_pereset, pcie_clk_req_n2_1, pcie_2l_1_pereset,
> + pcie_1l_0_pereset, pcie_wake_n1_0, pcie_clk_req_n1,
> + pcie_wake_n2_0, pcie_clk_req_n2_0, pcie_wake_n2_1,
> + pcie_clk_req_n0_1]
> + maxItems: 3
> + - if:
> + properties:
> + function:
> + const: pmic
> + then:
> + properties:
> + groups:
> + items:
> + enum: [pmic]
> + maxItems: 1
This can be just:
groups:
const: pmic
A few other places too.
Rob
More information about the linux-arm-kernel
mailing list