# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/pinctrl/mediatek,mt7981-pinctrl.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: MediaTek MT7981 Pin Controller maintainers: - Daniel Golle <daniel@makrotopia.org> description: The MediaTek's MT7981 Pin controller is used to control SoC pins. properties: compatible: enum: - mediatek,mt7981-pinctrl reg: minItems: 9 maxItems: 9 reg-names: items: - const: gpio - const: iocfg_rt - const: iocfg_rm - const: iocfg_rb - const: iocfg_lb - const: iocfg_bl - const: iocfg_tm - const: iocfg_tl - const: eint gpio-controller: true "#gpio-cells": const: 2 description: Number of cells in GPIO specifier. Since the generic GPIO binding is used, the amount of cells must be specified as 2. See the below mentioned gpio binding representation for description of particular cells. 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 patternProperties: '^.*mux.*$': type: object additionalProperties: false description: | pinmux configuration nodes. The following table shows the effective values of "group", "function" properties and chip pinout pins groups function pins (in pin#) --------------------------------------------------------------------- "wa_aice1" "wa_aice" 0, 1 "wa_aice2" "wa_aice" 0, 1 "wm_uart_0" "uart" 0, 1 "dfd" "dfd" 0, 1, 4, 5 "watchdog" "watchdog" 2 "pcie_pereset" "pcie" 3 "jtag" "jtag" 4, 5, 6, 7, 8 "wm_jtag_0" "jtag" 4, 5, 6, 7, 8 "wo0_jtag_0" "jtag" 9, 10, 11, 12, 13 "uart2_0" "uart" 4, 5, 6, 7 "gbe_led0" "led" 8 "pta_ext_0" "pta" 4, 5, 6 "pwm2" "pwm" 7 "net_wo0_uart_txd_0" "uart" 8 "spi1_0" "spi" 4, 5, 6, 7 "i2c0_0" "i2c" 6, 7 "dfd_ntrst" "dfd" 8 "wm_aice1" "wa_aice" 9, 10 "pwm0_0" "pwm" 13 "pwm0_1" "pwm" 15 "pwm1_0" "pwm" 14 "pwm1_1" "pwm" 15 "net_wo0_uart_txd_1" "uart" 14 "net_wo0_uart_txd_2" "uart" 15 "gbe_led1" "led" 13 "pcm" "pcm" 9, 10, 11, 12, 13, 25 "watchdog1" "watchdog" 13 "udi" "udi" 9, 10, 11, 12, 13 "drv_vbus" "usb" 14 "emmc_45" "flash" 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 "snfi" "flash" 16, 17, 18, 19, 20, 21 "spi0" "spi" 16, 17, 18, 19 "spi0_wp_hold" "spi" 20, 21 "spi1_1" "spi" 22, 23, 24, 25 "spi2" "spi" 26, 27, 28, 29 "spi2_wp_hold" "spi" 30, 31 "uart1_0" "uart" 16, 17, 18, 19 "uart1_1" "uart" 26, 27, 28, 29 "uart2_1" "uart" 22, 23, 24, 25 "pta_ext_1" "pta" 22, 23, 24 "wm_aurt_1" "uart" 20, 21 "wm_aurt_2" "uart" 30, 31 "wm_jtag_1" "jtag" 20, 21, 22, 23, 24 "wo0_jtag_1" "jtag" 25, 26, 27, 28, 29 "wa_aice3" "wa_aice" 28, 20 "wm_aice2" "wa_aice" 30, 31 "i2c0_1" "i2c" 30, 31 "u2_phy_i2c" "i2c" 30, 31 "uart0" "uart" 32, 33 "sgmii1_phy_i2c" "i2c" 32, 33 "u3_phy_i2c" "i2c" 32, 33 "sgmii0_phy_i2c" "i2c" 32, 33 "pcie_clk" "pcie" 34 "pcie_wake" "pcie" 35 "i2c0_2" "i2c" 36, 37 "smi_mdc_mdio" "eth" 36, 37 "gbe_ext_mdc_mdio" "eth" 36, 37 "wf0_mode1" "eth" 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 "wf0_mode3" "eth" 45, 46, 47, 48, 49, 51 "wf2g_led0" "led" 30 "wf2g_led1" "led" 34 "wf5g_led0" "led" 31 "wf5g_led1" "led" 35 "mt7531_int" "eth" 38 "ant_sel" "ant" 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 34, 35 $ref: /schemas/pinctrl/pinmux-node.yaml properties: function: description: A string containing the name of the function to mux to the group. enum: [wa_aice, dfd, jtag, pta, pcm, udi, usb, ant, eth, i2c, led, pwm, spi, uart, watchdog, flash, pcie] groups: description: An array of strings. Each string contains the name of a group. required: - function - groups allOf: - if: properties: function: const: wa_aice then: properties: groups: enum: [wa_aice1, wa_aice2, wm_aice1_1, wa_aice3, wm_aice1_2] - if: properties: function: const: dfd then: properties: groups: enum: [dfd, dfd_ntrst] - if: properties: function: const: jtag then: properties: groups: enum: [jtag, wm_jtag_0, wo0_jtag_0, wo0_jtag_1, wm_jtag_1] - if: properties: function: const: pta then: properties: groups: enum: [pta_ext_0, pta_ext_1] - if: properties: function: const: pcm then: properties: groups: enum: [pcm] - if: properties: function: const: udi then: properties: groups: enum: [udi] - if: properties: function: const: usb then: properties: groups: enum: [drv_vbus] - if: properties: function: const: ant then: properties: groups: enum: [ant_sel] - if: properties: function: const: eth then: properties: groups: enum: [smi_mdc_mdio, gbe_ext_mdc_mdio, wf0_mode1, wf0_mode3, mt7531_int] - if: properties: function: const: i2c then: properties: groups: enum: [i2c0_0, i2c0_1, u2_phy_i2c, sgmii1_phy_i2c, u3_phy_i2c, sgmii0_phy_i2c, i2c0_2] - if: properties: function: const: led then: properties: groups: enum: [gbe_led0, gbe_led1, wf2g_led0, wf2g_led1, wf5g_led0, wf5g_led1] - if: properties: function: const: pwm then: properties: groups: items: enum: [pwm2, pwm0_0, pwm0_1, pwm1_0, pwm1_1] maxItems: 3 - if: properties: function: const: spi then: properties: groups: items: enum: [spi1_0, spi0, spi0_wp_hold, spi1_1, spi2, spi2_wp_hold] maxItems: 4 - if: properties: function: const: uart then: properties: groups: items: enum: [wm_uart_0, uart2_0, net_wo0_uart_txd_0, net_wo0_uart_txd_1, net_wo0_uart_txd_2, uart1_0, uart1_1, uart2_1, wm_aurt_1, wm_aurt_2, uart0] - if: properties: function: const: watchdog then: properties: groups: enum: [watchdog] - if: properties: function: const: flash then: properties: groups: items: enum: [emmc_45, snfi] maxItems: 1 - if: properties: function: const: pcie then: properties: groups: items: enum: [pcie_clk, pcie_wake, pcie_pereset] maxItems: 3 '^.*conf.*$': type: object additionalProperties: false description: pinconf configuration nodes. $ref: /schemas/pinctrl/pincfg-node.yaml properties: pins: description: An array of strings. Each string contains the name of a pin. items: enum: [GPIO_WPS, GPIO_RESET, SYS_WATCHDOG, PCIE_PERESET_N, JTAG_JTDO, JTAG_JTDI, JTAG_JTMS, JTAG_JTCLK, JTAG_JTRST_N, WO_JTAG_JTDO, WO_JTAG_JTDI, WO_JTAG_JTMS, WO_JTAG_JTCLK, WO_JTAG_JTRST_N, USB_VBUS, PWM0, SPI0_CLK, SPI0_MOSI, SPI0_MISO, SPI0_CS, SPI0_HOLD, SPI0_WP, SPI1_CLK, SPI1_MOSI, SPI1_MISO, SPI1_CS, SPI2_CLK, SPI2_MOSI, SPI2_MISO, SPI2_CS, SPI2_HOLD, SPI2_WP, UART0_RXD, UART0_TXD, PCIE_CLK_REQ, PCIE_WAKE_N, SMI_MDC, SMI_MDIO, GBE_INT, GBE_RESET, WF_DIG_RESETB, WF_CBA_RESETB, WF_XO_REQ, WF_TOP_CLK, WF_TOP_DATA, WF_HB1, WF_HB2, WF_HB3, WF_HB4, WF_HB0, WF_HB0_B, WF_HB5, WF_HB6, WF_HB7, WF_HB8, WF_HB9, WF_HB10] maxItems: 57 bias-disable: true bias-pull-up: oneOf: - type: boolean description: normal pull up. - enum: [100, 101, 102, 103] description: PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in dt-bindings/pinctrl/mt65xx.h. bias-pull-down: oneOf: - type: boolean description: normal pull down. - enum: [100, 101, 102, 103] description: PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in dt-bindings/pinctrl/mt65xx.h. input-enable: true input-disable: true output-enable: true output-low: true output-high: true input-schmitt-enable: true input-schmitt-disable: true drive-strength: enum: [2, 4, 6, 8, 10, 12, 14, 16] mediatek,pull-up-adv: description: | Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3' Pull up settings for 2 pull resistors, R0 and R1. Valid arguments are described as below: 0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled. 1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled. 2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled. 3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled. $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] mediatek,pull-down-adv: description: | Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3' Pull down settings for 2 pull resistors, R0 and R1. Valid arguments are described as below: 0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled. 1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled. 2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled. 3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled. $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] required: - pins additionalProperties: false examples: - | #include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/pinctrl/mt65xx.h> soc { #address-cells = <2>; #size-cells = <2>; pio: pinctrl@11d00000 { compatible = "mediatek,mt7981-pinctrl"; reg = <0 0x11d00000 0 0x1000>, <0 0x11c00000 0 0x1000>, <0 0x11c10000 0 0x1000>, <0 0x11d20000 0 0x1000>, <0 0x11e00000 0 0x1000>, <0 0x11e20000 0 0x1000>, <0 0x11f00000 0 0x1000>, <0 0x11f10000 0 0x1000>, <0 0x1000b000 0 0x1000>; reg-names = "gpio", "iocfg_rt", "iocfg_rm", "iocfg_rb", "iocfg_lb", "iocfg_bl", "iocfg_tm", "iocfg_tl", "eint"; gpio-controller; #gpio-cells = <2>; gpio-ranges = <&pio 0 0 56>; interrupt-controller; interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&gic>; #interrupt-cells = <2>; mdio_pins: mdio-pins { mux { function = "eth"; groups = "smi_mdc_mdio"; }; }; spi0_flash_pins: spi0-pins { mux { function = "spi"; groups = "spi0", "spi0_wp_hold"; }; conf-pu { pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; drive-strength = <MTK_DRIVE_8mA>; bias-pull-up = <MTK_PUPD_SET_R1R0_11>; }; conf-pd { pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; drive-strength = <MTK_DRIVE_8mA>; bias-pull-down = <MTK_PUPD_SET_R1R0_11>; }; }; pcie_pins: pcie-pins { mux { function = "pcie"; groups = "pcie_clk", "pcie_wake", "pcie_pereset"; }; }; }; };