/*
 * omap3-n950.dts - Device Tree file for Nokia N950
 *
 * Written by: Aaro Koskinen <aaro.koskinen@iki.fi>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

/dts-v1/;

#include "omap3-n950-n9.dtsi"
#include <dt-bindings/input/input.h>

/ {
	model = "Nokia N950";
	compatible = "nokia,omap3-n950", "ti,omap36xx", "ti,omap3";

	keys {
		compatible = "gpio-keys";

		keypad_slide {
			label = "Keypad Slide";
			gpios = <&gpio4 13 GPIO_ACTIVE_LOW>; /* 109 */
			linux,input-type = <EV_SW>;
			linux,code = <SW_KEYPAD_SLIDE>;
			wakeup-source;
			pinctrl-names = "default";
			pinctrl-0 = <&keypad_slide_pins>;
		};
	};
};

&omap3_pmx_core {
	keypad_slide_pins: pinmux_debug_led_pins {
		pinctrl-single,pins = <
			OMAP3_CORE1_IOPAD(0x212a, PIN_INPUT | MUX_MODE4)       /* cam_d10.gpio_109 */
		>;
	};
};

&omap3_pmx_core {
	spi4_pins: pinmux_spi4_pins {
		pinctrl-single,pins = <
			OMAP3_CORE1_IOPAD(0x218c, PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_clk */
			OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE1) /* mcspi4_simo */
			OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_somi */
			OMAP3_CORE1_IOPAD(0x2196, PIN_OUTPUT | MUX_MODE1) /* mcspi4_cs0 */
		>;
	};
};

&i2c2 {
	smia_1: camera@10 {
		compatible = "nokia,smia";
		reg = <0x10>;
		/* No reset gpio */
		vana-supply = <&vaux3>;
		clocks = <&isp 0>;
		clock-frequency = <9600000>;
		nokia,nvm-size = <(16 * 64)>;
		port {
			smia_1_1: endpoint {
				link-frequencies = /bits/ 64 <210000000 333600000 398400000>;
				clock-lanes = <0>;
				data-lanes = <1 2>;
				remote-endpoint = <&csi2a_ep>;
			};
		};
	};
};

&isp {
	vdd-csiphy1-supply = <&vaux2>;
	vdd-csiphy2-supply = <&vaux2>;
	ports {
		port@2 {
			reg = <2>;
			csi2a_ep: endpoint {
				remote-endpoint = <&smia_1_1>;
				clock-lanes = <2>;
				data-lanes = <3 1>;
				crc = <1>;
				lane-polarities = <1 1 1>;
			};
		};
	};
};

&mcspi4 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&spi4_pins>;

	wlcore: wlcore@0 {
		compatible = "ti,wl1271";
		pinctrl-names = "default";
		pinctrl-0 = <&wlan_pins>;
		reg = <0>;
		spi-max-frequency = <48000000>;
		clock-xtal;
		ref-clock-frequency = <38400000>;
		interrupts-extended = <&gpio2 10 IRQ_TYPE_LEVEL_HIGH>; /* gpio 42 */
		vwlan-supply = <&vwlan_fixed>;
	};
};

&modem {
	compatible = "nokia,n950-modem";
};

&twl {
	twl_audio: audio {
		compatible = "ti,twl4030-audio";
		ti,enable-vibra = <1>;
	};
};

&twl_keypad {
	linux,keymap = < MATRIX_KEY(0x00, 0x00, KEY_BACKSLASH)
			 MATRIX_KEY(0x01, 0x00, KEY_LEFTSHIFT)
			 MATRIX_KEY(0x02, 0x00, KEY_COMPOSE)
			 MATRIX_KEY(0x03, 0x00, KEY_LEFTMETA)
			 MATRIX_KEY(0x04, 0x00, KEY_RIGHTCTRL)
			 MATRIX_KEY(0x05, 0x00, KEY_BACKSPACE)
			 MATRIX_KEY(0x06, 0x00, KEY_VOLUMEDOWN)
			 MATRIX_KEY(0x07, 0x00, KEY_VOLUMEUP)

			 MATRIX_KEY(0x03, 0x01, KEY_Z)
			 MATRIX_KEY(0x04, 0x01, KEY_A)
			 MATRIX_KEY(0x05, 0x01, KEY_Q)
			 MATRIX_KEY(0x06, 0x01, KEY_W)
			 MATRIX_KEY(0x07, 0x01, KEY_E)

			 MATRIX_KEY(0x03, 0x02, KEY_X)
			 MATRIX_KEY(0x04, 0x02, KEY_S)
			 MATRIX_KEY(0x05, 0x02, KEY_D)
			 MATRIX_KEY(0x06, 0x02, KEY_C)
			 MATRIX_KEY(0x07, 0x02, KEY_V)

			 MATRIX_KEY(0x03, 0x03, KEY_O)
			 MATRIX_KEY(0x04, 0x03, KEY_I)
			 MATRIX_KEY(0x05, 0x03, KEY_U)
			 MATRIX_KEY(0x06, 0x03, KEY_L)
			 MATRIX_KEY(0x07, 0x03, KEY_APOSTROPHE)

			 MATRIX_KEY(0x03, 0x04, KEY_Y)
			 MATRIX_KEY(0x04, 0x04, KEY_K)
			 MATRIX_KEY(0x05, 0x04, KEY_J)
			 MATRIX_KEY(0x06, 0x04, KEY_H)
			 MATRIX_KEY(0x07, 0x04, KEY_G)

			 MATRIX_KEY(0x03, 0x05, KEY_B)
			 MATRIX_KEY(0x04, 0x05, KEY_COMMA)
			 MATRIX_KEY(0x05, 0x05, KEY_M)
			 MATRIX_KEY(0x06, 0x05, KEY_N)
			 MATRIX_KEY(0x07, 0x05, KEY_DOT)

			 MATRIX_KEY(0x00, 0x06, KEY_SPACE)
			 MATRIX_KEY(0x03, 0x06, KEY_T)
			 MATRIX_KEY(0x04, 0x06, KEY_UP)
			 MATRIX_KEY(0x05, 0x06, KEY_LEFT)
			 MATRIX_KEY(0x06, 0x06, KEY_RIGHT)
			 MATRIX_KEY(0x07, 0x06, KEY_DOWN)

			 MATRIX_KEY(0x03, 0x07, KEY_P)
			 MATRIX_KEY(0x04, 0x07, KEY_ENTER)
			 MATRIX_KEY(0x05, 0x07, KEY_SLASH)
			 MATRIX_KEY(0x06, 0x07, KEY_F)
			 MATRIX_KEY(0x07, 0x07, KEY_R)
			 >;
};

&lis302 {
	st,axis-x = <(-2)>; /* LIS3_INV_DEV_Y */
	st,axis-y = <(-1)>; /* LIS3_INV_DEV_X */
	st,axis-z = <(-3)>; /* LIS3_INV_DEV_Z */

	st,min-limit-x = <(-32)>;
	st,min-limit-y = <3>;
	st,min-limit-z = <3>;

	st,max-limit-x = <(-3)>;
	st,max-limit-y = <32>;
	st,max-limit-z = <32>;
};
