// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Device Tree for the TVK1281618 R3 user interface board (UIB)
 * also known as the "CYTTSP board"
 */

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/input/input.h>

/ {
	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		vdd-supply = <&ab8500_ldo_aux1_reg>;
		pinctrl-names = "default";
		pinctrl-0 = <&hall_tvk_mode>;

		button@145 {
			/* Hall sensor */
			gpios = <&gpio4 17 GPIO_ACTIVE_HIGH>;
			linux,code = <0>; /* SW_LID */
			label = "HED54XXU11 Hall Effect Sensor";
		};
	};

	soc {
		i2c@80004000 {
			tc35893@44 {
				compatible = "toshiba,tc35893";
				reg = <0x44>;
				interrupt-parent = <&gpio2>;
				interrupts = <0 IRQ_TYPE_EDGE_RISING>;
				pinctrl-names = "default";
				pinctrl-0 = <&tc35893_tvk_mode>;

				interrupt-controller;
				#interrupt-cells = <1>;
				status = "disabled";

				tc3589x_gpio {
					compatible = "toshiba,tc3589x-gpio";
					interrupts = <0>;

					interrupt-controller;
					#interrupt-cells = <2>;
					gpio-controller;
					#gpio-cells = <2>;
				};
				tc3589x_keypad {
					compatible = "toshiba,tc3589x-keypad";
					interrupts = <6>;
					debounce-delay-ms = <4>;
					keypad,num-columns = <8>;
					keypad,num-rows = <8>;
					linux,no-autorepeat;
					wakeup-source;
					linux,keymap = <MATRIX_KEY(3, 1, KEY_END)>,
						       <MATRIX_KEY(4, 1, KEY_HOME)>,
						       <MATRIX_KEY(6, 4, KEY_VOLUMEDOWN)>,
						       <MATRIX_KEY(4, 2, KEY_EMAIL)>,
						       <MATRIX_KEY(3, 3, KEY_RIGHT)>,
						       <MATRIX_KEY(2, 5, KEY_BACKSPACE)>,
						       <MATRIX_KEY(6, 7, KEY_MENU)>,
						       <MATRIX_KEY(5, 0, KEY_ENTER)>,
						       <MATRIX_KEY(4, 3, KEY_0)>,
						       <MATRIX_KEY(3, 4, KEY_DOT)>,
						       <MATRIX_KEY(5, 2, KEY_UP)>,
						       <MATRIX_KEY(3, 5, KEY_DOWN)>,
						       <MATRIX_KEY(4, 5, KEY_SEND)>,
						       <MATRIX_KEY(0, 5, KEY_BACK)>,
						       <MATRIX_KEY(6, 2, KEY_VOLUMEUP)>,
						       <MATRIX_KEY(1, 3, KEY_SPACE)>,
						       <MATRIX_KEY(7, 6, KEY_LEFT)>,
						       <MATRIX_KEY(5, 5, KEY_SEARCH)>;
				};
			};
		};

		i2c@80128000 {
			accelerometer@19 {
				compatible = "st,lsm303dlhc-accel";
				st,drdy-int-pin = <1>;
				reg = <0x19>;
				vdd-supply = <&ab8500_ldo_aux1_reg>;
				vddio-supply = <&db8500_vsmps2_reg>;
				interrupt-parent = <&gpio2>;
				interrupts = <18 IRQ_TYPE_EDGE_RISING>,
					     <19 IRQ_TYPE_EDGE_RISING>;
				pinctrl-names = "default";
				pinctrl-0 = <&accel_tvk_mode>;
				mount-matrix = "0", "-1", "0",
					       "-1", "0", "0",
					       "0", "0", "-1";
			};
			magnetometer@1e {
				compatible = "st,lsm303dlm-magn";
				reg = <0x1e>;
				vdd-supply = <&ab8500_ldo_aux1_reg>;
				vddio-supply = <&db8500_vsmps2_reg>;
				// This interrupt is not properly working with the driver
				// interrupt-parent = <&gpio1>;
				// interrupts = <0 IRQ_TYPE_EDGE_RISING>;
				pinctrl-names = "default";
				pinctrl-0 = <&magn_tvk_mode>;
			};
			gyroscope@68 {
				/* Gyroscope */
				compatible = "st,l3g4200d-gyro";
				reg = <0x68>;
				vdd-supply = <&ab8500_ldo_aux1_reg>;
				vddio-supply = <&db8500_vsmps2_reg>;
			};
			pressure@5c {
				/* Barometer/pressure sensor */
				compatible = "st,lps001wp-press";
				reg = <0x5c>;
				vdd-supply = <&ab8500_ldo_aux1_reg>;
				vddio-supply = <&db8500_vsmps2_reg>;
			};
		};

		spi@80111000 {
			num-cs = <1>;
			cs-gpios = <&gpio6 24 GPIO_ACTIVE_LOW>;
			pinctrl-names = "default";
			pinctrl-0 = <&spi2_default_mode>;
			status = "okay";

			touchscreen@0 {
				compatible = "cypress,cy8ctma340";
				/*
				 * Actually the max frequency is 6 MHz, but over 2 MHz the
				 * data rate needs to be restricted to max 2Mbps which the
				 * SPI framework cannot handle.
				 */
				spi-max-frequency = <2000000>;
				reg = <0>;
				interrupt-parent = <&gpio2>;
				interrupts = <20 IRQ_TYPE_EDGE_FALLING>;
				vcpin-supply = <&ab8500_ldo_aux1_reg>;
				vdd-supply = <&db8500_vsmps2_reg>;
				reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
				touchscreen-size-x = <480>;
				touchscreen-size-y = <854>;
				active-interval-ms = <0>;
				touch-timeout-ms = <255>;
				lowpower-interval-ms = <10>;
				bootloader-key = /bits/ 8 <0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07>;
				pinctrl-names = "default";
				pinctrl-0 = <&cyttsp_tvk_mode>;
			};
		};

		mcde@a0350000 {
			status = "okay";

			dsi@a0351000 {
				panel {
					compatible = "sony,acx424akp";
					reg = <0>;
					vddi-supply = <&ab8500_ldo_aux1_reg>;
					reset-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
				};
			};
		};

		pinctrl {
			hall {
				hall_tvk_mode: hall_tvk {
					tvk_cfg {
						pins = "GPIO145_C13";
						ste,config = <&gpio_in_pu>;
					};
				};
			};
			tc35893 {
				/* IRQ from the TC35893 */
				tc35893_tvk_mode: tc35893_tvk {
					tvk_cfg {
						pins = "GPIO64_F3";
						ste,config = <&gpio_in_pu>;
					};
				};
			};
			accelerometer {
				accel_tvk_mode: accel_tvk {
					/* Accelerometer interrupt lines 1 & 2 */
					tvk_cfg {
						pins = "GPIO82_C1", "GPIO83_D3";
						ste,config = <&gpio_in_pd>;
					};
				};
			};
			magnetometer {
				magn_tvk_mode: magn_tvk {
					/* GPIO 32 used for DRDY, pull this down */
					tvk_cfg {
						pins = "GPIO32_V2";
						ste,config = <&gpio_in_pd>;
					};
				};
			};
			cyttsp {
				cyttsp_tvk_mode: cyttsp_tvk {
					/* Touchscreen uses GPIO84 for IRQ */
					tvk_cfg1 {
						pins = "GPIO84_C2";
						ste,config = <&gpio_in_pu>;
					};
					/* GPIO143 is reset */
					tvk_cfg2 {
						pins = "GPIO143_D12";
						ste,config = <&gpio_out_hi>;
					};
				};
			};
		};
	};
};