162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * omap3-n950.dts - Device Tree file for Nokia N950
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Written by: Aaro Koskinen <aaro.koskinen@iki.fi>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/dts-v1/;
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "omap3-n950-n9.dtsi"
1162306a36Sopenharmony_ci#include <dt-bindings/input/input.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/ {
1462306a36Sopenharmony_ci	model = "Nokia N950";
1562306a36Sopenharmony_ci	compatible = "nokia,omap3-n950", "ti,omap3630", "ti,omap3";
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	keys {
1862306a36Sopenharmony_ci		compatible = "gpio-keys";
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci		keypad_slide {
2162306a36Sopenharmony_ci			label = "Keypad Slide";
2262306a36Sopenharmony_ci			gpios = <&gpio4 13 GPIO_ACTIVE_LOW>; /* 109 */
2362306a36Sopenharmony_ci			linux,input-type = <EV_SW>;
2462306a36Sopenharmony_ci			linux,code = <SW_KEYPAD_SLIDE>;
2562306a36Sopenharmony_ci			wakeup-source;
2662306a36Sopenharmony_ci			pinctrl-names = "default";
2762306a36Sopenharmony_ci			pinctrl-0 = <&keypad_slide_pins>;
2862306a36Sopenharmony_ci		};
2962306a36Sopenharmony_ci	};
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci&omap3_pmx_core {
3362306a36Sopenharmony_ci	keypad_slide_pins: debug-led-pins {
3462306a36Sopenharmony_ci		pinctrl-single,pins = <
3562306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x212a, PIN_INPUT | MUX_MODE4)       /* cam_d10.gpio_109 */
3662306a36Sopenharmony_ci		>;
3762306a36Sopenharmony_ci	};
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci&omap3_pmx_core {
4162306a36Sopenharmony_ci	spi4_pins: spi4-pins {
4262306a36Sopenharmony_ci		pinctrl-single,pins = <
4362306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x218c, PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_clk */
4462306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE1) /* mcspi4_simo */
4562306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_somi */
4662306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x2196, PIN_OUTPUT | MUX_MODE1) /* mcspi4_cs0 */
4762306a36Sopenharmony_ci		>;
4862306a36Sopenharmony_ci	};
4962306a36Sopenharmony_ci};
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci&omap3_pmx_core {
5262306a36Sopenharmony_ci	dsi_pins: dsi-pins {
5362306a36Sopenharmony_ci		pinctrl-single,pins = <
5462306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE1) /* dsi_dx0 - data0+ */
5562306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20de, PIN_OUTPUT | MUX_MODE1) /* dsi_dy0 - data0- */
5662306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20e0, PIN_OUTPUT | MUX_MODE1) /* dsi_dx1 - clk+   */
5762306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE1) /* dsi_dy1 - clk-   */
5862306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE1) /* dsi_dx2 - data1+ */
5962306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE1) /* dsi_dy2 - data1- */
6062306a36Sopenharmony_ci		>;
6162306a36Sopenharmony_ci	};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	display_pins: display-pins {
6462306a36Sopenharmony_ci		pinctrl-single,pins = <
6562306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20ca, PIN_INPUT | MUX_MODE4) /* gpio 62 - display te */
6662306a36Sopenharmony_ci			OMAP3_CORE1_IOPAD(0x20fe, PIN_OUTPUT | MUX_MODE4) /* gpio 87 - display reset */
6762306a36Sopenharmony_ci		>;
6862306a36Sopenharmony_ci	};
6962306a36Sopenharmony_ci};
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci&i2c2 {
7262306a36Sopenharmony_ci	smia_1: camera@10 {
7362306a36Sopenharmony_ci		compatible = "nokia,smia";
7462306a36Sopenharmony_ci		reg = <0x10>;
7562306a36Sopenharmony_ci		/* No reset gpio */
7662306a36Sopenharmony_ci		vana-supply = <&vaux3>;
7762306a36Sopenharmony_ci		clocks = <&isp 0>;
7862306a36Sopenharmony_ci		clock-frequency = <9600000>;
7962306a36Sopenharmony_ci		flash-leds = <&as3645a_flash &as3645a_indicator>;
8062306a36Sopenharmony_ci		port {
8162306a36Sopenharmony_ci			smia_1_1: endpoint {
8262306a36Sopenharmony_ci				link-frequencies = /bits/ 64 <210000000 333600000 398400000>;
8362306a36Sopenharmony_ci				clock-lanes = <0>;
8462306a36Sopenharmony_ci				data-lanes = <1 2>;
8562306a36Sopenharmony_ci				remote-endpoint = <&csi2a_ep>;
8662306a36Sopenharmony_ci			};
8762306a36Sopenharmony_ci		};
8862306a36Sopenharmony_ci	};
8962306a36Sopenharmony_ci};
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci&isp {
9262306a36Sopenharmony_ci	vdd-csiphy1-supply = <&vaux2>;
9362306a36Sopenharmony_ci	vdd-csiphy2-supply = <&vaux2>;
9462306a36Sopenharmony_ci	ports {
9562306a36Sopenharmony_ci		port@2 {
9662306a36Sopenharmony_ci			reg = <2>;
9762306a36Sopenharmony_ci			csi2a_ep: endpoint {
9862306a36Sopenharmony_ci				remote-endpoint = <&smia_1_1>;
9962306a36Sopenharmony_ci				clock-lanes = <2>;
10062306a36Sopenharmony_ci				data-lanes = <3 1>;
10162306a36Sopenharmony_ci				crc = <1>;
10262306a36Sopenharmony_ci				lane-polarities = <1 1 1>;
10362306a36Sopenharmony_ci			};
10462306a36Sopenharmony_ci		};
10562306a36Sopenharmony_ci	};
10662306a36Sopenharmony_ci};
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci&mcspi4 {
10962306a36Sopenharmony_ci	status = "okay";
11062306a36Sopenharmony_ci	pinctrl-names = "default";
11162306a36Sopenharmony_ci	pinctrl-0 = <&spi4_pins>;
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci	wlcore: wlcore@0 {
11462306a36Sopenharmony_ci		compatible = "ti,wl1271";
11562306a36Sopenharmony_ci		pinctrl-names = "default";
11662306a36Sopenharmony_ci		pinctrl-0 = <&wlan_pins>;
11762306a36Sopenharmony_ci		reg = <0>;
11862306a36Sopenharmony_ci		spi-max-frequency = <48000000>;
11962306a36Sopenharmony_ci		clock-xtal;
12062306a36Sopenharmony_ci		ref-clock-frequency = <38400000>;
12162306a36Sopenharmony_ci		interrupts-extended = <&gpio2 10 IRQ_TYPE_LEVEL_HIGH>; /* gpio 42 */
12262306a36Sopenharmony_ci		vwlan-supply = <&vwlan_fixed>;
12362306a36Sopenharmony_ci	};
12462306a36Sopenharmony_ci};
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci&modem {
12762306a36Sopenharmony_ci	compatible = "nokia,n950-modem";
12862306a36Sopenharmony_ci};
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci&twl {
13162306a36Sopenharmony_ci	twl_audio: audio {
13262306a36Sopenharmony_ci		compatible = "ti,twl4030-audio";
13362306a36Sopenharmony_ci		ti,enable-vibra = <1>;
13462306a36Sopenharmony_ci	};
13562306a36Sopenharmony_ci};
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci&twl_keypad {
13862306a36Sopenharmony_ci	linux,keymap = < MATRIX_KEY(0x00, 0x00, KEY_BACKSLASH)
13962306a36Sopenharmony_ci			 MATRIX_KEY(0x01, 0x00, KEY_LEFTSHIFT)
14062306a36Sopenharmony_ci			 MATRIX_KEY(0x02, 0x00, KEY_COMPOSE)
14162306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x00, KEY_LEFTMETA)
14262306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x00, KEY_RIGHTCTRL)
14362306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x00, KEY_BACKSPACE)
14462306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x00, KEY_VOLUMEDOWN)
14562306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x00, KEY_VOLUMEUP)
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x01, KEY_Z)
14862306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x01, KEY_A)
14962306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x01, KEY_Q)
15062306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x01, KEY_W)
15162306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x01, KEY_E)
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x02, KEY_X)
15462306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x02, KEY_S)
15562306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x02, KEY_D)
15662306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x02, KEY_C)
15762306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x02, KEY_V)
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x03, KEY_O)
16062306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x03, KEY_I)
16162306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x03, KEY_U)
16262306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x03, KEY_L)
16362306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x03, KEY_APOSTROPHE)
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x04, KEY_Y)
16662306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x04, KEY_K)
16762306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x04, KEY_J)
16862306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x04, KEY_H)
16962306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x04, KEY_G)
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x05, KEY_B)
17262306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x05, KEY_COMMA)
17362306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x05, KEY_M)
17462306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x05, KEY_N)
17562306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x05, KEY_DOT)
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci			 MATRIX_KEY(0x00, 0x06, KEY_SPACE)
17862306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x06, KEY_T)
17962306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x06, KEY_UP)
18062306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x06, KEY_LEFT)
18162306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x06, KEY_RIGHT)
18262306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x06, KEY_DOWN)
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci			 MATRIX_KEY(0x03, 0x07, KEY_P)
18562306a36Sopenharmony_ci			 MATRIX_KEY(0x04, 0x07, KEY_ENTER)
18662306a36Sopenharmony_ci			 MATRIX_KEY(0x05, 0x07, KEY_SLASH)
18762306a36Sopenharmony_ci			 MATRIX_KEY(0x06, 0x07, KEY_F)
18862306a36Sopenharmony_ci			 MATRIX_KEY(0x07, 0x07, KEY_R)
18962306a36Sopenharmony_ci			 >;
19062306a36Sopenharmony_ci};
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci&lis302 {
19362306a36Sopenharmony_ci	st,axis-x = <(-2)>; /* LIS3_INV_DEV_Y */
19462306a36Sopenharmony_ci	st,axis-y = <(-1)>; /* LIS3_INV_DEV_X */
19562306a36Sopenharmony_ci	st,axis-z = <(-3)>; /* LIS3_INV_DEV_Z */
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci	st,min-limit-x = <(-32)>;
19862306a36Sopenharmony_ci	st,min-limit-y = <3>;
19962306a36Sopenharmony_ci	st,min-limit-z = <3>;
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci	st,max-limit-x = <(-3)>;
20262306a36Sopenharmony_ci	st,max-limit-y = <32>;
20362306a36Sopenharmony_ci	st,max-limit-z = <32>;
20462306a36Sopenharmony_ci};
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci&dss {
20762306a36Sopenharmony_ci	status = "okay";
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci	vdda_video-supply = <&vdac>;
21062306a36Sopenharmony_ci};
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci&dsi {
21362306a36Sopenharmony_ci	status = "okay";
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci	pinctrl-names = "default";
21662306a36Sopenharmony_ci	pinctrl-0 = <&dsi_pins>;
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci	vdd-supply = <&vpll2>;
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci	port {
22162306a36Sopenharmony_ci		dsi_out_ep: endpoint {
22262306a36Sopenharmony_ci			remote-endpoint = <&lcd0_in>;
22362306a36Sopenharmony_ci			lanes = <2 3 0 1 4 5>;
22462306a36Sopenharmony_ci		};
22562306a36Sopenharmony_ci	};
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci	lcd0: panel@0 {
22862306a36Sopenharmony_ci		compatible = "nokia,himalaya", "panel-dsi-cm";
22962306a36Sopenharmony_ci		reg = <0>;
23062306a36Sopenharmony_ci		label = "lcd0";
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci		pinctrl-names = "default";
23362306a36Sopenharmony_ci		pinctrl-0 = <&display_pins>;
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci		vpnl-supply = <&vmmc2>;
23662306a36Sopenharmony_ci		vddi-supply = <&vio>;
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ci		reset-gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;	/* 87 */
23962306a36Sopenharmony_ci		te-gpios = <&gpio2 30 GPIO_ACTIVE_HIGH>;	/* 62 */
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci		width-mm = <49>; /* 48.960 mm */
24262306a36Sopenharmony_ci		height-mm = <88>; /* 88.128 mm */
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci		/* TODO:
24562306a36Sopenharmony_ci		 * - panel is upside-down
24662306a36Sopenharmony_ci		 * - top + bottom 5px are not visible
24762306a36Sopenharmony_ci		 */
24862306a36Sopenharmony_ci		panel-timing {
24962306a36Sopenharmony_ci			clock-frequency = <0>;          /* Calculated by dsi */
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci			hback-porch = <2>;
25262306a36Sopenharmony_ci			hactive = <480>;
25362306a36Sopenharmony_ci			hfront-porch = <0>;
25462306a36Sopenharmony_ci			hsync-len = <2>;
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci			vback-porch = <1>;
25762306a36Sopenharmony_ci			vactive = <864>;
25862306a36Sopenharmony_ci			vfront-porch = <0>;
25962306a36Sopenharmony_ci			vsync-len = <1>;
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci			hsync-active = <0>;
26262306a36Sopenharmony_ci			vsync-active = <0>;
26362306a36Sopenharmony_ci			de-active = <1>;
26462306a36Sopenharmony_ci			pixelclk-active = <1>;
26562306a36Sopenharmony_ci		};
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci		port {
26862306a36Sopenharmony_ci			lcd0_in: endpoint {
26962306a36Sopenharmony_ci				remote-endpoint = <&dsi_out_ep>;
27062306a36Sopenharmony_ci			};
27162306a36Sopenharmony_ci		};
27262306a36Sopenharmony_ci	};
27362306a36Sopenharmony_ci};
274