// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree for the ST Microelectronics Nomadik NHK8815 board
 */

/dts-v1/;
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>
#include "ste-nomadik-stn8815.dtsi"

/ {
	model = "Nomadik STN8815NHK";
	compatible = "st,nomadik-nhk-15";

	chosen {
		bootargs = "root=/dev/ram0 console=ttyAMA1,115200n8 earlyprintk";
	};

	aliases {
		serial0 = &uart0;
		serial1 = &uart1;
		stmpe-i2c0 = &stmpe0;
		stmpe-i2c1 = &stmpe1;
	};

	pinctrl {
		uart0 {
			uart0_nhk_mode: uart0_mux {
				u0_default_mux {
					function = "u0";
					groups = "u0txrx_a_1", "u0ctsrts_a_1";
				};
			};
		};

		stmpe2401_1 {
			stmpe2401_1_nhk_mode: stmpe2401_1_nhk {
				nhk_cfg1 {
					pins = "GPIO76_B20"; // IRQ line
					ste,input = <0>;
				};
				nhk_cfg2 {
					pins = "GPIO77_B8"; // reset line
					ste,output = <1>;
				};
			};
		};
		stmpe2401_2 {
			stmpe2401_2_nhk_mode: stmpe2401_2_nhk {
				nhk_cfg1 {
					pins = "GPIO78_A8"; // IRQ line
					ste,input = <0>;
				};
				nhk_cfg2 {
					pins = "GPIO79_C9"; // reset line
					ste,output = <1>;
				};
			};
		};
		lis3lv02dl {
			lis3lv02dl_nhk_mode: lis3lv02dl_nhk {
				nhk_cfg1 {
					pins = "GPIO82_C10"; // IRQ line
					ste,input = <0>;
				};
			};
		};
	};
	src@101e0000 {
		/* These chrystal outputs are not used on this board */
		disable-sxtalo;
		disable-mxtalo;
	};

	/* This is where the interrupt is routed on the NHK-15 debug board */
	external-bus@34000000 {
		compatible = "simple-bus";
		reg = <0x34000000 0x1000000>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0 0x34000000 0x1000000>;
		ethernet@300 {
			compatible = "smsc,lan91c111";
			reg = <0x300 0x0fd00>;
			reg-io-width = <2>;
			reset-gpios = <&stmpe_gpio44 10 GPIO_ACTIVE_HIGH>;
			interrupt-parent = <&stmpe_gpio44>;
			interrupts = <11 IRQ_TYPE_EDGE_RISING>;
		};
	};

	i2c0 {
		lis3lv02dl@1d {
			/* Accelerometer */
			compatible = "st,lis3lv02dl-accel";
			interrupt-parent = <&gpio2>;
			interrupts = <18 IRQ_TYPE_EDGE_RISING>; // GPIO 82
			pinctrl-0 = <&lis3lv02dl_nhk_mode>;
			pinctrl-names = "default";
			reg = <0x1d>;
		};
		stmpe0: stmpe2401@43 {
			compatible = "st,stmpe2401";
			reg = <0x43>;
			reset-gpios = <&gpio2 13 GPIO_ACTIVE_LOW>; // GPIO77
			interrupts = <12 IRQ_TYPE_EDGE_FALLING>; // GPIO76
			interrupt-parent = <&gpio2>;
			interrupt-controller;
			wakeup-source;
			pinctrl-names = "default";
			pinctrl-0 = <&stmpe2401_1_nhk_mode>;
			stmpe_gpio43: stmpe_gpio {
				compatible = "st,stmpe-gpio";
				gpio-controller;
				#gpio-cells = <2>;
				interrupt-controller;
				#interrupt-cells = <2>;
				/* Some pins in alternate functions */
				st,norequest-mask = <0xf0f002>;
			};
			stmpe_keypad {
				compatible = "st,stmpe-keypad";
				debounce-interval = <64>;
				st,scan-count = <8>;
				st,no-autorepeat;
				keypad,num-rows = <8>;
				keypad,num-columns = <8>;
				linux,keymap = <0x00020072 // Vol down
						0x00030073 // Vol up
						0x0100009e // Back
						0x010100e3 // TV out
						0x01020098 // Lock
						0x0103013b // Start
						0x020000a3 // Next
						0x020100a4 // Play
						0x020200a5 // Prev
						0x02030160 // OK
						0x03000069 // Left
						0x0301006a // Right
						0x03020067 // Up
						0x0303006c>; // Down
			};
			stmpe0_pwm: stmpe_pwm {
				compatible = "st,stmpe-pwm";
				#pwm-cells = <2>;
			};
		};
		stmpe1: stmpe2401@44 {
			compatible = "st,stmpe2401";
			reg = <0x44>;
			reset-gpios = <&gpio2 15 GPIO_ACTIVE_LOW>; // GPIO79
			interrupts = <14 IRQ_TYPE_EDGE_FALLING>; // GPIO78
			interrupt-parent = <&gpio2>;
			interrupt-controller;
			wakeup-source;
			pinctrl-names = "default";
			pinctrl-0 = <&stmpe2401_2_nhk_mode>;
			stmpe_gpio44: stmpe_gpio {
				compatible = "st,stmpe-gpio";
				gpio-controller;
				#gpio-cells = <2>;
				interrupt-controller;
				#interrupt-cells = <2>;
				/*
				 * This will turn off SATA so that MMC/SD
				 * can thrive
				 */
				mmcsd-gpio {
					gpio-hog;
					gpios = <2 0x0>;
					output-low;
					line-name = "SATA EN";
				};
			};
		};
	};

	amba {
		clcd@10120000 {
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&clcd_24bit_mux>;
			port {
				nomadik_clcd: endpoint {
					remote-endpoint = <&nomadik_clcd_panel>;
					arm,pl11x,tft-r0g0b0-pads = <16 8 0>;
				};
			};

		};

		/* Activate RX/TX and CTS/RTS on UART 0 */
		uart0: uart@101fd000 {
			pinctrl-names = "default";
			pinctrl-0 = <&uart0_nhk_mode>;
			status = "okay";
		};
		mmcsd: sdi@101f6000 {
			cd-gpios = <&stmpe_gpio44 7 GPIO_ACTIVE_LOW>;
			wp-gpios = <&stmpe_gpio44 18 GPIO_ACTIVE_HIGH>;
		};
	};

	spi {
		compatible = "spi-gpio";
		#address-cells = <1>;
		#size-cells = <0>;

		/*
		 * As we're dealing with 3wire SPI, we only define SCK
		 * and MOSI (in the spec MOSI is called "SDA").
		 */
		gpio-sck = <&gpio0 5 GPIO_ACTIVE_HIGH>;
		gpio-mosi = <&gpio0 4 GPIO_ACTIVE_HIGH>;
		/*
		 * This chipselect is active high. Just setting the flags
		 * to GPIO_ACTIVE_HIGH is not enough for the SPI DT bindings,
		 * it will be ignored, only the special "spi-cs-high" flag
		 * really counts.
		 */
		cs-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
		spi-cs-high;
		num-chipselects = <1>;

		/*
		 * WVGA connector 21
		 * WVGA (800x480): 4.3" TPG110 TDO43MTEA2 24-bit RGB
		 * with TPO touch screen.
		  */
		panel: display@0 {
			/*
			 * The TPO display driver is connected to a
			 * 5.7" OSD OSD057VA01CT TFT display.
			 */
			compatible = "tpo,tpg110";
			reg = <0>;
			spi-3wire;
			/* 320 ns min period ~= 3 MHz */
			spi-max-frequency = <3000000>;
			/* Width and height from the OSD data sheet */
			width-mm = <116>;
			height-mm = <87>;
			grestb-gpios = <&stmpe_gpio44 5 GPIO_ACTIVE_LOW>;
			backlight = <&bl>;

			port {
				nomadik_clcd_panel: endpoint {
					remote-endpoint = <&nomadik_clcd>;
				};
			};
		};
	};

	bl: backlight {
		compatible = "pwm-backlight";
		pwms = <&stmpe0_pwm 0 500000>;
		pwm-names = "backlight";
		brightness-levels = <
			0  1  2  3  4  5  6  7  8  9
			10 11 12 13 14 15 16 17 18 19
			20 21 22 23 24 25 26 27 28 29
			30 31 32 33 34 35 36 37 38 39
			40 41 42 43 44 45 46 47 48 49
			50 51 52 53 54 55 56 57 58 59
			60 61 62 63 64 65 66 67 68 69
			70 71 72 73 74 75 76 77 78 79
			80 81 82 83 84 85 86 87 88 89
			90 91 92 93 94 95 96 97 98 99
			100
		>;
		default-brightness-level = <100>;
	};
};
