/*
 * 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
 */

/ {
	soc-u9500 {
		i2c@80004000 {
			stmpe1601: stmpe1601@40 {
				compatible = "st,stmpe1601";
				reg = <0x40>;
				interrupts = <26 0x2>;
				interrupt-parent = <&gpio6>;
				interrupt-controller;

				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>;
				};
			};
		};

		i2c@80110000 {
			bu21013_tp@0x5c {
				compatible = "rhom,bu21013_tp";
				reg = <0x5c>;
				touch-gpio = <&gpio2 20 0x4>;
				avdd-supply = <&ab8500_ldo_aux1_reg>;

				rhom,touch-max-x = <384>;
				rhom,touch-max-y = <704>;
				rhom,flip-y;
			};

			bu21013_tp@0x5d {
				compatible = "rhom,bu21013_tp";
				reg = <0x5d>;
				touch-gpio = <&gpio2 20 0x4>;
				avdd-supply = <&ab8500_ldo_aux1_reg>;

				rhom,touch-max-x = <384>;
				rhom,touch-max-y = <704>;
				rhom,flip-y;
			};
		};
	};
};
