// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree for the ST-Ericsson Nomadik S8815 board
 * Produced by Calao Systems
 */

/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_pads: endpoint {
					remote-endpoint = <&nomadik_clcd_panel>;
					arm,pl11x,tft-r0g0b0-pads = <16 8 0>;
				};
			};

			/*
			 * WVGA connector 21
			 * WVGA (800x480): 4.3" TPG110 TDO43MTEA2 24-bit RGB
			 * with TPO touch screen.
			 */
			panel {
				compatible = "tpo,tpg110", "panel-dpi";
				grestb-gpios = <&stmpe_gpio44 5 GPIO_ACTIVE_LOW>;
				scen-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
				scl-gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
				sda-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
				backlight = <&bl>;

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

				panel-timing {
					clock-frequency = <33200000>;
					hactive = <800>;
					hback-porch = <216>;
					hfront-porch = <40>;
					hsync-len = <1>;
					vactive = <480>;
					vback-porch = <35>;
					vfront-porch = <10>;
					vsync-len = <1>;
				};
			};
		};

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

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