/*
 * omap3-n9.dts - Device Tree file for Nokia N9
 *
 * 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 N9";
	compatible = "nokia,omap3-n9", "ti,omap36xx", "ti,omap3";
};

&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)>;
		flash-leds = <&as3645a_flash &as3645a_indicator>;
		port {
			smia_1_1: endpoint {
				link-frequencies = /bits/ 64 <199200000 210000000 499200000>;
				clock-lanes = <0>;
				data-lanes = <1 2>;
				remote-endpoint = <&csi2a_ep>;
			};
		};
	};
};

&i2c3 {
	ak8975@0f {
		compatible = "asahi-kasei,ak8975";
		reg = <0x0f>;
	};
};

&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 = <1 3>;
				crc = <1>;
				lane-polarities = <1 1 1>;
			};
		};
	};
};

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

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

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

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

&twl_keypad {
	linux,keymap = < MATRIX_KEY(6, 8, KEY_VOLUMEUP)
			 MATRIX_KEY(7, 8, KEY_VOLUMEDOWN)
			 >;
};
