// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2021 Vyacheslav Bocharov <adeep@lexina.in>
 * Copyright (c) 2020 JetHome
 * Author: Aleksandr Kazantsev <ak@tvip.ru>
 * Author: Alexey Shevelkin <ash@tvip.ru>
 * Author: Vyacheslav Bocharov <adeep@lexina.in>
 */

/dts-v1/;

#include "meson-axg.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/thermal/thermal.h>

/ {
	compatible = "jethome,jethub-j100", "amlogic,a113d", "amlogic,meson-axg";
	model = "JetHome JetHub J100";
	aliases {
		serial0 = &uart_AO;   /* Console */
		serial2 = &uart_AO_B; /* External UART (Wireless Module) */
		ethernet0 = &ethmac;
	};

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

	/* 1024MB RAM */
	memory@0 {
		device_type = "memory";
		reg = <0x0 0x0 0x0 0x40000000>;
	};

	reserved-memory {
		linux,cma {
			size = <0x0 0x400000>;
		};
	};

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

	vcc_3v3: regulator-vcc_3v3 {
		compatible = "regulator-fixed";
		regulator-name = "VCC_3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vddao_3v3>;
		regulator-always-on;
	};

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

	vddao_3v3: regulator-vddao_3v3 {
		compatible = "regulator-fixed";
		regulator-name = "VDDAO_3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		vin-supply = <&vcc_5v>;
		regulator-always-on;
	};

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

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

	vccq_1v8: regulator-vccq_1v8 {
		compatible = "regulator-fixed";
		regulator-name = "VCCQ_1V8";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&vddao_3v3>;
		regulator-always-on;
	};

	usb_pwr: regulator-usb_pwr {
		compatible = "regulator-fixed";
		regulator-name = "USB_PWR";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&vcc_5v>;
		regulator-always-on;
	};

	sdio_pwrseq: sdio-pwrseq {
		compatible = "mmc-pwrseq-simple";
		reset-gpios = <&gpio GPIOX_7 GPIO_ACTIVE_LOW>;
		clocks = <&wifi32k>;
		clock-names = "ext_clock";
	};

	wifi32k: wifi32k {
		compatible = "pwm-clock";
		#clock-cells = <0>;
		clock-frequency = <32768>;
		pwms = <&pwm_ab 0 30518 0>; /* PWM_A at 32.768KHz */
	};

	thermal-zones {
		cpu_thermal: cpu-thermal {
			polling-delay-passive = <250>;
			polling-delay = <1000>;
			thermal-sensors = <&scpi_sensors 0>;
			trips {
				cpu_passive: cpu-passive {
					temperature = <70000>; /* millicelsius */
					hysteresis = <2000>; /* millicelsius */
					type = "passive";
				};

				cpu_hot: cpu-hot {
					temperature = <80000>; /* millicelsius */
					hysteresis = <2000>; /* millicelsius */
					type = "hot";
				};

				cpu_critical: cpu-critical {
					temperature = <100000>; /* millicelsius */
					hysteresis = <2000>; /* millicelsius */
					type = "critical";
				};
			};

			cpu_cooling_maps: cooling-maps {
				map0 {
					trip = <&cpu_passive>;
					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							<&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							<&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};

				map1 {
					trip = <&cpu_hot>;
					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							<&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							<&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
							<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
				};
			};
		};
	};

	onewire {
		compatible = "w1-gpio";
		gpios = <&gpio GPIOA_14 GPIO_ACTIVE_HIGH>;
		#gpio-cells = <1>;
	};
};

&efuse {
	sn: sn@32 {
		reg = <0x32 0x20>;
	};

	eth_mac: eth_mac@0 {
		reg = <0x0 0x6>;
	};

	bt_mac: bt_mac@6 {
		reg = <0x6 0x6>;
	};

	wifi_mac: wifi_mac@c {
		reg = <0xc 0x6>;
	};

	bid: bid@12 {
		reg = <0x12 0x20>;
	};
};

&ethmac {
	status = "okay";
	pinctrl-0 = <&eth_rmii_x_pins>;
	pinctrl-names = "default";
	phy-handle = <&eth_phy0>;
	phy-mode = "rmii";

	mdio {
		compatible = "snps,dwmac-mdio";
		#address-cells = <1>;
		#size-cells = <0>;

		/* ICPlus IP101A/G Ethernet PHY (vendor_id=0x0243, model_id=0x0c54) */
		eth_phy0: ethernet-phy@0 {
			/* compatible = "ethernet-phy-id0243.0c54";*/
			max-speed = <100>;
			reg = <0>;

			reset-assert-us = <10000>;
			reset-deassert-us = <10000>;
			reset-gpios = <&gpio GPIOZ_5 GPIO_ACTIVE_LOW>;
		};
	};
};

/* Internal I2C bus (on CPU module) */
&i2c1 {
	status = "okay";
	pinctrl-0 = <&i2c1_z_pins>;
	pinctrl-names = "default";

	/* RTC */
	pcf8563: pcf8563@51 {
		compatible = "nxp,pcf8563";
		reg = <0x51>;
		status = "okay";
	};
};

/* Peripheral I2C bus (on motherboard) */
&i2c_AO {
	status = "okay";
	pinctrl-0 = <&i2c_ao_sck_10_pins>, <&i2c_ao_sda_11_pins>;
	pinctrl-names = "default";
};

&pwm_ab {
	status = "okay";
	pinctrl-0 = <&pwm_a_x20_pins>;
	pinctrl-names = "default";
};

/* wifi module */
&sd_emmc_b {
	status = "okay";
	#address-cells = <1>;
	#size-cells = <0>;

	pinctrl-0 = <&sdio_pins>;
	pinctrl-1 = <&sdio_clk_gate_pins>;
	pinctrl-names = "default", "clk-gate";

	bus-width = <4>;
	cap-sd-highspeed;
	max-frequency = <50000000>;
	non-removable;
	disable-wp;

	mmc-pwrseq = <&sdio_pwrseq>;

	vmmc-supply = <&vddao_3v3>;
	vqmmc-supply = <&vddio_boot>;

	brcmf: wifi@1 {
		reg = <1>;
		compatible = "brcm,bcm4329-fmac";
	};
};

/* emmc storage */
&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;
	max-frequency = <200000000>;
	non-removable;
	disable-wp;
	mmc-ddr-1_8v;
	mmc-hs200-1_8v;

	mmc-pwrseq = <&emmc_pwrseq>;

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

/* UART Bluetooth */
&uart_B {
	status = "okay";
	pinctrl-0 = <&uart_b_z_pins>, <&uart_b_z_cts_rts_pins>;
	pinctrl-names = "default";
	uart-has-rtscts;

	bluetooth {
		compatible = "brcm,bcm43438-bt";
		shutdown-gpios = <&gpio GPIOZ_7 GPIO_ACTIVE_HIGH>;
	};
};

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

/* UART Wireless module */
&uart_AO_B {
	status = "okay";
	pinctrl-0 = <&uart_ao_b_pins>;
	pinctrl-names = "default";
};

&usb {
	status = "okay";
	phy-supply = <&usb_pwr>;
};

&spicc1 {
	status = "okay";
	pinctrl-0 = <&spi1_x_pins>, <&spi1_ss0_x_pins>;
	pinctrl-names = "default";
};

&gpio {
	gpio-line-names =
		"", "", "", "", "", // 0 - 4
		"", "", "", "", "", // 5 - 9
		"UserButton", "", "", "", "", // 10 - 14
		"", "", "", "", "", // 15 - 19
		"", "", "", "", "", // 20 - 24
		"", "LedRed", "LedGreen", "Output3", "Output2", // 25 - 29
		"Output1", "", "", "", "", // 30 - 34
		"", "ZigBeeBOOT", "", "", "", // 35 - 39
		"1Wire", "ZigBeeRESET", "", "Input4", "Input3", // 40 - 44
		"Input2", "Input1", "", "", "", // 45 - 49
		"", "", "", "", "", // 50 - 54
		"", "", "", "", "", // 55 - 59
		"", "", "", "", "", // 60 - 64
		"", "", "", "", "", // 65 - 69
		"", "", "", "", "", // 70 - 74
		"", "", "", "", "", // 75 - 79
		"", "", "", "", "", // 80 - 84
		"", ""; // 85-86
};

&cpu0 {
	#cooling-cells = <2>;
};

&cpu1 {
	#cooling-cells = <2>;
};

&cpu2 {
	#cooling-cells = <2>;
};

&cpu3 {
	#cooling-cells = <2>;
};
