/dts-v1/;

#include <tactility/bindings/root.h>
#include <tactility/bindings/esp32_ble.h>
#include <tactility/bindings/esp32_gpio.h>
#include <tactility/bindings/esp32_grove.h>
#include <tactility/bindings/esp32_i2c_master.h>
#include <tactility/bindings/esp32_i2s.h>
#include <tactility/bindings/esp32_sdmmc.h>
#include <tactility/bindings/esp32_uart.h>
#include <tactility/bindings/esp32_usbhost.h>
#include <tactility/bindings/esp32_wifi.h>
#include <bindings/bmi270.h>
#include <bindings/es7210.h>
#include <bindings/es8388.h>
#include <bindings/ina226.h>
#include <bindings/pi4ioe5v6408.h>
#include <bindings/rx8130ce.h>
#include <bindings/sc2356.h>

/ {
	compatible = "root";
	model = "Tab5";

	wifi0 {
		compatible = "espressif,esp32-wifi";
		status = "disabled";
	};

	ble0 {
		compatible = "espressif,esp32-ble";
		status = "disabled";
	};

	gpio0 {
		compatible = "espressif,esp32-gpio";
		gpio-count = <57>;
	};

	// Declared before i2c0 so it starts before the es8388/es7210 codecs that reference it
	i2s0 {
		compatible = "espressif,esp32-i2s";
		port = <I2S_NUM_0>;
		pin-bclk = <&gpio0 27 GPIO_FLAG_NONE>;
		pin-ws = <&gpio0 29 GPIO_FLAG_NONE>;
		pin-data-out = <&gpio0 26 GPIO_FLAG_NONE>;
		pin-data-in = <&gpio0 28 GPIO_FLAG_NONE>;
		pin-mclk = <&gpio0 30 GPIO_FLAG_NONE>;
	};

	i2c_internal: i2c0 {
		compatible = "espressif,esp32-i2c-master";
		port = <I2C_NUM_0>;
		clock-frequency = <100000>;
		pin-sda = <&gpio0 31 GPIO_FLAG_PULL_UP>;
		pin-scl = <&gpio0 32 GPIO_FLAG_PULL_UP>;

		io_expander0 {
			compatible = "diodes,pi4ioe5v6408";
			reg = <0x43>;
		};

		io_expander1 {
			compatible = "diodes,pi4ioe5v6408";
			reg = <0x44>;
		};

		bmi270 {
			compatible = "bosch,bmi270";
			reg = <0x68>;
		};

		es8388 {
			compatible = "everest,es8388";
			reg = <0x10>;
			i2s = <&i2s0>;
		};

		es7210 {
			compatible = "everest,es7210";
			reg = <0x40>;
			i2s = <&i2s0>;
			// Per schematic: MIC1/MIC2 are the two onboard capsules (U17/U16).
			// MIC3 is not a microphone -- MIC3P is tapped from HPOUT_L (AEC_P) as an
			// acoustic-echo-cancellation reference, MIC3N goes to AGND. MIC4 is the
			// external headset-mic jack input (HPMIC), also not onboard. Select only
			// the two real capsules; MIC3/MIC4 would otherwise show up as silent (or
			// speaker-echoing) extra channels.
			mic-mask = <3>;
		};

		rx8130ce {
			compatible = "epson,rx8130ce";
			reg = <0x32>;
		};

		ina226 {
			compatible = "ti,ina226";
			reg = <0x41>;
			shunt-milliohms = <5>;
		};

		sc2356 {
			compatible = "smartsens,sc2356";
			reg = <0x36>;
		};
	};

	port_a: grove0 {
		compatible = "espressif,esp32-grove";
		defaultMode = <GROVE_MODE_I2C>;
		pinSdaTx = <&gpio0 53 GPIO_FLAG_NONE>;
		pinSclRx = <&gpio0 54 GPIO_FLAG_NONE>;
		uartPort = <UART_NUM_1>;
		i2cPort = <I2C_NUM_1>;
		i2cClockFrequency = <100000>;
	};

	i2c_keyboard: i2c2 {
		compatible = "espressif,esp32-i2c-master";
		port = <LP_I2C_NUM_0>;
		clock-frequency = <100000>;
		clock-source = <LP_I2C_SCLK_DEFAULT>;
		pin-sda = <&gpio0 0 GPIO_FLAG_PULL_UP>;
		pin-scl = <&gpio0 1 GPIO_FLAG_PULL_UP>;
	};

	sdmmc0 {
		compatible = "espressif,esp32-sdmmc";
		pin-clk = <&gpio0 43 GPIO_FLAG_NONE>;
		pin-cmd = <&gpio0 44 GPIO_FLAG_NONE>;
		pin-d0 = <&gpio0 39 GPIO_FLAG_NONE>;
		pin-d1 = <&gpio0 40 GPIO_FLAG_NONE>;
		pin-d2 = <&gpio0 41 GPIO_FLAG_NONE>;
		pin-d3 = <&gpio0 42 GPIO_FLAG_NONE>;
		bus-width = <4>;
		slot = <SDMMC_HOST_SLOT_0>;
		max-freq-khz = <SDMMC_FREQ_HIGHSPEED>;
		on-chip-ldo-chan = <4>;
	};

	usbhost0 {
		compatible = "espressif,esp32-usbhost";
		peripheral-map = <0>;

		usbhosthid0 {
			compatible = "espressif,esp32-usbhost-hid";
			//status = "disabled";
		};

		usbhostmidi0 {
			compatible = "espressif,esp32-usbhost-midi";
			//status = "disabled";
		};

		usbhostmsc0 {
			compatible = "espressif,esp32-usbhost-msc";
			//status = "disabled";
		};
	};
};
