| // SPDX-License-Identifier: (GPL-2.0+ OR MIT) | 
 | /* | 
 |  * Copyright (c) 2018 Martin Blumenstingl <martin.blumenstingl@googlemail.com>. | 
 |  */ | 
 |  | 
 | /dts-v1/; | 
 |  | 
 | #include <dt-bindings/gpio/gpio.h> | 
 | #include <dt-bindings/input/input.h> | 
 |  | 
 | #include "meson8b.dtsi" | 
 |  | 
 | / { | 
 | 	model = "Endless Computers Endless Mini"; | 
 | 	compatible = "endless,ec100", "amlogic,meson8b"; | 
 |  | 
 | 	aliases { | 
 | 		serial0 = &uart_AO; | 
 | 	}; | 
 |  | 
 | 	chosen { | 
 | 		stdout-path = "serial0:115200n8"; | 
 | 	}; | 
 |  | 
 | 	memory { | 
 | 		device_type = "memory"; | 
 | 		reg = <0x40000000 0x40000000>; | 
 | 	}; | 
 |  | 
 | 	emmc_pwrseq: emmc-pwrseq { | 
 | 		compatible = "mmc-pwrseq-emmc"; | 
 | 		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>; | 
 | 	}; | 
 |  | 
 | 	gpio-keys { | 
 | 		compatible = "gpio-keys-polled"; | 
 | 		#address-cells = <1>; | 
 | 		#size-cells = <0>; | 
 | 		poll-interval = <100>; | 
 |  | 
 | 		pal-switch { | 
 | 			label = "pal"; | 
 | 			linux,input-type = <EV_SW>; | 
 | 			linux,code = <KEY_SWITCHVIDEOMODE>; | 
 | 			gpios = <&gpio GPIOH_7 GPIO_ACTIVE_LOW>; | 
 | 		}; | 
 |  | 
 | 		ntsc-switch { | 
 | 			label = "ntsc"; | 
 | 			linux,input-type = <EV_SW>; | 
 | 			linux,code = <KEY_SWITCHVIDEOMODE>; | 
 | 			gpios = <&gpio GPIOH_8 GPIO_ACTIVE_HIGH>; | 
 | 		}; | 
 |  | 
 | 		power-button { | 
 | 			label = "power"; | 
 | 			linux,code = <KEY_POWER>; | 
 | 			gpios = <&gpio GPIOH_9 GPIO_ACTIVE_LOW>; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	gpio-poweroff { | 
 | 		compatible = "gpio-poweroff"; | 
 | 		/* | 
 | 		 * shutdown is managed by the EC (embedded micro-controller) | 
 | 		 * which is configured through GPIOAO_2 (poweroff GPIO) and | 
 | 		 * GPIOAO_7 (power LED, which has to go LOW as well). | 
 | 		 */ | 
 | 		gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>; | 
 | 		timeout-ms = <20000>; | 
 | 	}; | 
 |  | 
 | 	leds { | 
 | 		compatible = "gpio-leds"; | 
 |  | 
 | 		led-power { | 
 | 			label = "ec100:red:power"; | 
 | 			/* | 
 | 			 * Needs to go LOW (together with the poweroff GPIO) | 
 | 			 * during shutdown to allow the EC (embedded | 
 | 			 * micro-controller) to shutdown the system. Setting | 
 | 			 * the output to LOW signals the EC to start a | 
 | 			 * "breathing"/pulsing effect until the power is fully | 
 | 			 * turned off. | 
 | 			 */ | 
 | 			gpios = <&gpio_ao GPIOAO_7 GPIO_ACTIVE_HIGH>; | 
 | 			default-state = "on"; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	rtc32k_xtal: rtc32k-xtal-clk { | 
 | 		/* X2 in the schematics */ | 
 | 		compatible = "fixed-clock"; | 
 | 		clock-frequency = <32768>; | 
 | 		clock-output-names = "RTC32K"; | 
 | 		#clock-cells = <0>; | 
 | 	}; | 
 |  | 
 | 	sound { | 
 | 		compatible = "amlogic,gx-sound-card"; | 
 | 		model = "M8B-EC100"; | 
 |  | 
 | 		assigned-clocks = <&clkc CLKID_MPLL0>, | 
 | 				  <&clkc CLKID_MPLL1>, | 
 | 				  <&clkc CLKID_MPLL2>; | 
 | 		assigned-clock-rates = <270950400>, | 
 | 				       <294912000>, | 
 | 				       <393216000>; | 
 |  | 
 | 		dai-link-0 { | 
 | 			sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>; | 
 | 		}; | 
 |  | 
 | 		dai-link-1 { | 
 | 			sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>; | 
 | 			dai-format = "i2s"; | 
 | 			mclk-fs = <256>; | 
 |  | 
 | 			codec-0 { | 
 | 				sound-dai = <&rt5640>; | 
 | 			}; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	usb_vbus: regulator-usb-vbus { | 
 | 		/* | 
 | 		 * Silergy SY6288CCAC-GP 2A Power Distribution Switch. | 
 | 		 */ | 
 | 		compatible = "regulator-fixed"; | 
 |  | 
 | 		regulator-name = "USB_VBUS"; | 
 |  | 
 | 		regulator-min-microvolt = <5000000>; | 
 | 		regulator-max-microvolt = <5000000>; | 
 |  | 
 | 		vin-supply = <&vcc_5v>; | 
 |  | 
 | 		/* | 
 | 		 * signal name from the schematics: USB_PWR_EN | 
 | 		 */ | 
 | 		gpio = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>; | 
 | 		enable-active-high; | 
 | 	}; | 
 |  | 
 | 	vcc_5v: regulator-vcc5v { | 
 | 		/* | 
 | 		 * supplied by the main power input which called PWR_5V_STB | 
 | 		 * in the schematics | 
 | 		 */ | 
 | 		compatible = "regulator-fixed"; | 
 |  | 
 | 		regulator-name = "VCC5V"; | 
 |  | 
 | 		regulator-min-microvolt = <5000000>; | 
 | 		regulator-max-microvolt = <5000000>; | 
 |  | 
 | 		/* | 
 | 		 * signal name from the schematics: 3V3_5V_EN | 
 | 		 */ | 
 | 		gpio = <&gpio GPIODV_29 GPIO_ACTIVE_LOW>; | 
 |  | 
 | 		regulator-boot-on; | 
 | 		regulator-always-on; | 
 | 	}; | 
 |  | 
 | 	vcck: regulator-vcck { | 
 | 		/* | 
 | 		 * Silergy SY8089AAC-GP 2A continuous, 3A peak, 1MHz | 
 | 		 * Synchronous Step Down Regulator. | 
 | 		 */ | 
 | 		compatible = "pwm-regulator"; | 
 |  | 
 | 		regulator-name = "VCCK"; | 
 | 		regulator-min-microvolt = <860000>; | 
 | 		regulator-max-microvolt = <1140000>; | 
 |  | 
 | 		pwm-supply = <&vcc_5v>; | 
 |  | 
 | 		pwms = <&pwm_cd 0 1148 0>; | 
 | 		pwm-dutycycle-range = <100 0>; | 
 |  | 
 | 		regulator-boot-on; | 
 | 		regulator-always-on; | 
 | 	}; | 
 |  | 
 | 	vcc_1v8: regulator-vcc1v8 { | 
 | 		/* | 
 | 		 * ABLIC S-1339D18-M5001-GP | 
 | 		 */ | 
 | 		compatible = "regulator-fixed"; | 
 |  | 
 | 		regulator-name = "VCC1V8"; | 
 | 		regulator-min-microvolt = <1800000>; | 
 | 		regulator-max-microvolt = <1800000>; | 
 |  | 
 | 		vin-supply = <&vcc_3v3>; | 
 | 	}; | 
 |  | 
 | 	vcc_3v3: regulator-vcc3v3 { | 
 | 		/* | 
 | 		 * Silergy SY8089AAC-GP 2A continuous, 3A peak, 1MHz | 
 | 		 * Synchronous Step Down Regulator. Also called | 
 | 		 * VDDIO_AO3.3V in the schematics. | 
 | 		 */ | 
 | 		compatible = "regulator-fixed"; | 
 |  | 
 | 		regulator-name = "VCC3V3"; | 
 | 		regulator-min-microvolt = <3300000>; | 
 | 		regulator-max-microvolt = <3300000>; | 
 |  | 
 | 		vin-supply = <&vcc_5v>; | 
 | 	}; | 
 |  | 
 | 	vcc_ddr3: regulator-vcc-ddr3 { | 
 | 		/* | 
 | 		 * Silergy SY8089AAC-GP 2A continuous, 3A peak, 1MHz | 
 | 		 * Synchronous Step Down Regulator. Also called | 
 | 		 * DDR3_1.5V in the schematics. | 
 | 		 */ | 
 | 		compatible = "regulator-fixed"; | 
 |  | 
 | 		regulator-name = "VCC_DDR3_1V5"; | 
 | 		regulator-min-microvolt = <1500000>; | 
 | 		regulator-max-microvolt = <1500000>; | 
 |  | 
 | 		vin-supply = <&vcc_5v>; | 
 |  | 
 | 		regulator-boot-on; | 
 | 		regulator-always-on; | 
 | 	}; | 
 |  | 
 | 	vcc_rtc: regulator-vcc-rtc { | 
 | 		/* | 
 | 		 * Global Mixed-mode Technology Inc. G918T12U-GP | 
 | 		 */ | 
 | 		compatible = "regulator-fixed"; | 
 |  | 
 | 		regulator-name = "VCC_RTC"; | 
 | 		regulator-min-microvolt = <900000>; | 
 | 		regulator-max-microvolt = <900000>; | 
 |  | 
 | 		/* | 
 | 		 * When the board is powered then the input is VCC3V3, | 
 | 		 * otherwise power is taken from the coin cell battery. | 
 | 		 */ | 
 | 		vin-supply = <&vcc_3v3>; | 
 | 	}; | 
 |  | 
 | 	vddee: regulator-vddee { | 
 | 		/* | 
 | 		 * Silergy SY8089AAC-GP 2A continuous, 3A peak, 1MHz | 
 | 		 * Synchronous Step Down Regulator. Also called VDDAO | 
 | 		 * in a part of the schematics. | 
 | 		 */ | 
 | 		compatible = "pwm-regulator"; | 
 |  | 
 | 		regulator-name = "VDDEE"; | 
 | 		regulator-min-microvolt = <860000>; | 
 | 		regulator-max-microvolt = <1140000>; | 
 |  | 
 | 		pwm-supply = <&vcc_5v>; | 
 |  | 
 | 		pwms = <&pwm_cd 1 1148 0>; | 
 | 		pwm-dutycycle-range = <100 0>; | 
 |  | 
 | 		regulator-boot-on; | 
 | 		regulator-always-on; | 
 | 	}; | 
 | }; | 
 |  | 
 | &aiu { | 
 | 	status = "okay"; | 
 |  | 
 | 	pinctrl-0 = <&i2s_am_clk_pins>, <&i2s_out_ao_clk_pins>, | 
 | 		    <&i2s_out_lr_clk_pins>, <&i2s_out_ch01_ao_pins>; | 
 | 	pinctrl-names = "default"; | 
 | }; | 
 |  | 
 | &cpu0 { | 
 | 	cpu-supply = <&vcck>; | 
 | }; | 
 |  | 
 | ðmac { | 
 | 	status = "okay"; | 
 |  | 
 | 	pinctrl-0 = <ð_rmii_pins>; | 
 | 	pinctrl-names = "default"; | 
 |  | 
 | 	phy-handle = <ð_phy0>; | 
 | 	phy-mode = "rmii"; | 
 |  | 
 | 	mdio { | 
 | 		compatible = "snps,dwmac-mdio"; | 
 | 		#address-cells = <1>; | 
 | 		#size-cells = <0>; | 
 |  | 
 | 		eth_phy0: ethernet-phy@0 { | 
 | 			/* IC Plus IP101A/G (0x02430c54) */ | 
 | 			reg = <0>; | 
 |  | 
 | 			reset-assert-us = <10000>; | 
 | 			reset-deassert-us = <10000>; | 
 | 			reset-gpios = <&gpio GPIOH_4 GPIO_ACTIVE_LOW>; | 
 |  | 
 | 			icplus,select-interrupt; | 
 | 			interrupt-parent = <&gpio_intc>; | 
 | 			/* GPIOH_3 */ | 
 | 			interrupts = <17 IRQ_TYPE_LEVEL_LOW>; | 
 | 		}; | 
 | 	}; | 
 | }; | 
 |  | 
 | &i2c_A { | 
 | 	status = "okay"; | 
 | 	pinctrl-0 = <&i2c_a_pins>; | 
 | 	pinctrl-names = "default"; | 
 |  | 
 | 	rt5640: codec@1c { | 
 | 		compatible = "realtek,rt5640"; | 
 |  | 
 | 		reg = <0x1c>; | 
 |  | 
 | 		#sound-dai-cells = <0>; | 
 |  | 
 | 		interrupt-parent = <&gpio_intc>; | 
 | 		interrupts = <13 IRQ_TYPE_EDGE_BOTH>; /* GPIOAO_13 */ | 
 |  | 
 | 		/* | 
 | 		 * TODO: realtek,ldo1-en-gpios is connected to GPIO_BSD_EN. | 
 | 		 * We currently cannot configure this pin correctly. | 
 | 		 * Luckily for us it's in the "right" state by default. | 
 | 		 */ | 
 | 		realtek,in1-differential; | 
 | 	}; | 
 | }; | 
 |  | 
 | &mali { | 
 | 	mali-supply = <&vddee>; | 
 | }; | 
 |  | 
 | &saradc { | 
 | 	status = "okay"; | 
 | 	vref-supply = <&vcc_1v8>; | 
 | }; | 
 |  | 
 | &sdhc { | 
 | 	status = "okay"; | 
 |  | 
 | 	pinctrl-0 = <&sdxc_c_pins>; | 
 | 	pinctrl-names = "default"; | 
 |  | 
 | 	bus-width = <8>; | 
 | 	max-frequency = <50000000>; | 
 |  | 
 | 	cap-mmc-highspeed; | 
 | 	disable-wp; | 
 | 	non-removable; | 
 | 	no-sdio; | 
 |  | 
 | 	mmc-pwrseq = <&emmc_pwrseq>; | 
 |  | 
 | 	vmmc-supply = <&vcc_3v3>; | 
 | 	vqmmc-supply = <&vcc_3v3>; | 
 | }; | 
 |  | 
 | &sdio { | 
 | 	status = "okay"; | 
 |  | 
 | 	pinctrl-0 = <&sd_b_pins>; | 
 | 	pinctrl-names = "default"; | 
 |  | 
 | 	/* SD card */ | 
 | 	sd_card_slot: slot@1 { | 
 | 		compatible = "mmc-slot"; | 
 | 		reg = <1>; | 
 | 		status = "okay"; | 
 |  | 
 | 		bus-width = <4>; | 
 | 		no-sdio; | 
 | 		cap-mmc-highspeed; | 
 | 		cap-sd-highspeed; | 
 | 		disable-wp; | 
 |  | 
 | 		cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>; | 
 |  | 
 | 		vmmc-supply = <&vcc_3v3>; | 
 | 	}; | 
 | }; | 
 |  | 
 | &gpio_ao { | 
 | 	gpio-line-names = "Linux_TX", "Linux_RX", | 
 | 			  "SLP_S5_N", "USB2_OC_FLAG#", | 
 | 			  "HUB_RST", "USB_PWR_EN", | 
 | 			  "I2S_IN", "SLP_S1_N", | 
 | 			  "TCK", "TMS", "TDI", "TDO", | 
 | 			  "HDMI_CEC", "5640_IRQ", | 
 | 			  "MUTE", "S805_TEST#"; | 
 | }; | 
 |  | 
 | &gpio { | 
 | 	gpio-line-names = /* Bank GPIOX */ | 
 | 			  "WIFI_SD_D0", "WIFI_SD_D1", "WIFI_SD_D2", | 
 | 			  "WIFI_SD_D3", "BTPCM_DOUT", "BTPCM_DIN", | 
 | 			  "BTPCM_SYNC", "BTPCM_CLK", "WIFI_SD_CLK", | 
 | 			  "WIFI_SD_CMD", "WIFI_32K", "WIFI_PWREN", | 
 | 			  "UART_B_TX", "UART_B_RX", "UART_B_CTS_N", | 
 | 			  "UART_B_RTS_N", "BT_EN", "WIFI_WAKE_HOST", | 
 | 			  /* Bank GPIOY */ | 
 | 			  "", "", "", "", "", "", "", "", "", "", | 
 | 			  "", "", | 
 | 			  /* Bank GPIODV */ | 
 | 			  "VCCK_PWM_C", "I2C_SDA_A", "I2C_SCL_A", | 
 | 			  "I2C_SDA_B", "I2C_SCL_B", "VDDEE_PWM_D", | 
 | 			  "VDDEE_PWM 3V3_5V_EN", | 
 | 			  /* Bank GPIOH */ | 
 | 			  "HDMI_HPD", "HDMI_I2C_SDA", "HDMI_I2C_SCL", | 
 | 			  "RMII_IRQ", "RMII_RST#", "RMII_TXD1", | 
 | 			  "RMII_TXD0", "AV_select_1", "AV_select_2", | 
 | 			  "MCU_Control_S", | 
 | 			  /* Bank CARD */ | 
 | 			  "SD_D1_B", "SD_D0_B", "SD_CLK_8726MX", | 
 | 			  "SD_CMD_8726MX", "SD_D3_B", "SD_D2_B", | 
 | 			  "CARD_EN_DET (CARD_DET)", | 
 | 			  /* Bank BOOT */ | 
 | 			  "NAND_D0 (EMMC)", "NAND_D1 (EMMC)", | 
 | 			  "NAND_D2 (EMMC)", "NAND_D3 (EMMC)", | 
 | 			  "NAND_D4 (EMMC)", "NAND_D5 (EMMC)", | 
 | 			  "NAND_D6 (EMMC)", "NAND_D7 (EMMC)", | 
 | 			  "NAND_CS1 (EMMC)", "NAND_CS2 iNAND_RS1 (EMMC)", | 
 | 			  "NAND_nR/B iNAND_CMD (EMMC)", "NAND_ALE (EMMC)", | 
 | 			  "NAND_CLE (EMMC)", "nRE_S1 NAND_nRE (EMMC)", | 
 | 			  "nWE_S1 NAND_nWE (EMMC)",  "", "", "SPI_CS", | 
 | 			  /* Bank DIF */ | 
 | 			  "RMII_RXD1", "RMII_RXD0", "RMII_CRS_DV", | 
 | 			  "RMII_50M_IN", "GPIODIF_4", "GPIODIF_5", | 
 | 			  "RMII_TXEN", "CPUETH_25MOUT", "RMII_MDC", | 
 | 			  "RMII_MDIO"; | 
 | }; | 
 |  | 
 | &pwm_cd { | 
 | 	status = "okay"; | 
 | 	pinctrl-0 = <&pwm_c1_pins>, <&pwm_d_pins>; | 
 | 	pinctrl-names = "default"; | 
 | 	clocks = <&xtal>, <&xtal>; | 
 | 	clock-names = "clkin0", "clkin1"; | 
 | }; | 
 |  | 
 | &rtc { | 
 | 	status = "okay"; | 
 | 	clocks = <&rtc32k_xtal>; | 
 | 	vdd-supply = <&vcc_rtc>; | 
 | }; | 
 |  | 
 | /* exposed through the pin headers labeled "URDUG1" on the top of the PCB */ | 
 | &uart_AO { | 
 | 	status = "okay"; | 
 | 	pinctrl-0 = <&uart_ao_a_pins>; | 
 | 	pinctrl-names = "default"; | 
 | }; | 
 |  | 
 | /* | 
 |  * connected to the Bluetooth part of the RTL8723BS SDIO wifi / Bluetooth | 
 |  * combo chip. This is only available on the variant with 2GB RAM. | 
 |  */ | 
 | &uart_B { | 
 | 	status = "okay"; | 
 | 	pinctrl-0 = <&uart_b0_pins>, <&uart_b0_cts_rts_pins>; | 
 | 	pinctrl-names = "default"; | 
 | 	uart-has-rtscts; | 
 | }; | 
 |  | 
 | &usb1 { | 
 | 	status = "okay"; | 
 | 	vbus-supply = <&usb_vbus>; | 
 | }; | 
 |  | 
 | &usb1_phy { | 
 | 	status = "okay"; | 
 | }; |