// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2017 BayLibre, SAS.
 * Author: Neil Armstrong <narmstrong@baylibre.com>
 * Author: Jerome Brunet <jbrunet@baylibre.com>
 */

/dts-v1/;

#include <dt-bindings/input/input.h>

#include "meson-gxl-s905x.dtsi"

/ {
	compatible = "libretech,cc", "amlogic,s905x", "amlogic,meson-gxl";
	model = "Libre Computer Board AML-S905X-CC";

	aliases {
		serial0 = &uart_AO;
		ethernet0 = &ethmac;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	cvbs-connector {
		compatible = "composite-video-connector";

		port {
			cvbs_connector_in: endpoint {
				remote-endpoint = <&cvbs_vdac_out>;
			};
		};
	};

	emmc_pwrseq: emmc-pwrseq {
		compatible = "mmc-pwrseq-emmc";
		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
	};

	hdmi-connector {
		compatible = "hdmi-connector";
		type = "a";

		port {
			hdmi_connector_in: endpoint {
				remote-endpoint = <&hdmi_tx_tmds_out>;
			};
		};
	};

	leds {
		compatible = "gpio-leds";

		system {
			label = "librecomputer:system-status";
			gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
			default-state = "on";
			panic-indicator;
		};

		blue {
			label = "librecomputer:blue";
			gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x0 0x0 0x80000000>;
	};

	hdmi_5v: regulator-hdmi-5v {
		compatible = "regulator-fixed";

		regulator-name = "HDMI_5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;

		gpio = <&gpio GPIOH_3 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		regulator-always-on;
	};

	vcc_3v3: regulator-vcc_3v3 {
		compatible = "regulator-fixed";
		regulator-name = "VCC_3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	vcc_card: regulator-vcc-card {
		compatible = "regulator-gpio";

		regulator-name = "VCC_CARD";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;

		gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
		gpios-states = <0>;

		states = <3300000 0>,
			 <1800000 1>;

		regulator-settling-time-up-us = <200>;
		regulator-settling-time-down-us = <50000>;
	};

	vddio_ao18: regulator-vddio_ao18 {
		compatible = "regulator-fixed";
		regulator-name = "VDDIO_AO18";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
	};

	vddio_boot: regulator-vddio_boot {
		compatible = "regulator-fixed";
		regulator-name = "VDDIO_BOOT";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};
};

&cec_AO {
	status = "okay";
	pinctrl-0 = <&ao_cec_pins>;
	pinctrl-names = "default";
	hdmi-phandle = <&hdmi_tx>;
};

&cvbs_vdac_port {
	cvbs_vdac_out: endpoint {
		remote-endpoint = <&cvbs_connector_in>;
	};
};

&ethmac {
	status = "okay";
};

&internal_phy {
	pinctrl-0 = <&eth_link_led_pins>, <&eth_act_led_pins>;
	pinctrl-names = "default";
};

&ir {
	status = "okay";
	pinctrl-0 = <&remote_input_ao_pins>;
	pinctrl-names = "default";
};

&hdmi_tx {
	status = "okay";
	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
	pinctrl-names = "default";
	hdmi-supply = <&hdmi_5v>;
};

&hdmi_tx_tmds_port {
	hdmi_tx_tmds_out: endpoint {
		remote-endpoint = <&hdmi_connector_in>;
	};
};

&gpio_ao {
	gpio-line-names = "UART TX",
			  "UART RX",
			  "Blue LED",
			  "SDCard Voltage Switch",
			  "7J1 Header Pin5",
			  "7J1 Header Pin3",
			  "7J1 Header Pin12",
			  "IR In",
			  "9J3 Switch HDMI CEC/7J1 Header Pin11",
			  "7J1 Header Pin13",
			  /* GPIO_TEST_N */
			  "7J1 Header Pin15";
};

&gpio {
	gpio-line-names = /* Bank GPIOZ */
			  "", "", "", "", "", "", "",
			  "", "", "", "", "", "", "",
			  "Eth Link LED", "Eth Activity LED",
			  /* Bank GPIOH */
			  "HDMI HPD", "HDMI SDA", "HDMI SCL",
			  "HDMI_5V_EN", "9J1 Header Pin2",
			  "Analog Audio Mute",
			  "2J3 Header Pin6",
			  "2J3 Header Pin5",
			  "2J3 Header Pin4",
			  "2J3 Header Pin3",
			  /* Bank BOOT */
			  "eMMC D0", "eMMC D1", "eMMC D2", "eMMC D3",
			  "eMMC D4", "eMMC D5", "eMMC D6", "eMMC D7",
			  "eMMC Clk", "eMMC Reset", "eMMC CMD",
			  "ALT BOOT MODE", "", "", "", "eMMC Data Strobe",
			  /* Bank CARD */
			  "SDCard D1", "SDCard D0", "SDCard CLK", "SDCard CMD",
			  "SDCard D3", "SDCard D2", "SDCard Det",
			  /* Bank GPIODV */
			  "", "", "", "", "", "", "", "", "", "", "", "",
			  "", "", "", "", "", "", "", "", "", "", "", "",
			  "Green LED", "VCCK Enable",
			  "7J1 Header Pin27", "7J1 Header Pin28",
			  "VCCK Regulator", "VDDEE Regulator",
			  /* Bank GPIOX */
			  "7J1 Header Pin22", "7J1 Header Pin26",
			  "7J1 Header Pin36", "7J1 Header Pin38",
			  "7J1 Header Pin40", "7J1 Header Pin37",
			  "7J1 Header Pin33", "7J1 Header Pin35",
			  "7J1 Header Pin19", "7J1 Header Pin21",
			  "7J1 Header Pin24", "7J1 Header Pin23",
			  "7J1 Header Pin8", "7J1 Header Pin10",
			  "7J1 Header Pin16", "7J1 Header Pin18",
			  "7J1 Header Pin32", "7J1 Header Pin29",
			  "7J1 Header Pin31",
			  /* Bank GPIOCLK */
			  "7J1 Header Pin7", "";
};

&saradc {
	status = "okay";
	vref-supply = <&vddio_ao18>;
};

/* SD card */
&sd_emmc_b {
	status = "okay";
	pinctrl-0 = <&sdcard_pins>;
	pinctrl-1 = <&sdcard_clk_gate_pins>;
	pinctrl-names = "default", "clk-gate";

	bus-width = <4>;
	cap-sd-highspeed;
	max-frequency = <100000000>;
	disable-wp;

	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;

	vmmc-supply = <&vcc_3v3>;
	vqmmc-supply = <&vcc_card>;
};

/* eMMC */
&sd_emmc_c {
	status = "okay";
	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
	pinctrl-1 = <&emmc_clk_gate_pins>;
	pinctrl-names = "default", "clk-gate";

	bus-width = <8>;
	cap-mmc-highspeed;
	mmc-ddr-3_3v;
	max-frequency = <50000000>;
	non-removable;
	disable-wp;

	mmc-pwrseq = <&emmc_pwrseq>;
	vmmc-supply = <&vcc_3v3>;
	vqmmc-supply = <&vddio_boot>;
};

&uart_AO {
	status = "okay";
	pinctrl-0 = <&uart_ao_a_pins>;
	pinctrl-names = "default";
};

&usb0 {
	status = "okay";
};

&usb2_phy0 {
	/*
	 * even though the schematics don't show it:
	 * HDMI_5V is also used as supply for the USB VBUS.
	 */
	phy-supply = <&hdmi_5v>;
};
