// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2019 BayLibre SAS.
 * Author: Jerome Brunet <jbrunet@baylibre.com>
 */

/* Libretech Amlogic GX PC form factor - AKA: Tartiflette */

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

/ {
	adc-keys {
		compatible = "adc-keys";
		io-channels = <&saradc 0>;
		io-channel-names = "buttons";
		keyup-threshold-microvolt = <1800000>;

		update-button {
			label = "update";
			linux,code = <KEY_VENDOR>;
			press-threshold-microvolt = <1300000>;
		};
	};

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

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

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

		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>;
			};
		};
	};

	gpio-keys-polled {
		compatible = "gpio-keys-polled";
		poll-interval = <100>;

		power-button {
			label = "power";
			linux,code = <KEY_POWER>;
			gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
		};
	};

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

	ao_5v: regulator-ao_5v {
		compatible = "regulator-fixed";
		regulator-name = "AO_5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&dc_in>;
		regulator-always-on;
	};

	dc_in: regulator-dc_in {
		compatible = "regulator-fixed";
		regulator-name = "DC_IN";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
	};

	leds {
		compatible = "gpio-leds";

		green {
			color = <LED_COLOR_ID_GREEN>;
			function = LED_FUNCTION_DISK_ACTIVITY;
			gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "disk-activity";
		};

		blue {
			color = <LED_COLOR_ID_BLUE>;
			function = LED_FUNCTION_STATUS;
			gpios = <&gpio GPIODV_28 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
			panic-indicator;
		};
	};

	vcc_card: regulator-vcc_card {
		compatible = "regulator-fixed";
		regulator-name = "VCC_CARD";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vddio_ao3v3>;

		gpio = <&gpio GPIODV_4 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	vcc5v: regulator-vcc5v {
		compatible = "regulator-fixed";
		regulator-name = "VCC5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&ao_5v>;

		gpio = <&gpio GPIOH_3 GPIO_OPEN_DRAIN>;
	};

	vddio_ao18: regulator-vddio_ao18 {
		compatible = "regulator-fixed";
		regulator-name = "VDDIO_AO18";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&ao_5v>;
		regulator-always-on;
	};

	vddio_ao3v3: regulator-vddio_ao3v3 {
		compatible = "regulator-fixed";
		regulator-name = "VDDIO_AO3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&ao_5v>;
		regulator-always-on;
	};

	vddio_boot: regulator-vddio_boot {
		compatible = "regulator-fixed";
		regulator-name = "VDDIO_BOOT";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&vddio_ao3v3>;
		regulator-always-on;
	};

	vddio_card: regulator-vddio-card {
		compatible = "regulator-gpio";
		regulator-name = "VDDIO_CARD";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;

		gpios = <&gpio GPIODV_5 GPIO_ACTIVE_HIGH>;
		gpios-states = <0>;

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

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

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

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

&ethmac {
	pinctrl-0 = <&eth_pins>, <&eth_phy_irq_pins>;
	pinctrl-names = "default";
	phy-handle = <&external_phy>;
	amlogic,tx-delay-ns = <2>;
	phy-mode = "rgmii";
	status = "okay";
};

&external_mdio {
	external_phy: ethernet-phy@0 {
		reg = <0>;
		max-speed = <1000>;
		reset-assert-us = <10000>;
		reset-deassert-us = <30000>;
		reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
		interrupt-parent = <&gpio_intc>;
		interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
	};
};

&pinctrl_periphs {
	/*
	 * Make sure the reset pin of the usb HUB is driven high to take
	 * it out of reset.
	 */
	usb1_rst_pins: usb1_rst_irq {
		mux {
			groups = "GPIODV_3";
			function = "gpio_periphs";
			bias-disable;
			output-high;
		};
	};

	/* Make sure the phy irq pin is properly configured as input */
	eth_phy_irq_pins: eth_phy_irq {
		mux {
			groups = "GPIOZ_15";
			function = "gpio_periphs";
			bias-disable;
			output-disable;
		};
	};
};

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

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

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

&i2c_C {
	pinctrl-0 = <&i2c_c_dv18_pins>;
	pinctrl-names = "default";
	status = "okay";

	rtc: rtc@51 {
		reg = <0x51>;
		compatible = "nxp,pcf8563";
		#clock-cells = <0>;
		clock-output-names = "rtc_clkout";
	};
};

&pwm_AO_ab {
	pinctrl-0 = <&pwm_ao_a_3_pins>;
	pinctrl-names = "default";
	clocks = <&clkc CLKID_FCLK_DIV4>;
	clock-names = "clkin0";
	status = "okay";
};

&pwm_ab {
	pinctrl-0 = <&pwm_b_pins>;
	pinctrl-names = "default";
	clocks = <&clkc CLKID_FCLK_DIV4>;
	clock-names = "clkin0";
	status = "okay";
};

&pwm_ef {
	pinctrl-0 = <&pwm_e_pins>, <&pwm_f_clk_pins>;
	pinctrl-names = "default";
	clocks = <&clkc CLKID_FCLK_DIV4>;
	clock-names = "clkin0";
	status = "okay";
};

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

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

	bus-width = <4>;
	cap-sd-highspeed;
	sd-uhs-sdr12;
	sd-uhs-sdr25;
	sd-uhs-sdr50;
	sd-uhs-ddr50;
	max-frequency = <200000000>;
	disable-wp;

	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;

	vmmc-supply = <&vcc_card>;
	vqmmc-supply = <&vddio_card>;

	status = "okay";
};

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

	bus-width = <8>;
	cap-mmc-highspeed;
	mmc-ddr-1_8v;
	mmc-hs200-1_8v;
	max-frequency = <200000000>;
	disable-wp;

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

	status = "okay";
};

&spifc {
	pinctrl-0 = <&nor_pins>;
	pinctrl-names = "default";
	status = "okay";

	gd25lq128: spi-flash@0 {
		compatible = "jedec,spi-nor";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0>;
		spi-max-frequency = <12000000>;
	};
};

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

&usb0 {
	status = "okay";
};

&usb2_phy0 {
	pinctrl-0 = <&usb1_rst_pins>;
	pinctrl-names = "default";
	phy-supply = <&vcc5v>;
};

&usb2_phy1 {
	phy-supply = <&vcc5v>;
};
