/*
 * Copyright 2012 ST-Ericsson AB
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

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

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

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

	soc {
		i2c@80004000 {
			stmpe1601: stmpe1601@40 {
				compatible = "st,stmpe1601";
				reg = <0x40>;
				interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
				interrupt-parent = <&gpio6>;
				interrupt-controller;
				vcc-supply = <&db8500_vsmps2_reg>;
				vio-supply = <&db8500_vsmps2_reg>;

				wakeup-source;
				st,autosleep-timeout = <1024>;

				stmpe_keypad {
					compatible = "st,stmpe-keypad";

					debounce-interval = <64>;
					st,scan-count = <8>;
					st,no-autorepeat;

					linux,keymap = <0x205006b
							0x4010074
							0x3050072
							0x1030004
							0x502006a
							0x500000a
							0x5008b
							0x706001c
							0x405000b
							0x6070003
							0x3040067
							0x303006c
							0x60400e7
							0x602009e
							0x4020073
							0x5050002
							0x4030069
							0x3020008>;
				};
			};
		};

		/* Sensors mounted on this board variant */
		i2c@80128000 {
			lis331dl@1c {
				/* Accelerometer */
				compatible = "st,lis331dl-accel";
				st,drdy-int-pin = <1>;
				reg = <0x1c>;
				vdd-supply = <&ab8500_ldo_aux1_reg>;
				vddio-supply = <&db8500_vsmps2_reg>;
				pinctrl-names = "default";
				pinctrl-0 = <&accel_stuib_mode>;
				interrupt-parent = <&gpio2>;
				interrupts = <18 IRQ_TYPE_EDGE_RISING>,
					     <19 IRQ_TYPE_EDGE_RISING>;
			};
			ak8974@f {
				/* Magnetometer */
				compatible = "asahi-kasei,ak8974";
				reg = <0x0f>;
				vdd-supply = <&ab8500_ldo_aux1_reg>;
				vddio-supply = <&db8500_vsmps2_reg>;
				pinctrl-names = "default";
				pinctrl-0 = <&magneto_stuib_mode>;
				interrupt-parent = <&gpio1>;
				interrupts = <0 IRQ_TYPE_EDGE_RISING>;
			};
		};

		i2c@80110000 {
			bu21013_tp@5c {
				compatible = "rohm,bu21013_tp";
				reg = <0x5c>;
				avdd-supply = <&ab8500_ldo_aux1_reg>;

				rohm,touch-max-x = <384>;
				rohm,touch-max-y = <704>;
				rohm,flip-y;
				pinctrl-names = "default";
				pinctrl-0 = <&touch_rohm_mode>;
			};

			bu21013_tp@5d {
				compatible = "rohm,bu21013_tp";
				reg = <0x5d>;
				avdd-supply = <&ab8500_ldo_aux1_reg>;

				rohm,touch-max-x = <384>;
				rohm,touch-max-y = <704>;
				rohm,flip-y;
				pinctrl-names = "default";
				pinctrl-0 = <&touch_rohm_mode>;
			};
		};

		pinctrl {
			prox {
				prox_stuib_mode: prox_stuib {
					stuib_cfg {
						pins = "GPIO217_AH12";
						ste,config = <&gpio_in_pu>;
					};
				};
			};
			hall {
				hall_stuib_mode: stuib_tvk {
					stuib_cfg {
						pins = "GPIO145_C13";
						ste,config = <&gpio_in_pu>;
					};
				};
			};
			accelerometer {
				accel_stuib_mode: accel_stuib {
					/* Accelerometer interrupt lines 1 & 2 */
					stuib_cfg {
						pins = "GPIO82_C1", "GPIO83_D3";
						ste,config = <&gpio_in_pu>;
					};
				};
			};
			magnetometer {
				magneto_stuib_mode: magneto_stuib {
					/* Magnetometer uses GPIO 31 and 32, pull these up/down respectively */
					stuib_cfg1 {
						pins = "GPIO31_V3";
						ste,config = <&gpio_in_pu>;
					};
					stuib_cfg2 {
						pins = "GPIO32_V2";
						ste,config = <&gpio_in_pd>;
					};
				};
			};
			touch {
				touch_rohm_mode: touch_rohm {
					/*
					 * ROHM touch screen uses GPIO 143 for
					 * RST1, GPIO 146 for RST2 and
					 * GPIO 67 for interrupts. Pull-up
					 * the IRQ line and drive both
					 * reset signals low.
					 */
					stuib_cfg1 {
						pins = "GPIO143_D12", "GPIO146_D13";
						ste,config = <&gpio_out_lo>;
					};
					stuib_cfg2 {
						pins = "GPIO67_G2";
						ste,config = <&gpio_in_pu>;
					};
				};
			};
		};
	};
};
