| // SPDX-License-Identifier: (GPL-2.0 OR MIT) |
| /* |
| * Copyright (C) 2025 MediaTek Inc. |
| * Author: Sam.Shih <sam.shih@mediatek.com> |
| * Author: Frank Wunderlich <frank-w@public-files.de> |
| */ |
| |
| /dts-v1/; |
| |
| #include "mt7988a.dtsi" |
| #include <dt-bindings/gpio/gpio.h> |
| #include <dt-bindings/input/input.h> |
| #include <dt-bindings/leds/common.h> |
| #include <dt-bindings/regulator/richtek,rt5190a-regulator.h> |
| |
| / { |
| aliases { |
| ethernet0 = &gmac0; |
| i2c0 = &i2c0; |
| i2c1 = &i2c1; |
| i2c2 = &i2c2; |
| /* PCA9548 (0-0070) provides 4 i2c channels */ |
| i2c3 = &imux0; |
| i2c4 = &imux1_sfp1; |
| i2c5 = &imux2_sfp2; |
| i2c6 = &imux3_wifi; |
| }; |
| |
| chosen { |
| stdout-path = &serial0; |
| }; |
| |
| fan: pwm-fan { |
| compatible = "pwm-fan"; |
| /* cooling level (0, 1, 2, 3) : (0% duty, 30% duty, 50% duty, 100% duty) */ |
| cooling-levels = <0 80 128 255>; |
| pinctrl-0 = <&pwm0_pins>; |
| pinctrl-names = "default"; |
| pwms = <&pwm 0 50000>; |
| #cooling-cells = <2>; |
| }; |
| |
| gpio-keys { |
| compatible = "gpio-keys"; |
| |
| button-reset { |
| label = "reset"; |
| gpios = <&pio 13 GPIO_ACTIVE_LOW>; |
| linux,code = <KEY_RESTART>; |
| }; |
| |
| button-wps { |
| label = "WPS"; |
| gpios = <&pio 14 GPIO_ACTIVE_LOW>; |
| linux,code = <KEY_WPS_BUTTON>; |
| }; |
| }; |
| |
| gpio-leds { |
| compatible = "gpio-leds"; |
| |
| led_red: sys-led-red { |
| color = <LED_COLOR_ID_RED>; |
| gpios = <&pca9555 15 GPIO_ACTIVE_HIGH>; |
| default-state = "on"; |
| }; |
| |
| led_blue: sys-led-blue { |
| color = <LED_COLOR_ID_BLUE>; |
| gpios = <&pca9555 14 GPIO_ACTIVE_HIGH>; |
| default-state = "on"; |
| }; |
| }; |
| |
| reg_1p8v: regulator-dvdd1v8 { |
| compatible = "regulator-fixed"; |
| regulator-name = "DVDD1V8_SOC"; |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| reg_3p3v: regulator-3v3vd { |
| compatible = "regulator-fixed"; |
| regulator-name = "3V3VD"; |
| regulator-min-microvolt = <3300000>; |
| regulator-max-microvolt = <3300000>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| /* SFP1 cage (LAN) */ |
| sfp1: sfp1 { |
| compatible = "sff,sfp"; |
| i2c-bus = <&imux1_sfp1>; |
| los-gpios = <&pio 70 GPIO_ACTIVE_HIGH>; |
| mod-def0-gpios = <&pio 69 GPIO_ACTIVE_LOW>; |
| tx-disable-gpios = <&pio 21 GPIO_ACTIVE_HIGH>; |
| maximum-power-milliwatt = <3000>; |
| }; |
| |
| /* SFP2 cage (WAN) */ |
| sfp2: sfp2 { |
| compatible = "sff,sfp"; |
| i2c-bus = <&imux2_sfp2>; |
| los-gpios = <&pio 2 GPIO_ACTIVE_HIGH>; |
| mod-def0-gpios = <&pio 1 GPIO_ACTIVE_LOW>; |
| tx-disable-gpios = <&pio 0 GPIO_ACTIVE_HIGH>; |
| maximum-power-milliwatt = <3000>; |
| }; |
| }; |
| |
| &cci { |
| proc-supply = <&rt5190_buck3>; |
| }; |
| |
| &cpu0 { |
| proc-supply = <&rt5190_buck3>; |
| }; |
| |
| &cpu1 { |
| proc-supply = <&rt5190_buck3>; |
| }; |
| |
| &cpu2 { |
| proc-supply = <&rt5190_buck3>; |
| }; |
| |
| &cpu3 { |
| proc-supply = <&rt5190_buck3>; |
| }; |
| |
| &cpu_thermal { |
| trips { |
| cpu_trip_hot: hot { |
| temperature = <120000>; |
| hysteresis = <2000>; |
| type = "hot"; |
| }; |
| |
| cpu_trip_active_high: active-high { |
| temperature = <115000>; |
| hysteresis = <2000>; |
| type = "active"; |
| }; |
| |
| cpu_trip_active_med: active-med { |
| temperature = <85000>; |
| hysteresis = <2000>; |
| type = "active"; |
| }; |
| |
| cpu_trip_active_low: active-low { |
| temperature = <40000>; |
| hysteresis = <2000>; |
| type = "active"; |
| }; |
| }; |
| |
| cooling-maps { |
| map-cpu-active-high { |
| /* active: set fan to cooling level 2 */ |
| cooling-device = <&fan 3 3>; |
| trip = <&cpu_trip_active_high>; |
| }; |
| |
| map-cpu-active-med { |
| /* active: set fan to cooling level 1 */ |
| cooling-device = <&fan 2 2>; |
| trip = <&cpu_trip_active_med>; |
| }; |
| |
| map-cpu-active-low { |
| /* active: set fan to cooling level 0 */ |
| cooling-device = <&fan 1 1>; |
| trip = <&cpu_trip_active_low>; |
| }; |
| }; |
| }; |
| |
| ð { |
| pinctrl-0 = <&mdio0_pins>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| }; |
| |
| &fan { |
| pinctrl-0 = <&pwm0_pins>; |
| pinctrl-names = "default"; |
| pwms = <&pwm 0 50000>; |
| status = "okay"; |
| }; |
| |
| &gmac0 { |
| status = "okay"; |
| }; |
| |
| &gsw_phy0 { |
| pinctrl-0 = <&gbe0_led0_pins>; |
| pinctrl-names = "gbe-led"; |
| }; |
| |
| &gsw_phy0_led0 { |
| color = <LED_COLOR_ID_YELLOW>; |
| status = "okay"; |
| }; |
| |
| &gsw_port0 { |
| label = "mgmt"; |
| }; |
| |
| /* R4Pro has only port 0 connected, so disable the others */ |
| &gsw_phy1 { |
| status = "disabled"; |
| }; |
| |
| &gsw_port1 { |
| status = "disabled"; |
| }; |
| |
| &gsw_phy2 { |
| status = "disabled"; |
| }; |
| |
| &gsw_port2 { |
| status = "disabled"; |
| }; |
| |
| &gsw_phy3 { |
| status = "disabled"; |
| }; |
| |
| &gsw_port3 { |
| status = "disabled"; |
| }; |
| |
| &i2c0 { |
| pinctrl-0 = <&i2c0_pins>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| |
| rt5190a_64: rt5190a@64 { |
| compatible = "richtek,rt5190a"; |
| reg = <0x64>; |
| vin2-supply = <&rt5190_buck1>; |
| vin3-supply = <&rt5190_buck1>; |
| vin4-supply = <&rt5190_buck1>; |
| |
| regulators { |
| rt5190_buck1: buck1 { |
| regulator-name = "rt5190a-buck1"; |
| regulator-min-microvolt = <5090000>; |
| regulator-max-microvolt = <5090000>; |
| regulator-allowed-modes = |
| <RT5190A_OPMODE_AUTO RT5190A_OPMODE_FPWM>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| buck2 { |
| regulator-name = "vcore"; |
| regulator-min-microvolt = <600000>; |
| regulator-max-microvolt = <1400000>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| rt5190_buck3: buck3 { |
| regulator-name = "vproc"; |
| regulator-min-microvolt = <600000>; |
| regulator-max-microvolt = <1400000>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| buck4 { |
| regulator-name = "rt5190a-buck4"; |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-allowed-modes = |
| <RT5190A_OPMODE_AUTO RT5190A_OPMODE_FPWM>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| |
| ldo { |
| regulator-name = "rt5190a-ldo"; |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <1800000>; |
| regulator-boot-on; |
| regulator-always-on; |
| }; |
| }; |
| }; |
| }; |
| |
| &i2c1 { |
| pinctrl-0 = <&i2c1_pins>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| }; |
| |
| &i2c2 { |
| pinctrl-0 = <&i2c2_1_pins>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| |
| pca9545: i2c-mux@70 { |
| compatible = "nxp,pca9545"; |
| reg = <0x70>; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| imux0: i2c@0 { |
| reg = <0>; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| pca9555: i2c-gpio-expander@20 { |
| compatible = "nxp,pca9555"; |
| reg = <0x20>; |
| gpio-controller; |
| #gpio-cells = <2>; |
| }; |
| |
| rtc@51 { |
| compatible = "nxp,pcf8563"; |
| reg = <0x51>; |
| }; |
| |
| eeprom@57 { |
| compatible = "atmel,24c02"; |
| reg = <0x57>; |
| address-width = <8>; |
| pagesize = <8>; |
| size = <256>; |
| }; |
| }; |
| |
| imux1_sfp1: i2c@1 { |
| reg = <1>; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| }; |
| |
| imux2_sfp2: i2c@2 { |
| reg = <2>; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| }; |
| |
| imux3_wifi: i2c@3 { |
| reg = <3>; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| }; |
| }; |
| }; |
| |
| /* mPCIe SIM2 (11300000) */ |
| &pcie0 { |
| status = "okay"; |
| }; |
| |
| /* mPCIe (11310000 near leds) SIM3 */ |
| &pcie1 { |
| status = "okay"; |
| }; |
| |
| /* M.2 (11280000) 1L0 key-m SSD1 CN13 / key-b SIM1 CN15 */ |
| &pcie2 { |
| status = "okay"; |
| }; |
| |
| /* M.2 (11290000) 1L1 key-m SSD2 CN14 / key-b SIM2 CN18 */ |
| &pcie3 { |
| status = "okay"; |
| }; |
| |
| &pio { |
| gbe0_led0_pins: gbe0-led0-pins { |
| mux { |
| function = "led"; |
| groups = "gbe0_led0"; |
| }; |
| }; |
| |
| i2c0_pins: i2c0-g0-pins { |
| mux { |
| function = "i2c"; |
| groups = "i2c0_1"; |
| }; |
| }; |
| |
| i2c1_pins: i2c1-g0-pins { |
| mux { |
| function = "i2c"; |
| groups = "i2c1_0"; |
| }; |
| }; |
| |
| i2c2_1_pins: i2c2-g1-pins { |
| mux { |
| function = "i2c"; |
| groups = "i2c2_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"; |
| }; |
| }; |
| |
| /* 1L0 0=key-b (CN15), 1=key-m (CN13) */ |
| pcie-2-hog { |
| gpio-hog; |
| gpios = <79 GPIO_ACTIVE_HIGH>; |
| output-high; |
| }; |
| |
| /* 1L1 0=key-b (CN18), 1=key-m (CN14) */ |
| pcie-3-hog { |
| gpio-hog; |
| gpios = <63 GPIO_ACTIVE_HIGH>; |
| output-high; |
| }; |
| |
| pwm0_pins: pwm0-pins { |
| mux { |
| groups = "pwm0"; |
| function = "pwm"; |
| }; |
| }; |
| |
| spi0_flash_pins: spi0-flash-pins { |
| mux { |
| function = "spi"; |
| groups = "spi0", "spi0_wp_hold"; |
| }; |
| }; |
| }; |
| |
| &pwm { |
| status = "okay"; |
| }; |
| |
| &serial0 { |
| status = "okay"; |
| }; |
| |
| &spi0 { |
| pinctrl-0 = <&spi0_flash_pins>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| |
| spi_nand: nand@0 { |
| compatible = "spi-nand"; |
| reg = <0>; |
| spi-max-frequency = <52000000>; |
| spi-rx-bus-width = <4>; |
| spi-tx-bus-width = <4>; |
| }; |
| }; |
| |
| &spi_nand { |
| partitions { |
| compatible = "fixed-partitions"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| partition@0 { |
| reg = <0x0 0x200000>; |
| label = "bl2"; |
| }; |
| |
| partition@200000 { |
| compatible = "linux,ubi"; |
| reg = <0x200000 0xfe00000>; |
| label = "ubi"; |
| }; |
| }; |
| }; |
| |
| /* back USB */ |
| &ssusb0 { |
| /* Use U2P only instead of both U3P/U2P due to U3P serdes shared with pcie2 */ |
| phys = <&xphyu2port0 PHY_TYPE_USB2>; |
| mediatek,u3p-dis-msk = <1>; |
| status = "okay"; |
| }; |
| |
| /* front USB */ |
| &ssusb1 { |
| status = "okay"; |
| }; |
| |
| &switch { |
| dsa,member = <1 0>; |
| status = "okay"; |
| }; |
| |
| &tphy { |
| status = "okay"; |
| }; |
| |
| &watchdog { |
| status = "okay"; |
| }; |
| |
| &xsphy { |
| status = "okay"; |
| }; |