// 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 */
		serial1 = &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 = <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;
	sd-uhs-sdr104;
	max-frequency = <200000000>;
	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 = <&vddio_boot>;
};

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