Atmel touch controller

Required properties:

 - compatible	: should be "atmel,mxt-ts"
 - reg			: i2c slave address of the device
 - interrupt-parent	: parent of interrupt
 - interrupts		: touch sample interrupt to indicate presense or release
				of fingers on the panel.
 - vdd_ana-supply	: Analog power supply needed to power device
 - atmel,irq-gpio	: irq gpio
 - atmel,reset-gpio	: reset gpio
 - atmel,family-id	: family identification of the controller
 - atmel,variant-id	: variant identification of the controller
 - atmel,version	: firmware version of the controller
 - atmel,build		: firmware build number of the controller
 - pinctrl-names	: This should be defined if a target uses pinctrl framework.
			See "pinctrl" in Documentation/devicetree/bindings/pinctrl/msm-pinctrl.txt.
			It should specify the names of the configs that pinctrl can install in driver.
			Following are the pinctrl configs that can be installed:
			"pmx_ts_active" : Active configuration of pins, this should specify active
			config defined in pin groups of interrupt and reset gpio.
			"pmx_ts_suspend" : Disabled configuration of pins, this should specify sleep
			config defined in pin groups of interrupt and reset gpio.
			"pmx_ts_release" : Release configuration of pins, this should specify
			release config defined in pin groups of interrupt and reset gpio.

Required for firmware update only:
 - atmel,fw-name		: firmware name to use for flashing firmware
 - atmel,bootldr-id		: bootloader identification of the controller

Optional property:
 - atmel,bl-addr		: bootloader address, by default is looked up
					in mxt_slave_addresses structure
 - atmel,config			: configuration parameter for the controller
 - atmel,i2c-pull-up		: specify to indicate pull up is needed
 - vcc_i2c-supply		: Power source required to pull up i2c bus
 - atmel,dig-reg-support	: specify to indicate digital regulator is
					needed
 - atmel,need-calibration	: specify to indicate whether calibration is
					needed during wakeup.
 - atmel,no-force-update	: flag that signifies whether force configuration
					update is applicable or not
 - atmel,no-lpm-support		: flag that signifies whether low power mode is
					supported or not on this platform
 - atmel,i2cmode-gpio		: specify gpio number for i2cmode, which provides
					internal pull-ups to i2c bus in case there
					is no hardware pull-up support
 - atmel,panel-coords	: touch panel minimum x, minimum y, maximum x and
				maximum y resolution. Used to configure the input
				device.
 - atmel,display-coords : LCD display minimum x, minimum y, maximum x and
				maximum y resolution. Used to configure the input
				device.
 - atmel,vkey-codes		: virtual key code mappings to be used when touch controller
				 does not support sending keycodes and sends coordinates
				 instead. In this case user space programs need to translate
				 coordinates to keycodes instead. Virtual key region sits
				 between display's lower bound and touchscreen's lower bound.
				 Horizontally these keys are evenly distributed between touch
				 boundaries. These codes map to buttons from left to right
				 according to icons on the touch panel. The value of these
				 codes is taken from include/uapi/linux/input.h. If
				 atmel,vkey-codes are specified, it is mandatory to specify
				 atmel,panel-coords and atmel,display-coords as well because
				 rectangular area of each of the virtual key is derived using
				 these two properties.
 - atmel,create-vkeys		: Define this property to create vkey entries for Atmel
				touchscreen driver. This is used when there are multiple Atmel
				touchscreen controllers, and everyone has to support virtual
				keys. Following are the mandatory properties that must be
				defined inside the cfg nodes:
				- atmel,family-id
				- atmel,panel-coords
				- atmel,display-coords
				- atmel,vkey-codes

Example:
	i2c@f9966000 {
		cell-index = <3>;
		compatible = "qcom,i2c-qup";
		reg = <0xf9966000 0x1000>;
		#address-cells = <1>;
		#size-cells = <0>;
		reg-names = "qup_phys_addr";
		interrupts = <0 104 0>;
		interrupt-names = "qup_err_intr";
		qcom,i2c-bus-freq = <100000>;
		qcom,i2c-src-freq = <24000000>;

		atmel_mxt_ts@4a {
			compatible = "atmel,mxt-ts";
			reg = <0x4a>
			interrupt-parent = <&msmgpio>
			interrupts = <48 0x0>;
			vdd_ana-supply = <&pm8941_l18>;
			vcc_i2c-supply = <&pm8941_lvs1>;
			/* pins used by touchscreen */
			pinctrl-names = "pmx_ts_active","pmx_ts_suspend", "pmx_ts_release";
			pinctrl-0 = <&ts_int_active &ts_reset_active>;
			pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
			pinctrl-2 = <&ts_release>;
			atmel,i2c-pull-up;
			atmel,no-force-update;
			atmel,dig-reg-support;
			atmel,key-codes = <
				102 139 0 0 0 0 0 0
				0 158 217 0 0 0 0 0
				0 0 0 0 0 0 0 0
				0 0 0 0 0 0 0 0 >;
			atmel,irq-gpio = <&msmgpio 48 0>;
			atmel,reset-gpio = <&msmgpio 26 0>;
			atmel,create-vkeys;
			atmel,cfg_1 {
				atmel,family-id = <0x81>;
				atmel,variant-id = <0x01>;
				atmel,version = <0x10>;
				atmel,build = <0xaa>;
				atmel,panel-coords = <0 0 479 799>;
				atmel,display-coords = <0 0 479 799>;
				atmel,vkey-codes = <139 172 158 217>;
				atmel,config = [
					/* Object 6, Instance = 0 */
					00 00 00 00 00 00
					/* Object 38, Instance = 0 */
					15 00 02 10 08 0C 00 00
					/* Object 7, Instance = 0 */
					FF FF 32 03
					/* Object 8, Instance = 0 */
					0F 00 0A 0A 00 00 0A 00 00 00
					/* Object 9, Instance = 0 */
					83 00 00 18 0E 00 70 32 02 01
					00 03 01 01 05 0A 0A 0A 90 05
					F8 02 00 00 0F 0F 00 00 48 2D
					07 0C 00 00 00 00
					/* Object 15, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00
					/* Object 18, Instance = 0 */
					00 00
					/* Object 19, Instance = 0 */
					00 00 00 00 00 00
					/* Object 23, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00
					/* Object 25, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00
					/* Object 40, Instance = 0 */
					00 00 00 00 00
					/* Object 42, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					/* Object 46, Instance = 0 */
					00 00 10 10 00 00 03 00 00 01
					/* Object 47, Instance = 0 */
					08 0A 28 0A 02 0A 00 8C 00 20
					00 00 00
					/* Object 55, Instance = 0 */
					00 00 00 00 00 00
					/* Object 56, Instance = 0 */
					03 00 01 18 05 05 05 05 05 05
					05 05 05 05 05 05 05 05 05 05
					05 05 05 05 05 05 05 05 00 00
					00 00 00 00 00 00 00 00 00 00
					00 00
					/* Object 57, Instance = 0 */
					00 00 00
					/* Object 61, Instance = 0 */
					00 00 00 00 00
					/* Object 61, Instance = 1 */
					00 00 00 00 00
					/* Object 62, Instance = 0 */
					7F 03 00 16 00 00 00 00 00 00
					04 08 10 18 05 00 0A 05 05 50
					14 19 34 1A 64 00 00 04 40 00
					00 00 00 00 30 32 02 00 01 00
					05 00 00 00 00 00 00 00 00 00
					00 00 0C 00
					];
			}

		}
	};
