linux-loongson/Documentation/devicetree/bindings/pinctrl/mediatek,mt7988-pinctrl.yaml
Frank Wunderlich e4ee0acff5 dt-bindings: pinctrl: add binding for MT7988 SoC
This adds bindings for MT7988 pinctrl driver.

Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Link: https://lore.kernel.org/20241217085435.9586-4-linux@fw-web.de
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2024-12-27 09:22:05 +01:00

576 lines
20 KiB
YAML

# 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@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:
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.
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:
const: int_usxgmii
- if:
properties:
function:
const: dfd
then:
properties:
groups:
const: 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:
const: pmic
- if:
properties:
function:
const: pwm
then:
properties:
groups:
items:
enum: [pwm0, pwm1, pwm2, pwm2_0, pwm3, pwm3_0, pwm4, pwm4_0, pwm5, pwm5_0,
pwm6, pwm6_0, pwm7, pwm7_0]
maxItems: 2
- if:
properties:
function:
const: spi
then:
properties:
groups:
items:
enum: [spi0, spi0_wp_hold, spi1, spi2, spi2_wp_hold]
maxItems: 2
- if:
properties:
function:
const: uart
then:
properties:
groups:
items:
enum: [net_wo0_uart_txd_0, net_wo0_uart_txd_1, net_wo1_uart_txd_0,
net_wo1_uart_txd_1, net_wo2_uart_txd_0, net_wo2_uart_txd_1,
tops_uart0_0, tops_uart0_1, tops_uart0_2, tops_uart1_0,
tops_uart1_1, tops_uart1_2, uart0, uart1_0, uart1_1, uart1_2,
uart1_2_lite, uart2, uart2_0, uart2_1, uart2_3]
maxItems: 2
- if:
properties:
function:
const: watchdog
then:
properties:
groups:
const: watchdog
- if:
properties:
function:
const: udi
then:
properties:
groups:
const: udi
- if:
properties:
function:
const: usb
then:
properties:
groups:
items:
enum: [drv_vbus, drv_vbus_p1]
maxItems: 1
patternProperties:
'^conf(-[-a-z]*)?$':
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: [UART2_RXD, UART2_TXD, UART2_CTS, UART2_RTS, GPIO_A, SMI_0_MDC,
SMI_0_MDIO, PCIE30_2L_0_WAKE_N, PCIE30_2L_0_CLKREQ_N,
PCIE30_1L_1_WAKE_N, PCIE30_1L_1_CLKREQ_N, GPIO_P, WATCHDOG,
GPIO_RESET, GPIO_WPS, PMIC_I2C_SCL, PMIC_I2C_SDA, I2C_1_SCL,
I2C_1_SDA, PCIE30_2L_0_PRESET_N, PCIE30_1L_1_PRESET_N, PWMD1,
SPI0_WP, SPI0_HOLD, SPI0_CSB, SPI0_MISO, SPI0_MOSI, SPI0_CLK,
SPI1_CSB, SPI1_MISO, SPI1_MOSI, SPI1_CLK, SPI2_CLK, SPI2_MOSI,
SPI2_MISO, SPI2_CSB, SPI2_HOLD, SPI2_WP, EMMC_RSTB, EMMC_DSL,
EMMC_CK, EMMC_CMD, EMMC_DATA_7, EMMC_DATA_6, EMMC_DATA_5,
EMMC_DATA_4, EMMC_DATA_3, EMMC_DATA_2, EMMC_DATA_1,
EMMC_DATA_0, PCM_FS_I2S_LRCK, PCM_CLK_I2S_BCLK,
PCM_DRX_I2S_DIN, PCM_DTX_I2S_DOUT, PCM_MCK_I2S_MCLK,
UART0_RXD, UART0_TXD, PWMD0, JTAG_JTDI, JTAG_JTDO, JTAG_JTMS,
JTAG_JTCLK, JTAG_JTRST_N, USB_DRV_VBUS_P1, LED_A, LED_B, LED_C,
LED_D, LED_E, GPIO_B, GPIO_C, I2C_2_SCL, I2C_2_SDA,
PCIE30_2L_1_PRESET_N, PCIE30_1L_0_PRESET_N,
PCIE30_2L_1_WAKE_N, PCIE30_2L_1_CLKREQ_N,
PCIE30_1L_0_WAKE_N, PCIE30_1L_0_CLKREQ_N, USB_DRV_VBUS_P0,
UART1_RXD, UART1_TXD, UART1_CTS, UART1_RTS]
maxItems: 84
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@1001f000 {
compatible = "mediatek,mt7988-pinctrl";
reg = <0 0x1001f000 0 0x1000>,
<0 0x11c10000 0 0x1000>,
<0 0x11d00000 0 0x1000>,
<0 0x11d20000 0 0x1000>,
<0 0x11e00000 0 0x1000>,
<0 0x11f00000 0 0x1000>,
<0 0x1000b000 0 0x1000>;
reg-names = "gpio", "iocfg_tr",
"iocfg_br", "iocfg_rb",
"iocfg_lb", "iocfg_tl", "eint";
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pio 0 0 84>;
interrupt-controller;
interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&gic>;
#interrupt-cells = <2>;
i2c0_pins: i2c0-g0-pins {
mux {
function = "i2c";
groups = "i2c0_1";
};
};
mdio0_pins: mdio0-pins {
mux {
function = "eth";
groups = "mdc_mdio0";
};
conf {
pins = "SMI_0_MDC", "SMI_0_MDIO";
drive-strength = <8>;
};
};
mmc0_pins_emmc_51: mmc0-emmc-51-pins {
mux {
function = "flash";
groups = "emmc_51";
};
};
mmc0_pins_sdcard: mmc0-sdcard-pins {
mux {
function = "flash";
groups = "sdcard";
};
};
pcie0_pins: pcie0-pins {
mux {
function = "pcie";
groups = "pcie_2l_0_pereset", "pcie_clk_req_n0_0",
"pcie_wake_n0_0";
};
};
pcie1_pins: pcie1-pins {
mux {
function = "pcie";
groups = "pcie_2l_1_pereset", "pcie_clk_req_n1",
"pcie_wake_n1_0";
};
};
pcie2_pins: pcie2-pins {
mux {
function = "pcie";
groups = "pcie_1l_0_pereset", "pcie_clk_req_n2_0",
"pcie_wake_n2_0";
};
};
pcie3_pins: pcie3-pins {
mux {
function = "pcie";
groups = "pcie_1l_1_pereset", "pcie_clk_req_n3",
"pcie_wake_n3_0";
};
};
uart0_pins: uart0-pins {
mux {
function = "uart";
groups = "uart0";
};
};
};
};