aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/input/atmel,maxtouch.txt25
-rw-r--r--Documentation/devicetree/bindings/input/cap1106.txt53
-rw-r--r--Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt26
-rw-r--r--Documentation/devicetree/bindings/input/touchscreen/zforce_ts.txt4
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt1
-rw-r--r--MAINTAINERS7
-rw-r--r--arch/arm/boot/dts/am437x-gp-evm.dts4
-rw-r--r--arch/arm/boot/dts/am43x-epos-evm.dts4
-rw-r--r--drivers/input/keyboard/Kconfig10
-rw-r--r--drivers/input/keyboard/Makefile1
-rw-r--r--drivers/input/keyboard/cap1106.c335
-rw-r--r--drivers/input/keyboard/imx_keypad.c6
-rw-r--r--drivers/input/keyboard/max7359_keypad.c45
-rw-r--r--drivers/input/misc/keyspan_remote.c1
-rw-r--r--drivers/input/misc/soc_button_array.c3
-rw-r--r--drivers/input/misc/uinput.c47
-rw-r--r--drivers/input/mouse/alps.c691
-rw-r--r--drivers/input/mouse/alps.h60
-rw-r--r--drivers/input/serio/hyperv-keyboard.c13
-rw-r--r--drivers/input/tablet/Kconfig10
-rw-r--r--drivers/input/tablet/Makefile1
-rw-r--r--drivers/input/tablet/wacom_serial4.c620
-rw-r--r--drivers/input/touchscreen/Kconfig12
-rw-r--r--drivers/input/touchscreen/Makefile1
-rw-r--r--drivers/input/touchscreen/ads7846.c6
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c1313
-rw-r--r--drivers/input/touchscreen/edt-ft5x06.c3
-rw-r--r--drivers/input/touchscreen/ipaq-micro-ts.c166
-rw-r--r--drivers/input/touchscreen/jornada720_ts.c70
-rw-r--r--drivers/input/touchscreen/mcs5000_ts.c6
-rw-r--r--drivers/input/touchscreen/pixcir_i2c_ts.c250
-rw-r--r--drivers/input/touchscreen/s3c2410_ts.c4
-rw-r--r--drivers/input/touchscreen/zforce_ts.c31
-rw-r--r--drivers/platform/chrome/chromeos_laptop.c4
-rw-r--r--include/linux/i2c/atmel_mxt_ts.h3
-rw-r--r--include/linux/input/pixcir_ts.h12
-rw-r--r--include/uapi/linux/serio.h1
-rw-r--r--include/uapi/linux/uinput.h9
38 files changed, 3131 insertions, 727 deletions
diff --git a/Documentation/devicetree/bindings/input/atmel,maxtouch.txt b/Documentation/devicetree/bindings/input/atmel,maxtouch.txt
new file mode 100644
index 000000000000..baef432e8369
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/atmel,maxtouch.txt
@@ -0,0 +1,25 @@
1Atmel maXTouch touchscreen/touchpad
2
3Required properties:
4- compatible:
5 atmel,maxtouch
6
7- reg: The I2C address of the device
8
9- interrupts: The sink for the touchpad's IRQ output
10 See ../interrupt-controller/interrupts.txt
11
12Optional properties for main touchpad device:
13
14- linux,gpio-keymap: An array of up to 4 entries indicating the Linux
15 keycode generated by each GPIO. Linux keycodes are defined in
16 <dt-bindings/input/input.h>.
17
18Example:
19
20 touch@4b {
21 compatible = "atmel,maxtouch";
22 reg = <0x4b>;
23 interrupt-parent = <&gpio>;
24 interrupts = <TEGRA_GPIO(W, 3) IRQ_TYPE_LEVEL_LOW>;
25 };
diff --git a/Documentation/devicetree/bindings/input/cap1106.txt b/Documentation/devicetree/bindings/input/cap1106.txt
new file mode 100644
index 000000000000..4b463904cba0
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/cap1106.txt
@@ -0,0 +1,53 @@
1Device tree bindings for Microchip CAP1106, 6 channel capacitive touch sensor
2
3The node for this driver must be a child of a I2C controller node, as the
4device communication via I2C only.
5
6Required properties:
7
8 compatible: Must be "microchip,cap1106"
9
10 reg: The I2C slave address of the device.
11 Only 0x28 is valid.
12
13 interrupts: Property describing the interrupt line the
14 device's ALERT#/CM_IRQ# pin is connected to.
15 The device only has one interrupt source.
16
17Optional properties:
18
19 autorepeat: Enables the Linux input system's autorepeat
20 feature on the input device.
21
22 microchip,sensor-gain: Defines the gain of the sensor circuitry. This
23 effectively controls the sensitivity, as a
24 smaller delta capacitance is required to
25 generate the same delta count values.
26 Valid values are 1, 2, 4, and 8.
27 By default, a gain of 1 is set.
28
29 linux,keycodes: Specifies an array of numeric keycode values to
30 be used for the channels. If this property is
31 omitted, KEY_A, KEY_B, etc are used as
32 defaults. The array must have exactly six
33 entries.
34
35Example:
36
37i2c_controller {
38 cap1106@28 {
39 compatible = "microchip,cap1106";
40 interrupt-parent = <&gpio1>;
41 interrupts = <0 0>;
42 reg = <0x28>;
43 autorepeat;
44 microchip,sensor-gain = <2>;
45
46 linux,keycodes = <103 /* KEY_UP */
47 106 /* KEY_RIGHT */
48 108 /* KEY_DOWN */
49 105 /* KEY_LEFT */
50 109 /* KEY_PAGEDOWN */
51 104>; /* KEY_PAGEUP */
52 };
53}
diff --git a/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
new file mode 100644
index 000000000000..6e551090f465
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
@@ -0,0 +1,26 @@
1* Pixcir I2C touchscreen controllers
2
3Required properties:
4- compatible: must be "pixcir,pixcir_ts" or "pixcir,pixcir_tangoc"
5- reg: I2C address of the chip
6- interrupts: interrupt to which the chip is connected
7- attb-gpio: GPIO connected to the ATTB line of the chip
8- touchscreen-size-x: horizontal resolution of touchscreen (in pixels)
9- touchscreen-size-y: vertical resolution of touchscreen (in pixels)
10
11Example:
12
13 i2c@00000000 {
14 /* ... */
15
16 pixcir_ts@5c {
17 compatible = "pixcir,pixcir_ts";
18 reg = <0x5c>;
19 interrupts = <2 0>;
20 attb-gpio = <&gpf 2 0 2>;
21 touchscreen-size-x = <800>;
22 touchscreen-size-y = <600>;
23 };
24
25 /* ... */
26 };
diff --git a/Documentation/devicetree/bindings/input/touchscreen/zforce_ts.txt b/Documentation/devicetree/bindings/input/touchscreen/zforce_ts.txt
index 2faf1f1fa39e..80c37df940a7 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/zforce_ts.txt
+++ b/Documentation/devicetree/bindings/input/touchscreen/zforce_ts.txt
@@ -9,6 +9,9 @@ Required properties:
9- x-size: horizontal resolution of touchscreen 9- x-size: horizontal resolution of touchscreen
10- y-size: vertical resolution of touchscreen 10- y-size: vertical resolution of touchscreen
11 11
12Optional properties:
13- vdd-supply: Regulator controlling the controller supply
14
12Example: 15Example:
13 16
14 i2c@00000000 { 17 i2c@00000000 {
@@ -18,6 +21,7 @@ Example:
18 compatible = "neonode,zforce"; 21 compatible = "neonode,zforce";
19 reg = <0x50>; 22 reg = <0x50>;
20 interrupts = <2 0>; 23 interrupts = <2 0>;
24 vdd-supply = <&reg_zforce_vdd>;
21 25
22 gpios = <&gpio5 6 0>, /* INT */ 26 gpios = <&gpio5 6 0>, /* INT */
23 <&gpio5 9 0>; /* RST */ 27 <&gpio5 9 0>; /* RST */
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 46a311e728a8..91bd2287f0c7 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -99,6 +99,7 @@ panasonic Panasonic Corporation
99phytec PHYTEC Messtechnik GmbH 99phytec PHYTEC Messtechnik GmbH
100picochip Picochip Ltd 100picochip Picochip Ltd
101plathome Plat'Home Co., Ltd. 101plathome Plat'Home Co., Ltd.
102pixcir PIXCIR MICROELECTRONICS Co., Ltd
102powervr PowerVR (deprecated, use img) 103powervr PowerVR (deprecated, use img)
103qca Qualcomm Atheros, Inc. 104qca Qualcomm Atheros, Inc.
104qcom Qualcomm Technologies, Inc 105qcom Qualcomm Technologies, Inc
diff --git a/MAINTAINERS b/MAINTAINERS
index 61a8f486306b..170472022f10 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9843,6 +9843,13 @@ M: Pierre Ossman <pierre@ossman.eu>
9843S: Maintained 9843S: Maintained
9844F: drivers/mmc/host/wbsd.* 9844F: drivers/mmc/host/wbsd.*
9845 9845
9846WACOM PROTOCOL 4 SERIAL TABLETS
9847M: Julian Squires <julian@cipht.net>
9848M: Hans de Goede <hdegoede@redhat.com>
9849L: linux-input@vger.kernel.org
9850S: Maintained
9851F: drivers/input/tablet/wacom_serial4.c
9852
9846WATCHDOG DEVICE DRIVERS 9853WATCHDOG DEVICE DRIVERS
9847M: Wim Van Sebroeck <wim@iguana.be> 9854M: Wim Van Sebroeck <wim@iguana.be>
9848L: linux-watchdog@vger.kernel.org 9855L: linux-watchdog@vger.kernel.org
diff --git a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boot/dts/am437x-gp-evm.dts
index 003766c47bbf..2674132396e3 100644
--- a/arch/arm/boot/dts/am437x-gp-evm.dts
+++ b/arch/arm/boot/dts/am437x-gp-evm.dts
@@ -277,8 +277,8 @@
277 277
278 attb-gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>; 278 attb-gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
279 279
280 x-size = <1024>; 280 touchscreen-size-x = <1024>;
281 y-size = <600>; 281 touchscreen-size-y = <600>;
282 }; 282 };
283}; 283};
284 284
diff --git a/arch/arm/boot/dts/am43x-epos-evm.dts b/arch/arm/boot/dts/am43x-epos-evm.dts
index 90098f98a5c8..b742200f7672 100644
--- a/arch/arm/boot/dts/am43x-epos-evm.dts
+++ b/arch/arm/boot/dts/am43x-epos-evm.dts
@@ -344,8 +344,8 @@
344 344
345 attb-gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>; 345 attb-gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
346 346
347 x-size = <1024>; 347 touchscreen-size-x = <1024>;
348 y-size = <600>; 348 touchscreen-size-y = <600>;
349 }; 349 };
350}; 350};
351 351
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index f7e79b481349..a3958c63d7d5 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -665,4 +665,14 @@ config KEYBOARD_CROS_EC
665 To compile this driver as a module, choose M here: the 665 To compile this driver as a module, choose M here: the
666 module will be called cros_ec_keyb. 666 module will be called cros_ec_keyb.
667 667
668config KEYBOARD_CAP1106
669 tristate "Microchip CAP1106 touch sensor"
670 depends on OF && I2C
671 select REGMAP_I2C
672 help
673 Say Y here to enable the CAP1106 touch sensor driver.
674
675 To compile this driver as a module, choose M here: the
676 module will be called cap1106.
677
668endif 678endif
diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
index 7504ae19049d..0a3345634d79 100644
--- a/drivers/input/keyboard/Makefile
+++ b/drivers/input/keyboard/Makefile
@@ -11,6 +11,7 @@ obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o
11obj-$(CONFIG_KEYBOARD_ATARI) += atakbd.o 11obj-$(CONFIG_KEYBOARD_ATARI) += atakbd.o
12obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o 12obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
13obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o 13obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
14obj-$(CONFIG_KEYBOARD_CAP1106) += cap1106.o
14obj-$(CONFIG_KEYBOARD_CLPS711X) += clps711x-keypad.o 15obj-$(CONFIG_KEYBOARD_CLPS711X) += clps711x-keypad.o
15obj-$(CONFIG_KEYBOARD_CROS_EC) += cros_ec_keyb.o 16obj-$(CONFIG_KEYBOARD_CROS_EC) += cros_ec_keyb.o
16obj-$(CONFIG_KEYBOARD_DAVINCI) += davinci_keyscan.o 17obj-$(CONFIG_KEYBOARD_DAVINCI) += davinci_keyscan.o
diff --git a/drivers/input/keyboard/cap1106.c b/drivers/input/keyboard/cap1106.c
new file mode 100644
index 000000000000..f7d7a0d4ab4e
--- /dev/null
+++ b/drivers/input/keyboard/cap1106.c
@@ -0,0 +1,335 @@
1/*
2 * Input driver for Microchip CAP1106, 6 channel capacitive touch sensor
3 *
4 * http://www.microchip.com/wwwproducts/Devices.aspx?product=CAP1106
5 *
6 * (c) 2014 Daniel Mack <linux@zonque.org>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/kernel.h>
14#include <linux/module.h>
15#include <linux/interrupt.h>
16#include <linux/input.h>
17#include <linux/of_irq.h>
18#include <linux/regmap.h>
19#include <linux/i2c.h>
20#include <linux/gpio/consumer.h>
21
22#define CAP1106_REG_MAIN_CONTROL 0x00
23#define CAP1106_REG_MAIN_CONTROL_GAIN_SHIFT (6)
24#define CAP1106_REG_MAIN_CONTROL_GAIN_MASK (0xc0)
25#define CAP1106_REG_MAIN_CONTROL_DLSEEP BIT(4)
26#define CAP1106_REG_GENERAL_STATUS 0x02
27#define CAP1106_REG_SENSOR_INPUT 0x03
28#define CAP1106_REG_NOISE_FLAG_STATUS 0x0a
29#define CAP1106_REG_SENOR_DELTA(X) (0x10 + (X))
30#define CAP1106_REG_SENSITIVITY_CONTROL 0x1f
31#define CAP1106_REG_CONFIG 0x20
32#define CAP1106_REG_SENSOR_ENABLE 0x21
33#define CAP1106_REG_SENSOR_CONFIG 0x22
34#define CAP1106_REG_SENSOR_CONFIG2 0x23
35#define CAP1106_REG_SAMPLING_CONFIG 0x24
36#define CAP1106_REG_CALIBRATION 0x25
37#define CAP1106_REG_INT_ENABLE 0x26
38#define CAP1106_REG_REPEAT_RATE 0x28
39#define CAP1106_REG_MT_CONFIG 0x2a
40#define CAP1106_REG_MT_PATTERN_CONFIG 0x2b
41#define CAP1106_REG_MT_PATTERN 0x2d
42#define CAP1106_REG_RECALIB_CONFIG 0x2f
43#define CAP1106_REG_SENSOR_THRESH(X) (0x30 + (X))
44#define CAP1106_REG_SENSOR_NOISE_THRESH 0x38
45#define CAP1106_REG_STANDBY_CHANNEL 0x40
46#define CAP1106_REG_STANDBY_CONFIG 0x41
47#define CAP1106_REG_STANDBY_SENSITIVITY 0x42
48#define CAP1106_REG_STANDBY_THRESH 0x43
49#define CAP1106_REG_CONFIG2 0x44
50#define CAP1106_REG_SENSOR_BASE_CNT(X) (0x50 + (X))
51#define CAP1106_REG_SENSOR_CALIB (0xb1 + (X))
52#define CAP1106_REG_SENSOR_CALIB_LSB1 0xb9
53#define CAP1106_REG_SENSOR_CALIB_LSB2 0xba
54#define CAP1106_REG_PRODUCT_ID 0xfd
55#define CAP1106_REG_MANUFACTURER_ID 0xfe
56#define CAP1106_REG_REVISION 0xff
57
58#define CAP1106_NUM_CHN 6
59#define CAP1106_PRODUCT_ID 0x55
60#define CAP1106_MANUFACTURER_ID 0x5d
61
62struct cap1106_priv {
63 struct regmap *regmap;
64 struct input_dev *idev;
65
66 /* config */
67 unsigned int keycodes[CAP1106_NUM_CHN];
68};
69
70static const struct reg_default cap1106_reg_defaults[] = {
71 { CAP1106_REG_MAIN_CONTROL, 0x00 },
72 { CAP1106_REG_GENERAL_STATUS, 0x00 },
73 { CAP1106_REG_SENSOR_INPUT, 0x00 },
74 { CAP1106_REG_NOISE_FLAG_STATUS, 0x00 },
75 { CAP1106_REG_SENSITIVITY_CONTROL, 0x2f },
76 { CAP1106_REG_CONFIG, 0x20 },
77 { CAP1106_REG_SENSOR_ENABLE, 0x3f },
78 { CAP1106_REG_SENSOR_CONFIG, 0xa4 },
79 { CAP1106_REG_SENSOR_CONFIG2, 0x07 },
80 { CAP1106_REG_SAMPLING_CONFIG, 0x39 },
81 { CAP1106_REG_CALIBRATION, 0x00 },
82 { CAP1106_REG_INT_ENABLE, 0x3f },
83 { CAP1106_REG_REPEAT_RATE, 0x3f },
84 { CAP1106_REG_MT_CONFIG, 0x80 },
85 { CAP1106_REG_MT_PATTERN_CONFIG, 0x00 },
86 { CAP1106_REG_MT_PATTERN, 0x3f },
87 { CAP1106_REG_RECALIB_CONFIG, 0x8a },
88 { CAP1106_REG_SENSOR_THRESH(0), 0x40 },
89 { CAP1106_REG_SENSOR_THRESH(1), 0x40 },
90 { CAP1106_REG_SENSOR_THRESH(2), 0x40 },
91 { CAP1106_REG_SENSOR_THRESH(3), 0x40 },
92 { CAP1106_REG_SENSOR_THRESH(4), 0x40 },
93 { CAP1106_REG_SENSOR_THRESH(5), 0x40 },
94 { CAP1106_REG_SENSOR_NOISE_THRESH, 0x01 },
95 { CAP1106_REG_STANDBY_CHANNEL, 0x00 },
96 { CAP1106_REG_STANDBY_CONFIG, 0x39 },
97 { CAP1106_REG_STANDBY_SENSITIVITY, 0x02 },
98 { CAP1106_REG_STANDBY_THRESH, 0x40 },
99 { CAP1106_REG_CONFIG2, 0x40 },
100 { CAP1106_REG_SENSOR_CALIB_LSB1, 0x00 },
101 { CAP1106_REG_SENSOR_CALIB_LSB2, 0x00 },
102};
103
104static bool cap1106_volatile_reg(struct device *dev, unsigned int reg)
105{
106 switch (reg) {
107 case CAP1106_REG_MAIN_CONTROL:
108 case CAP1106_REG_SENSOR_INPUT:
109 case CAP1106_REG_SENOR_DELTA(0):
110 case CAP1106_REG_SENOR_DELTA(1):
111 case CAP1106_REG_SENOR_DELTA(2):
112 case CAP1106_REG_SENOR_DELTA(3):
113 case CAP1106_REG_SENOR_DELTA(4):
114 case CAP1106_REG_SENOR_DELTA(5):
115 case CAP1106_REG_PRODUCT_ID:
116 case CAP1106_REG_MANUFACTURER_ID:
117 case CAP1106_REG_REVISION:
118 return true;
119 }
120
121 return false;
122}
123
124static const struct regmap_config cap1106_regmap_config = {
125 .reg_bits = 8,
126 .val_bits = 8,
127
128 .max_register = CAP1106_REG_REVISION,
129 .reg_defaults = cap1106_reg_defaults,
130
131 .num_reg_defaults = ARRAY_SIZE(cap1106_reg_defaults),
132 .cache_type = REGCACHE_RBTREE,
133 .volatile_reg = cap1106_volatile_reg,
134};
135
136static irqreturn_t cap1106_thread_func(int irq_num, void *data)
137{
138 struct cap1106_priv *priv = data;
139 unsigned int status;
140 int ret, i;
141
142 /*
143 * Deassert interrupt. This needs to be done before reading the status
144 * registers, which will not carry valid values otherwise.
145 */
146 ret = regmap_update_bits(priv->regmap, CAP1106_REG_MAIN_CONTROL, 1, 0);
147 if (ret < 0)
148 goto out;
149
150 ret = regmap_read(priv->regmap, CAP1106_REG_SENSOR_INPUT, &status);
151 if (ret < 0)
152 goto out;
153
154 for (i = 0; i < CAP1106_NUM_CHN; i++)
155 input_report_key(priv->idev, priv->keycodes[i],
156 status & (1 << i));
157
158 input_sync(priv->idev);
159
160out:
161 return IRQ_HANDLED;
162}
163
164static int cap1106_set_sleep(struct cap1106_priv *priv, bool sleep)
165{
166 return regmap_update_bits(priv->regmap, CAP1106_REG_MAIN_CONTROL,
167 CAP1106_REG_MAIN_CONTROL_DLSEEP,
168 sleep ? CAP1106_REG_MAIN_CONTROL_DLSEEP : 0);
169}
170
171static int cap1106_input_open(struct input_dev *idev)
172{
173 struct cap1106_priv *priv = input_get_drvdata(idev);
174
175 return cap1106_set_sleep(priv, false);
176}
177
178static void cap1106_input_close(struct input_dev *idev)
179{
180 struct cap1106_priv *priv = input_get_drvdata(idev);
181
182 cap1106_set_sleep(priv, true);
183}
184
185static int cap1106_i2c_probe(struct i2c_client *i2c_client,
186 const struct i2c_device_id *id)
187{
188 struct device *dev = &i2c_client->dev;
189 struct cap1106_priv *priv;
190 struct device_node *node;
191 int i, error, irq, gain = 0;
192 unsigned int val, rev;
193 u32 gain32, keycodes[CAP1106_NUM_CHN];
194
195 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
196 if (!priv)
197 return -ENOMEM;
198
199 priv->regmap = devm_regmap_init_i2c(i2c_client, &cap1106_regmap_config);
200 if (IS_ERR(priv->regmap))
201 return PTR_ERR(priv->regmap);
202
203 error = regmap_read(priv->regmap, CAP1106_REG_PRODUCT_ID, &val);
204 if (error)
205 return error;
206
207 if (val != CAP1106_PRODUCT_ID) {
208 dev_err(dev, "Product ID: Got 0x%02x, expected 0x%02x\n",
209 val, CAP1106_PRODUCT_ID);
210 return -ENODEV;
211 }
212
213 error = regmap_read(priv->regmap, CAP1106_REG_MANUFACTURER_ID, &val);
214 if (error)
215 return error;
216
217 if (val != CAP1106_MANUFACTURER_ID) {
218 dev_err(dev, "Manufacturer ID: Got 0x%02x, expected 0x%02x\n",
219 val, CAP1106_MANUFACTURER_ID);
220 return -ENODEV;
221 }
222
223 error = regmap_read(priv->regmap, CAP1106_REG_REVISION, &rev);
224 if (error < 0)
225 return error;
226
227 dev_info(dev, "CAP1106 detected, revision 0x%02x\n", rev);
228 i2c_set_clientdata(i2c_client, priv);
229 node = dev->of_node;
230
231 if (!of_property_read_u32(node, "microchip,sensor-gain", &gain32)) {
232 if (is_power_of_2(gain32) && gain32 <= 8)
233 gain = ilog2(gain32);
234 else
235 dev_err(dev, "Invalid sensor-gain value %d\n", gain32);
236 }
237
238 BUILD_BUG_ON(ARRAY_SIZE(keycodes) != ARRAY_SIZE(priv->keycodes));
239
240 /* Provide some useful defaults */
241 for (i = 0; i < ARRAY_SIZE(keycodes); i++)
242 keycodes[i] = KEY_A + i;
243
244 of_property_read_u32_array(node, "linux,keycodes",
245 keycodes, ARRAY_SIZE(keycodes));
246
247 for (i = 0; i < ARRAY_SIZE(keycodes); i++)
248 priv->keycodes[i] = keycodes[i];
249
250 error = regmap_update_bits(priv->regmap, CAP1106_REG_MAIN_CONTROL,
251 CAP1106_REG_MAIN_CONTROL_GAIN_MASK,
252 gain << CAP1106_REG_MAIN_CONTROL_GAIN_SHIFT);
253 if (error)
254 return error;
255
256 /* Disable autorepeat. The Linux input system has its own handling. */
257 error = regmap_write(priv->regmap, CAP1106_REG_REPEAT_RATE, 0);
258 if (error)
259 return error;
260
261 priv->idev = devm_input_allocate_device(dev);
262 if (!priv->idev)
263 return -ENOMEM;
264
265 priv->idev->name = "CAP1106 capacitive touch sensor";
266 priv->idev->id.bustype = BUS_I2C;
267 priv->idev->evbit[0] = BIT_MASK(EV_KEY);
268
269 if (of_property_read_bool(node, "autorepeat"))
270 __set_bit(EV_REP, priv->idev->evbit);
271
272 for (i = 0; i < CAP1106_NUM_CHN; i++)
273 __set_bit(priv->keycodes[i], priv->idev->keybit);
274
275 priv->idev->id.vendor = CAP1106_MANUFACTURER_ID;
276 priv->idev->id.product = CAP1106_PRODUCT_ID;
277 priv->idev->id.version = rev;
278
279 priv->idev->open = cap1106_input_open;
280 priv->idev->close = cap1106_input_close;
281
282 input_set_drvdata(priv->idev, priv);
283
284 /*
285 * Put the device in deep sleep mode for now.
286 * ->open() will bring it back once the it is actually needed.
287 */
288 cap1106_set_sleep(priv, true);
289
290 error = input_register_device(priv->idev);
291 if (error)
292 return error;
293
294 irq = irq_of_parse_and_map(node, 0);
295 if (!irq) {
296 dev_err(dev, "Unable to parse or map IRQ\n");
297 return -ENXIO;
298 }
299
300 error = devm_request_threaded_irq(dev, irq, NULL, cap1106_thread_func,
301 IRQF_ONESHOT, dev_name(dev), priv);
302 if (error)
303 return error;
304
305 return 0;
306}
307
308static const struct of_device_id cap1106_dt_ids[] = {
309 { .compatible = "microchip,cap1106", },
310 {}
311};
312MODULE_DEVICE_TABLE(of, cap1106_dt_ids);
313
314static const struct i2c_device_id cap1106_i2c_ids[] = {
315 { "cap1106", 0 },
316 {}
317};
318MODULE_DEVICE_TABLE(i2c, cap1106_i2c_ids);
319
320static struct i2c_driver cap1106_i2c_driver = {
321 .driver = {
322 .name = "cap1106",
323 .owner = THIS_MODULE,
324 .of_match_table = cap1106_dt_ids,
325 },
326 .id_table = cap1106_i2c_ids,
327 .probe = cap1106_i2c_probe,
328};
329
330module_i2c_driver(cap1106_i2c_driver);
331
332MODULE_ALIAS("platform:cap1106");
333MODULE_DESCRIPTION("Microchip CAP1106 driver");
334MODULE_AUTHOR("Daniel Mack <linux@zonque.org>");
335MODULE_LICENSE("GPL v2");
diff --git a/drivers/input/keyboard/imx_keypad.c b/drivers/input/keyboard/imx_keypad.c
index 8280cb16260b..20a99c368d16 100644
--- a/drivers/input/keyboard/imx_keypad.c
+++ b/drivers/input/keyboard/imx_keypad.c
@@ -531,8 +531,7 @@ static int imx_keypad_probe(struct platform_device *pdev)
531 return 0; 531 return 0;
532} 532}
533 533
534#ifdef CONFIG_PM_SLEEP 534static int __maybe_unused imx_kbd_suspend(struct device *dev)
535static int imx_kbd_suspend(struct device *dev)
536{ 535{
537 struct platform_device *pdev = to_platform_device(dev); 536 struct platform_device *pdev = to_platform_device(dev);
538 struct imx_keypad *kbd = platform_get_drvdata(pdev); 537 struct imx_keypad *kbd = platform_get_drvdata(pdev);
@@ -552,7 +551,7 @@ static int imx_kbd_suspend(struct device *dev)
552 return 0; 551 return 0;
553} 552}
554 553
555static int imx_kbd_resume(struct device *dev) 554static int __maybe_unused imx_kbd_resume(struct device *dev)
556{ 555{
557 struct platform_device *pdev = to_platform_device(dev); 556 struct platform_device *pdev = to_platform_device(dev);
558 struct imx_keypad *kbd = platform_get_drvdata(pdev); 557 struct imx_keypad *kbd = platform_get_drvdata(pdev);
@@ -575,7 +574,6 @@ err_clk:
575 574
576 return ret; 575 return ret;
577} 576}
578#endif
579 577
580static SIMPLE_DEV_PM_OPS(imx_kbd_pm_ops, imx_kbd_suspend, imx_kbd_resume); 578static SIMPLE_DEV_PM_OPS(imx_kbd_pm_ops, imx_kbd_suspend, imx_kbd_resume);
581 579
diff --git a/drivers/input/keyboard/max7359_keypad.c b/drivers/input/keyboard/max7359_keypad.c
index 430b54539720..faa6da53eba8 100644
--- a/drivers/input/keyboard/max7359_keypad.c
+++ b/drivers/input/keyboard/max7359_keypad.c
@@ -203,12 +203,17 @@ static int max7359_probe(struct i2c_client *client,
203 203
204 dev_dbg(&client->dev, "keys FIFO is 0x%02x\n", ret); 204 dev_dbg(&client->dev, "keys FIFO is 0x%02x\n", ret);
205 205
206 keypad = kzalloc(sizeof(struct max7359_keypad), GFP_KERNEL); 206 keypad = devm_kzalloc(&client->dev, sizeof(struct max7359_keypad),
207 input_dev = input_allocate_device(); 207 GFP_KERNEL);
208 if (!keypad || !input_dev) { 208 if (!keypad) {
209 dev_err(&client->dev, "failed to allocate memory\n"); 209 dev_err(&client->dev, "failed to allocate memory\n");
210 error = -ENOMEM; 210 return -ENOMEM;
211 goto failed_free_mem; 211 }
212
213 input_dev = devm_input_allocate_device(&client->dev);
214 if (!input_dev) {
215 dev_err(&client->dev, "failed to allocate input device\n");
216 return -ENOMEM;
212 } 217 }
213 218
214 keypad->client = client; 219 keypad->client = client;
@@ -230,19 +235,20 @@ static int max7359_probe(struct i2c_client *client,
230 235
231 max7359_build_keycode(keypad, keymap_data); 236 max7359_build_keycode(keypad, keymap_data);
232 237
233 error = request_threaded_irq(client->irq, NULL, max7359_interrupt, 238 error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
234 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 239 max7359_interrupt,
235 client->name, keypad); 240 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
241 client->name, keypad);
236 if (error) { 242 if (error) {
237 dev_err(&client->dev, "failed to register interrupt\n"); 243 dev_err(&client->dev, "failed to register interrupt\n");
238 goto failed_free_mem; 244 return error;
239 } 245 }
240 246
241 /* Register the input device */ 247 /* Register the input device */
242 error = input_register_device(input_dev); 248 error = input_register_device(input_dev);
243 if (error) { 249 if (error) {
244 dev_err(&client->dev, "failed to register input device\n"); 250 dev_err(&client->dev, "failed to register input device\n");
245 goto failed_free_irq; 251 return error;
246 } 252 }
247 253
248 /* Initialize MAX7359 */ 254 /* Initialize MAX7359 */
@@ -252,24 +258,6 @@ static int max7359_probe(struct i2c_client *client,
252 device_init_wakeup(&client->dev, 1); 258 device_init_wakeup(&client->dev, 1);
253 259
254 return 0; 260 return 0;
255
256failed_free_irq:
257 free_irq(client->irq, keypad);
258failed_free_mem:
259 input_free_device(input_dev);
260 kfree(keypad);
261 return error;
262}
263
264static int max7359_remove(struct i2c_client *client)
265{
266 struct max7359_keypad *keypad = i2c_get_clientdata(client);
267
268 free_irq(client->irq, keypad);
269 input_unregister_device(keypad->input_dev);
270 kfree(keypad);
271
272 return 0;
273} 261}
274 262
275#ifdef CONFIG_PM_SLEEP 263#ifdef CONFIG_PM_SLEEP
@@ -313,7 +301,6 @@ static struct i2c_driver max7359_i2c_driver = {
313 .pm = &max7359_pm, 301 .pm = &max7359_pm,
314 }, 302 },
315 .probe = max7359_probe, 303 .probe = max7359_probe,
316 .remove = max7359_remove,
317 .id_table = max7359_ids, 304 .id_table = max7359_ids,
318}; 305};
319 306
diff --git a/drivers/input/misc/keyspan_remote.c b/drivers/input/misc/keyspan_remote.c
index 01f3b5b300f3..a3fe4a990cc9 100644
--- a/drivers/input/misc/keyspan_remote.c
+++ b/drivers/input/misc/keyspan_remote.c
@@ -392,7 +392,6 @@ static void keyspan_irq_recv(struct urb *urb)
392 392
393 default: 393 default:
394 goto resubmit; 394 goto resubmit;
395 break;
396 } 395 }
397 396
398 if (debug) 397 if (debug)
diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
index 5a6334be30b8..e34dfc29beb3 100644
--- a/drivers/input/misc/soc_button_array.c
+++ b/drivers/input/misc/soc_button_array.c
@@ -83,6 +83,9 @@ soc_button_device_create(struct pnp_dev *pdev,
83 sizeof(*gpio_keys_pdata) + 83 sizeof(*gpio_keys_pdata) +
84 sizeof(*gpio_keys) * MAX_NBUTTONS, 84 sizeof(*gpio_keys) * MAX_NBUTTONS,
85 GFP_KERNEL); 85 GFP_KERNEL);
86 if (!gpio_keys_pdata)
87 return ERR_PTR(-ENOMEM);
88
86 gpio_keys = (void *)(gpio_keys_pdata + 1); 89 gpio_keys = (void *)(gpio_keys_pdata + 1);
87 90
88 for (info = button_info; info->name; info++) { 91 for (info = button_info; info->name; info++) {
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
index 856936247500..421e29e4cd81 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
@@ -311,7 +311,14 @@ static int uinput_open(struct inode *inode, struct file *file)
311static int uinput_validate_absbits(struct input_dev *dev) 311static int uinput_validate_absbits(struct input_dev *dev)
312{ 312{
313 unsigned int cnt; 313 unsigned int cnt;
314 int retval = 0; 314 int nslot;
315
316 if (!test_bit(EV_ABS, dev->evbit))
317 return 0;
318
319 /*
320 * Check if absmin/absmax/absfuzz/absflat are sane.
321 */
315 322
316 for (cnt = 0; cnt < ABS_CNT; cnt++) { 323 for (cnt = 0; cnt < ABS_CNT; cnt++) {
317 int min, max; 324 int min, max;
@@ -327,8 +334,7 @@ static int uinput_validate_absbits(struct input_dev *dev)
327 UINPUT_NAME, cnt, 334 UINPUT_NAME, cnt,
328 input_abs_get_min(dev, cnt), 335 input_abs_get_min(dev, cnt),
329 input_abs_get_max(dev, cnt)); 336 input_abs_get_max(dev, cnt));
330 retval = -EINVAL; 337 return -EINVAL;
331 break;
332 } 338 }
333 339
334 if (input_abs_get_flat(dev, cnt) > 340 if (input_abs_get_flat(dev, cnt) >
@@ -340,11 +346,18 @@ static int uinput_validate_absbits(struct input_dev *dev)
340 input_abs_get_flat(dev, cnt), 346 input_abs_get_flat(dev, cnt),
341 input_abs_get_min(dev, cnt), 347 input_abs_get_min(dev, cnt),
342 input_abs_get_max(dev, cnt)); 348 input_abs_get_max(dev, cnt));
343 retval = -EINVAL; 349 return -EINVAL;
344 break;
345 } 350 }
346 } 351 }
347 return retval; 352
353 if (test_bit(ABS_MT_SLOT, dev->absbit)) {
354 nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
355 input_mt_init_slots(dev, nslot, 0);
356 } else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
357 input_set_events_per_packet(dev, 60);
358 }
359
360 return 0;
348} 361}
349 362
350static int uinput_allocate_device(struct uinput_device *udev) 363static int uinput_allocate_device(struct uinput_device *udev)
@@ -410,19 +423,9 @@ static int uinput_setup_device(struct uinput_device *udev,
410 input_abs_set_flat(dev, i, user_dev->absflat[i]); 423 input_abs_set_flat(dev, i, user_dev->absflat[i]);
411 } 424 }
412 425
413 /* check if absmin/absmax/absfuzz/absflat are filled as 426 retval = uinput_validate_absbits(dev);
414 * told in Documentation/input/input-programming.txt */ 427 if (retval < 0)
415 if (test_bit(EV_ABS, dev->evbit)) { 428 goto exit;
416 retval = uinput_validate_absbits(dev);
417 if (retval < 0)
418 goto exit;
419 if (test_bit(ABS_MT_SLOT, dev->absbit)) {
420 int nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
421 input_mt_init_slots(dev, nslot, 0);
422 } else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
423 input_set_events_per_packet(dev, 60);
424 }
425 }
426 429
427 udev->state = UIST_SETUP_COMPLETE; 430 udev->state = UIST_SETUP_COMPLETE;
428 retval = count; 431 retval = count;
@@ -720,6 +723,12 @@ static long uinput_ioctl_handler(struct file *file, unsigned int cmd,
720 } 723 }
721 724
722 switch (cmd) { 725 switch (cmd) {
726 case UI_GET_VERSION:
727 if (put_user(UINPUT_VERSION,
728 (unsigned int __user *)p))
729 retval = -EFAULT;
730 goto out;
731
723 case UI_DEV_CREATE: 732 case UI_DEV_CREATE:
724 retval = uinput_create_device(udev); 733 retval = uinput_create_device(udev);
725 goto out; 734 goto out;
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index fb15c64ffb95..a59a1a64b674 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -99,6 +99,8 @@ static const struct alps_nibble_commands alps_v6_nibble_commands[] = {
99#define ALPS_FOUR_BUTTONS 0x40 /* 4 direction button present */ 99#define ALPS_FOUR_BUTTONS 0x40 /* 4 direction button present */
100#define ALPS_PS2_INTERLEAVED 0x80 /* 3-byte PS/2 packet interleaved with 100#define ALPS_PS2_INTERLEAVED 0x80 /* 3-byte PS/2 packet interleaved with
101 6-byte ALPS packet */ 101 6-byte ALPS packet */
102#define ALPS_IS_RUSHMORE 0x100 /* device is a rushmore */
103#define ALPS_BUTTONPAD 0x200 /* device is a clickpad */
102 104
103static const struct alps_model_info alps_model_data[] = { 105static const struct alps_model_info alps_model_data[] = {
104 { { 0x32, 0x02, 0x14 }, 0x00, ALPS_PROTO_V2, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, /* Toshiba Salellite Pro M10 */ 106 { { 0x32, 0x02, 0x14 }, 0x00, ALPS_PROTO_V2, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, /* Toshiba Salellite Pro M10 */
@@ -281,11 +283,10 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
281 * 283 *
282 * The bitmaps don't have enough data to track fingers, so this function 284 * The bitmaps don't have enough data to track fingers, so this function
283 * only generates points representing a bounding box of at most two contacts. 285 * only generates points representing a bounding box of at most two contacts.
284 * These two points are returned in x1, y1, x2, and y2. 286 * These two points are returned in fields->mt.
285 */ 287 */
286static void alps_process_bitmap_dolphin(struct alps_data *priv, 288static void alps_process_bitmap_dolphin(struct alps_data *priv,
287 struct alps_fields *fields, 289 struct alps_fields *fields)
288 int *x1, int *y1, int *x2, int *y2)
289{ 290{
290 int box_middle_x, box_middle_y; 291 int box_middle_x, box_middle_y;
291 unsigned int x_map, y_map; 292 unsigned int x_map, y_map;
@@ -308,8 +309,6 @@ static void alps_process_bitmap_dolphin(struct alps_data *priv,
308 if (x_msb > priv->x_bits || y_msb > priv->y_bits) 309 if (x_msb > priv->x_bits || y_msb > priv->y_bits)
309 return; 310 return;
310 311
311 *x1 = *y1 = *x2 = *y2 = 0;
312
313 if (fields->fingers > 1) { 312 if (fields->fingers > 1) {
314 start_bit = priv->x_bits - x_msb; 313 start_bit = priv->x_bits - x_msb;
315 end_bit = priv->x_bits - x_lsb; 314 end_bit = priv->x_bits - x_lsb;
@@ -320,10 +319,35 @@ static void alps_process_bitmap_dolphin(struct alps_data *priv,
320 end_bit = y_msb - 1; 319 end_bit = y_msb - 1;
321 box_middle_y = (priv->y_max * (start_bit + end_bit)) / 320 box_middle_y = (priv->y_max * (start_bit + end_bit)) /
322 (2 * (priv->y_bits - 1)); 321 (2 * (priv->y_bits - 1));
323 *x1 = fields->x; 322 fields->mt[0] = fields->st;
324 *y1 = fields->y; 323 fields->mt[1].x = 2 * box_middle_x - fields->mt[0].x;
325 *x2 = 2 * box_middle_x - *x1; 324 fields->mt[1].y = 2 * box_middle_y - fields->mt[0].y;
326 *y2 = 2 * box_middle_y - *y1; 325 }
326}
327
328static void alps_get_bitmap_points(unsigned int map,
329 struct alps_bitmap_point *low,
330 struct alps_bitmap_point *high,
331 int *fingers)
332{
333 struct alps_bitmap_point *point;
334 int i, bit, prev_bit = 0;
335
336 point = low;
337 for (i = 0; map != 0; i++, map >>= 1) {
338 bit = map & 1;
339 if (bit) {
340 if (!prev_bit) {
341 point->start_bit = i;
342 point->num_bits = 0;
343 (*fingers)++;
344 }
345 point->num_bits++;
346 } else {
347 if (prev_bit)
348 point = high;
349 }
350 prev_bit = bit;
327 } 351 }
328} 352}
329 353
@@ -334,71 +358,21 @@ static void alps_process_bitmap_dolphin(struct alps_data *priv,
334 * 358 *
335 * The bitmaps don't have enough data to track fingers, so this function 359 * The bitmaps don't have enough data to track fingers, so this function
336 * only generates points representing a bounding box of all contacts. 360 * only generates points representing a bounding box of all contacts.
337 * These points are returned in x1, y1, x2, and y2 when the return value 361 * These points are returned in fields->mt when the return value
338 * is greater than 0. 362 * is greater than 0.
339 */ 363 */
340static int alps_process_bitmap(struct alps_data *priv, 364static int alps_process_bitmap(struct alps_data *priv,
341 unsigned int x_map, unsigned int y_map, 365 struct alps_fields *fields)
342 int *x1, int *y1, int *x2, int *y2)
343{ 366{
344 struct alps_bitmap_point { 367 int i, fingers_x = 0, fingers_y = 0, fingers;
345 int start_bit;
346 int num_bits;
347 };
348
349 int fingers_x = 0, fingers_y = 0, fingers;
350 int i, bit, prev_bit;
351 struct alps_bitmap_point x_low = {0,}, x_high = {0,}; 368 struct alps_bitmap_point x_low = {0,}, x_high = {0,};
352 struct alps_bitmap_point y_low = {0,}, y_high = {0,}; 369 struct alps_bitmap_point y_low = {0,}, y_high = {0,};
353 struct alps_bitmap_point *point;
354 370
355 if (!x_map || !y_map) 371 if (!fields->x_map || !fields->y_map)
356 return 0; 372 return 0;
357 373
358 *x1 = *y1 = *x2 = *y2 = 0; 374 alps_get_bitmap_points(fields->x_map, &x_low, &x_high, &fingers_x);
359 375 alps_get_bitmap_points(fields->y_map, &y_low, &y_high, &fingers_y);
360 prev_bit = 0;
361 point = &x_low;
362 for (i = 0; x_map != 0; i++, x_map >>= 1) {
363 bit = x_map & 1;
364 if (bit) {
365 if (!prev_bit) {
366 point->start_bit = i;
367 fingers_x++;
368 }
369 point->num_bits++;
370 } else {
371 if (prev_bit)
372 point = &x_high;
373 else
374 point->num_bits = 0;
375 }
376 prev_bit = bit;
377 }
378
379 /*
380 * y bitmap is reversed for what we need (lower positions are in
381 * higher bits), so we process from the top end.
382 */
383 y_map = y_map << (sizeof(y_map) * BITS_PER_BYTE - priv->y_bits);
384 prev_bit = 0;
385 point = &y_low;
386 for (i = 0; y_map != 0; i++, y_map <<= 1) {
387 bit = y_map & (1 << (sizeof(y_map) * BITS_PER_BYTE - 1));
388 if (bit) {
389 if (!prev_bit) {
390 point->start_bit = i;
391 fingers_y++;
392 }
393 point->num_bits++;
394 } else {
395 if (prev_bit)
396 point = &y_high;
397 else
398 point->num_bits = 0;
399 }
400 prev_bit = bit;
401 }
402 376
403 /* 377 /*
404 * Fingers can overlap, so we use the maximum count of fingers 378 * Fingers can overlap, so we use the maximum count of fingers
@@ -407,58 +381,91 @@ static int alps_process_bitmap(struct alps_data *priv,
407 fingers = max(fingers_x, fingers_y); 381 fingers = max(fingers_x, fingers_y);
408 382
409 /* 383 /*
410 * If total fingers is > 1 but either axis reports only a single 384 * If an axis reports only a single contact, we have overlapping or
411 * contact, we have overlapping or adjacent fingers. For the 385 * adjacent fingers. Divide the single contact between the two points.
412 * purposes of creating a bounding box, divide the single contact
413 * (roughly) equally between the two points.
414 */ 386 */
415 if (fingers > 1) { 387 if (fingers_x == 1) {
416 if (fingers_x == 1) { 388 i = (x_low.num_bits - 1) / 2;
417 i = x_low.num_bits / 2; 389 x_low.num_bits = x_low.num_bits - i;
418 x_low.num_bits = x_low.num_bits - i; 390 x_high.start_bit = x_low.start_bit + i;
419 x_high.start_bit = x_low.start_bit + i; 391 x_high.num_bits = max(i, 1);
420 x_high.num_bits = max(i, 1); 392 }
421 } else if (fingers_y == 1) { 393 if (fingers_y == 1) {
422 i = y_low.num_bits / 2; 394 i = (y_low.num_bits - 1) / 2;
423 y_low.num_bits = y_low.num_bits - i; 395 y_low.num_bits = y_low.num_bits - i;
424 y_high.start_bit = y_low.start_bit + i; 396 y_high.start_bit = y_low.start_bit + i;
425 y_high.num_bits = max(i, 1); 397 y_high.num_bits = max(i, 1);
426 }
427 } 398 }
428 399
429 *x1 = (priv->x_max * (2 * x_low.start_bit + x_low.num_bits - 1)) / 400 fields->mt[0].x =
430 (2 * (priv->x_bits - 1)); 401 (priv->x_max * (2 * x_low.start_bit + x_low.num_bits - 1)) /
431 *y1 = (priv->y_max * (2 * y_low.start_bit + y_low.num_bits - 1)) / 402 (2 * (priv->x_bits - 1));
432 (2 * (priv->y_bits - 1)); 403 fields->mt[0].y =
433 404 (priv->y_max * (2 * y_low.start_bit + y_low.num_bits - 1)) /
434 if (fingers > 1) { 405 (2 * (priv->y_bits - 1));
435 *x2 = (priv->x_max * 406
436 (2 * x_high.start_bit + x_high.num_bits - 1)) / 407 fields->mt[1].x =
437 (2 * (priv->x_bits - 1)); 408 (priv->x_max * (2 * x_high.start_bit + x_high.num_bits - 1)) /
438 *y2 = (priv->y_max * 409 (2 * (priv->x_bits - 1));
439 (2 * y_high.start_bit + y_high.num_bits - 1)) / 410 fields->mt[1].y =
440 (2 * (priv->y_bits - 1)); 411 (priv->y_max * (2 * y_high.start_bit + y_high.num_bits - 1)) /
412 (2 * (priv->y_bits - 1));
413
414 /* y-bitmap order is reversed, except on rushmore */
415 if (!(priv->flags & ALPS_IS_RUSHMORE)) {
416 fields->mt[0].y = priv->y_max - fields->mt[0].y;
417 fields->mt[1].y = priv->y_max - fields->mt[1].y;
441 } 418 }
442 419
443 return fingers; 420 return fingers;
444} 421}
445 422
446static void alps_set_slot(struct input_dev *dev, int slot, bool active, 423static void alps_set_slot(struct input_dev *dev, int slot, int x, int y)
447 int x, int y)
448{ 424{
449 input_mt_slot(dev, slot); 425 input_mt_slot(dev, slot);
450 input_mt_report_slot_state(dev, MT_TOOL_FINGER, active); 426 input_mt_report_slot_state(dev, MT_TOOL_FINGER, true);
451 if (active) { 427 input_report_abs(dev, ABS_MT_POSITION_X, x);
452 input_report_abs(dev, ABS_MT_POSITION_X, x); 428 input_report_abs(dev, ABS_MT_POSITION_Y, y);
453 input_report_abs(dev, ABS_MT_POSITION_Y, y);
454 }
455} 429}
456 430
457static void alps_report_semi_mt_data(struct input_dev *dev, int num_fingers, 431static void alps_report_mt_data(struct psmouse *psmouse, int n)
458 int x1, int y1, int x2, int y2)
459{ 432{
460 alps_set_slot(dev, 0, num_fingers != 0, x1, y1); 433 struct alps_data *priv = psmouse->private;
461 alps_set_slot(dev, 1, num_fingers == 2, x2, y2); 434 struct input_dev *dev = psmouse->dev;
435 struct alps_fields *f = &priv->f;
436 int i, slot[MAX_TOUCHES];
437
438 input_mt_assign_slots(dev, slot, f->mt, n);
439 for (i = 0; i < n; i++)
440 alps_set_slot(dev, slot[i], f->mt[i].x, f->mt[i].y);
441
442 input_mt_sync_frame(dev);
443}
444
445static void alps_report_semi_mt_data(struct psmouse *psmouse, int fingers)
446{
447 struct alps_data *priv = psmouse->private;
448 struct input_dev *dev = psmouse->dev;
449 struct alps_fields *f = &priv->f;
450
451 /* Use st data when we don't have mt data */
452 if (fingers < 2) {
453 f->mt[0].x = f->st.x;
454 f->mt[0].y = f->st.y;
455 fingers = f->pressure > 0 ? 1 : 0;
456 }
457
458 alps_report_mt_data(psmouse, (fingers <= 2) ? fingers : 2);
459
460 input_mt_report_finger_count(dev, fingers);
461
462 input_report_key(dev, BTN_LEFT, f->left);
463 input_report_key(dev, BTN_RIGHT, f->right);
464 input_report_key(dev, BTN_MIDDLE, f->middle);
465
466 input_report_abs(dev, ABS_PRESSURE, f->pressure);
467
468 input_sync(dev);
462} 469}
463 470
464static void alps_process_trackstick_packet_v3(struct psmouse *psmouse) 471static void alps_process_trackstick_packet_v3(struct psmouse *psmouse)
@@ -532,7 +539,7 @@ static void alps_decode_buttons_v3(struct alps_fields *f, unsigned char *p)
532 f->ts_middle = !!(p[3] & 0x40); 539 f->ts_middle = !!(p[3] & 0x40);
533} 540}
534 541
535static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p, 542static int alps_decode_pinnacle(struct alps_fields *f, unsigned char *p,
536 struct psmouse *psmouse) 543 struct psmouse *psmouse)
537{ 544{
538 f->first_mp = !!(p[4] & 0x40); 545 f->first_mp = !!(p[4] & 0x40);
@@ -546,24 +553,31 @@ static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p,
546 ((p[2] & 0x7f) << 1) | 553 ((p[2] & 0x7f) << 1) |
547 (p[4] & 0x01); 554 (p[4] & 0x01);
548 555
549 f->x = ((p[1] & 0x7f) << 4) | ((p[4] & 0x30) >> 2) | 556 f->st.x = ((p[1] & 0x7f) << 4) | ((p[4] & 0x30) >> 2) |
550 ((p[0] & 0x30) >> 4); 557 ((p[0] & 0x30) >> 4);
551 f->y = ((p[2] & 0x7f) << 4) | (p[4] & 0x0f); 558 f->st.y = ((p[2] & 0x7f) << 4) | (p[4] & 0x0f);
552 f->z = p[5] & 0x7f; 559 f->pressure = p[5] & 0x7f;
553 560
554 alps_decode_buttons_v3(f, p); 561 alps_decode_buttons_v3(f, p);
562
563 return 0;
555} 564}
556 565
557static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p, 566static int alps_decode_rushmore(struct alps_fields *f, unsigned char *p,
558 struct psmouse *psmouse) 567 struct psmouse *psmouse)
559{ 568{
560 alps_decode_pinnacle(f, p, psmouse); 569 alps_decode_pinnacle(f, p, psmouse);
561 570
571 /* Rushmore's packet decode has a bit difference with Pinnacle's */
572 f->is_mp = !!(p[5] & 0x40);
573 f->fingers = max((p[5] & 0x3), ((p[5] >> 2) & 0x3)) + 1;
562 f->x_map |= (p[5] & 0x10) << 11; 574 f->x_map |= (p[5] & 0x10) << 11;
563 f->y_map |= (p[5] & 0x20) << 6; 575 f->y_map |= (p[5] & 0x20) << 6;
576
577 return 0;
564} 578}
565 579
566static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p, 580static int alps_decode_dolphin(struct alps_fields *f, unsigned char *p,
567 struct psmouse *psmouse) 581 struct psmouse *psmouse)
568{ 582{
569 u64 palm_data = 0; 583 u64 palm_data = 0;
@@ -573,9 +587,9 @@ static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p,
573 f->is_mp = !!(p[0] & 0x20); 587 f->is_mp = !!(p[0] & 0x20);
574 588
575 if (!f->is_mp) { 589 if (!f->is_mp) {
576 f->x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7)); 590 f->st.x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7));
577 f->y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3)); 591 f->st.y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3));
578 f->z = (p[0] & 4) ? 0 : p[5] & 0x7f; 592 f->pressure = (p[0] & 4) ? 0 : p[5] & 0x7f;
579 alps_decode_buttons_v3(f, p); 593 alps_decode_buttons_v3(f, p);
580 } else { 594 } else {
581 f->fingers = ((p[0] & 0x6) >> 1 | 595 f->fingers = ((p[0] & 0x6) >> 1 |
@@ -596,19 +610,21 @@ static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p,
596 f->x_map = (palm_data >> priv->y_bits) & 610 f->x_map = (palm_data >> priv->y_bits) &
597 (BIT(priv->x_bits) - 1); 611 (BIT(priv->x_bits) - 1);
598 } 612 }
613
614 return 0;
599} 615}
600 616
601static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse) 617static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse)
602{ 618{
603 struct alps_data *priv = psmouse->private; 619 struct alps_data *priv = psmouse->private;
604 unsigned char *packet = psmouse->packet; 620 unsigned char *packet = psmouse->packet;
605 struct input_dev *dev = psmouse->dev;
606 struct input_dev *dev2 = priv->dev2; 621 struct input_dev *dev2 = priv->dev2;
607 int x1 = 0, y1 = 0, x2 = 0, y2 = 0; 622 struct alps_fields *f = &priv->f;
608 int fingers = 0, bmap_fn; 623 int fingers = 0;
609 struct alps_fields f = {0};
610 624
611 priv->decode_fields(&f, packet, psmouse); 625 memset(f, 0, sizeof(*f));
626
627 priv->decode_fields(f, packet, psmouse);
612 628
613 /* 629 /*
614 * There's no single feature of touchpad position and bitmap packets 630 * There's no single feature of touchpad position and bitmap packets
@@ -623,22 +639,14 @@ static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse)
623 * packet. Check for this, and when it happens process the 639 * packet. Check for this, and when it happens process the
624 * position packet as usual. 640 * position packet as usual.
625 */ 641 */
626 if (f.is_mp) { 642 if (f->is_mp) {
627 fingers = f.fingers; 643 fingers = f->fingers;
628 if (priv->proto_version == ALPS_PROTO_V3) { 644 if (priv->proto_version == ALPS_PROTO_V3) {
629 bmap_fn = alps_process_bitmap(priv, f.x_map, 645 if (alps_process_bitmap(priv, f) == 0)
630 f.y_map, &x1, &y1, 646 fingers = 0; /* Use st data */
631 &x2, &y2);
632
633 /*
634 * We shouldn't report more than one finger if
635 * we don't have two coordinates.
636 */
637 if (fingers > 1 && bmap_fn < 2)
638 fingers = bmap_fn;
639 647
640 /* Now process position packet */ 648 /* Now process position packet */
641 priv->decode_fields(&f, priv->multi_data, 649 priv->decode_fields(f, priv->multi_data,
642 psmouse); 650 psmouse);
643 } else { 651 } else {
644 /* 652 /*
@@ -647,15 +655,14 @@ static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse)
647 * calculate Pt2, so we need to do position 655 * calculate Pt2, so we need to do position
648 * packet decode first. 656 * packet decode first.
649 */ 657 */
650 priv->decode_fields(&f, priv->multi_data, 658 priv->decode_fields(f, priv->multi_data,
651 psmouse); 659 psmouse);
652 660
653 /* 661 /*
654 * Since Dolphin's finger number is reliable, 662 * Since Dolphin's finger number is reliable,
655 * there is no need to compare with bmap_fn. 663 * there is no need to compare with bmap_fn.
656 */ 664 */
657 alps_process_bitmap_dolphin(priv, &f, &x1, &y1, 665 alps_process_bitmap_dolphin(priv, f);
658 &x2, &y2);
659 } 666 }
660 } else { 667 } else {
661 priv->multi_packet = 0; 668 priv->multi_packet = 0;
@@ -670,10 +677,10 @@ static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse)
670 * out misidentified bitmap packets, we reject anything with this 677 * out misidentified bitmap packets, we reject anything with this
671 * bit set. 678 * bit set.
672 */ 679 */
673 if (f.is_mp) 680 if (f->is_mp)
674 return; 681 return;
675 682
676 if (!priv->multi_packet && f.first_mp) { 683 if (!priv->multi_packet && f->first_mp) {
677 priv->multi_packet = 1; 684 priv->multi_packet = 1;
678 memcpy(priv->multi_data, packet, sizeof(priv->multi_data)); 685 memcpy(priv->multi_data, packet, sizeof(priv->multi_data));
679 return; 686 return;
@@ -687,44 +694,15 @@ static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse)
687 * with x, y, and z all zero, so these seem to be flukes. 694 * with x, y, and z all zero, so these seem to be flukes.
688 * Ignore them. 695 * Ignore them.
689 */ 696 */
690 if (f.x && f.y && !f.z) 697 if (f->st.x && f->st.y && !f->pressure)
691 return; 698 return;
692 699
693 /* 700 alps_report_semi_mt_data(psmouse, fingers);
694 * If we don't have MT data or the bitmaps were empty, we have
695 * to rely on ST data.
696 */
697 if (!fingers) {
698 x1 = f.x;
699 y1 = f.y;
700 fingers = f.z > 0 ? 1 : 0;
701 }
702
703 if (f.z >= 64)
704 input_report_key(dev, BTN_TOUCH, 1);
705 else
706 input_report_key(dev, BTN_TOUCH, 0);
707
708 alps_report_semi_mt_data(dev, fingers, x1, y1, x2, y2);
709
710 input_mt_report_finger_count(dev, fingers);
711
712 input_report_key(dev, BTN_LEFT, f.left);
713 input_report_key(dev, BTN_RIGHT, f.right);
714 input_report_key(dev, BTN_MIDDLE, f.middle);
715
716 if (f.z > 0) {
717 input_report_abs(dev, ABS_X, f.x);
718 input_report_abs(dev, ABS_Y, f.y);
719 }
720 input_report_abs(dev, ABS_PRESSURE, f.z);
721
722 input_sync(dev);
723 701
724 if (!(priv->quirks & ALPS_QUIRK_TRACKSTICK_BUTTONS)) { 702 if (!(priv->quirks & ALPS_QUIRK_TRACKSTICK_BUTTONS)) {
725 input_report_key(dev2, BTN_LEFT, f.ts_left); 703 input_report_key(dev2, BTN_LEFT, f->ts_left);
726 input_report_key(dev2, BTN_RIGHT, f.ts_right); 704 input_report_key(dev2, BTN_RIGHT, f->ts_right);
727 input_report_key(dev2, BTN_MIDDLE, f.ts_middle); 705 input_report_key(dev2, BTN_MIDDLE, f->ts_middle);
728 input_sync(dev2); 706 input_sync(dev2);
729 } 707 }
730} 708}
@@ -823,13 +801,8 @@ static void alps_process_packet_v4(struct psmouse *psmouse)
823{ 801{
824 struct alps_data *priv = psmouse->private; 802 struct alps_data *priv = psmouse->private;
825 unsigned char *packet = psmouse->packet; 803 unsigned char *packet = psmouse->packet;
826 struct input_dev *dev = psmouse->dev; 804 struct alps_fields *f = &priv->f;
827 int offset; 805 int offset;
828 int x, y, z;
829 int left, right;
830 int x1, y1, x2, y2;
831 int fingers = 0;
832 unsigned int x_bitmap, y_bitmap;
833 806
834 /* 807 /*
835 * v4 has a 6-byte encoding for bitmap data, but this data is 808 * v4 has a 6-byte encoding for bitmap data, but this data is
@@ -851,71 +824,207 @@ static void alps_process_packet_v4(struct psmouse *psmouse)
851 if (++priv->multi_packet > 2) { 824 if (++priv->multi_packet > 2) {
852 priv->multi_packet = 0; 825 priv->multi_packet = 0;
853 826
854 x_bitmap = ((priv->multi_data[2] & 0x1f) << 10) | 827 f->x_map = ((priv->multi_data[2] & 0x1f) << 10) |
855 ((priv->multi_data[3] & 0x60) << 3) | 828 ((priv->multi_data[3] & 0x60) << 3) |
856 ((priv->multi_data[0] & 0x3f) << 2) | 829 ((priv->multi_data[0] & 0x3f) << 2) |
857 ((priv->multi_data[1] & 0x60) >> 5); 830 ((priv->multi_data[1] & 0x60) >> 5);
858 y_bitmap = ((priv->multi_data[5] & 0x01) << 10) | 831 f->y_map = ((priv->multi_data[5] & 0x01) << 10) |
859 ((priv->multi_data[3] & 0x1f) << 5) | 832 ((priv->multi_data[3] & 0x1f) << 5) |
860 (priv->multi_data[1] & 0x1f); 833 (priv->multi_data[1] & 0x1f);
861 834
862 fingers = alps_process_bitmap(priv, x_bitmap, y_bitmap, 835 f->fingers = alps_process_bitmap(priv, f);
863 &x1, &y1, &x2, &y2);
864
865 /* Store MT data.*/
866 priv->fingers = fingers;
867 priv->x1 = x1;
868 priv->x2 = x2;
869 priv->y1 = y1;
870 priv->y2 = y2;
871 } 836 }
872 837
873 left = packet[4] & 0x01; 838 f->left = packet[4] & 0x01;
874 right = packet[4] & 0x02; 839 f->right = packet[4] & 0x02;
875 840
876 x = ((packet[1] & 0x7f) << 4) | ((packet[3] & 0x30) >> 2) | 841 f->st.x = ((packet[1] & 0x7f) << 4) | ((packet[3] & 0x30) >> 2) |
877 ((packet[0] & 0x30) >> 4); 842 ((packet[0] & 0x30) >> 4);
878 y = ((packet[2] & 0x7f) << 4) | (packet[3] & 0x0f); 843 f->st.y = ((packet[2] & 0x7f) << 4) | (packet[3] & 0x0f);
879 z = packet[5] & 0x7f; 844 f->pressure = packet[5] & 0x7f;
880 845
881 /* 846 alps_report_semi_mt_data(psmouse, f->fingers);
882 * If there were no contacts in the bitmap, use ST 847}
883 * points in MT reports. 848
884 * If there were two contacts or more, report MT data. 849static bool alps_is_valid_package_v7(struct psmouse *psmouse)
885 */ 850{
886 if (priv->fingers < 2) { 851 switch (psmouse->pktcnt) {
887 x1 = x; 852 case 3:
888 y1 = y; 853 return (psmouse->packet[2] & 0x40) == 0x40;
889 fingers = z > 0 ? 1 : 0; 854 case 4:
890 } else { 855 return (psmouse->packet[3] & 0x48) == 0x48;
891 fingers = priv->fingers; 856 case 6:
892 x1 = priv->x1; 857 return (psmouse->packet[5] & 0x40) == 0x00;
893 x2 = priv->x2;
894 y1 = priv->y1;
895 y2 = priv->y2;
896 } 858 }
859 return true;
860}
897 861
898 if (z >= 64) 862static unsigned char alps_get_packet_id_v7(char *byte)
899 input_report_key(dev, BTN_TOUCH, 1); 863{
864 unsigned char packet_id;
865
866 if (byte[4] & 0x40)
867 packet_id = V7_PACKET_ID_TWO;
868 else if (byte[4] & 0x01)
869 packet_id = V7_PACKET_ID_MULTI;
870 else if ((byte[0] & 0x10) && !(byte[4] & 0x43))
871 packet_id = V7_PACKET_ID_NEW;
872 else if (byte[1] == 0x00 && byte[4] == 0x00)
873 packet_id = V7_PACKET_ID_IDLE;
900 else 874 else
901 input_report_key(dev, BTN_TOUCH, 0); 875 packet_id = V7_PACKET_ID_UNKNOWN;
902 876
903 alps_report_semi_mt_data(dev, fingers, x1, y1, x2, y2); 877 return packet_id;
878}
904 879
905 input_mt_report_finger_count(dev, fingers); 880static void alps_get_finger_coordinate_v7(struct input_mt_pos *mt,
881 unsigned char *pkt,
882 unsigned char pkt_id)
883{
884 mt[0].x = ((pkt[2] & 0x80) << 4);
885 mt[0].x |= ((pkt[2] & 0x3F) << 5);
886 mt[0].x |= ((pkt[3] & 0x30) >> 1);
887 mt[0].x |= (pkt[3] & 0x07);
888 mt[0].y = (pkt[1] << 3) | (pkt[0] & 0x07);
889
890 mt[1].x = ((pkt[3] & 0x80) << 4);
891 mt[1].x |= ((pkt[4] & 0x80) << 3);
892 mt[1].x |= ((pkt[4] & 0x3F) << 4);
893 mt[1].y = ((pkt[5] & 0x80) << 3);
894 mt[1].y |= ((pkt[5] & 0x3F) << 4);
895
896 switch (pkt_id) {
897 case V7_PACKET_ID_TWO:
898 mt[1].x &= ~0x000F;
899 mt[1].y |= 0x000F;
900 break;
906 901
907 input_report_key(dev, BTN_LEFT, left); 902 case V7_PACKET_ID_MULTI:
908 input_report_key(dev, BTN_RIGHT, right); 903 mt[1].x &= ~0x003F;
904 mt[1].y &= ~0x0020;
905 mt[1].y |= ((pkt[4] & 0x02) << 4);
906 mt[1].y |= 0x001F;
907 break;
909 908
910 if (z > 0) { 909 case V7_PACKET_ID_NEW:
911 input_report_abs(dev, ABS_X, x); 910 mt[1].x &= ~0x003F;
912 input_report_abs(dev, ABS_Y, y); 911 mt[1].x |= (pkt[0] & 0x20);
912 mt[1].y |= 0x000F;
913 break;
913 } 914 }
914 input_report_abs(dev, ABS_PRESSURE, z); 915
916 mt[0].y = 0x7FF - mt[0].y;
917 mt[1].y = 0x7FF - mt[1].y;
918}
919
920static int alps_get_mt_count(struct input_mt_pos *mt)
921{
922 int i;
923
924 for (i = 0; i < MAX_TOUCHES && mt[i].x != 0 && mt[i].y != 0; i++)
925 /* empty */;
926
927 return i;
928}
929
930static int alps_decode_packet_v7(struct alps_fields *f,
931 unsigned char *p,
932 struct psmouse *psmouse)
933{
934 unsigned char pkt_id;
935
936 pkt_id = alps_get_packet_id_v7(p);
937 if (pkt_id == V7_PACKET_ID_IDLE)
938 return 0;
939 if (pkt_id == V7_PACKET_ID_UNKNOWN)
940 return -1;
941
942 alps_get_finger_coordinate_v7(f->mt, p, pkt_id);
943
944 if (pkt_id == V7_PACKET_ID_TWO || pkt_id == V7_PACKET_ID_MULTI) {
945 f->left = (p[0] & 0x80) >> 7;
946 f->right = (p[0] & 0x20) >> 5;
947 f->middle = (p[0] & 0x10) >> 4;
948 }
949
950 if (pkt_id == V7_PACKET_ID_TWO)
951 f->fingers = alps_get_mt_count(f->mt);
952 else if (pkt_id == V7_PACKET_ID_MULTI)
953 f->fingers = 3 + (p[5] & 0x03);
954
955 return 0;
956}
957
958static void alps_process_trackstick_packet_v7(struct psmouse *psmouse)
959{
960 struct alps_data *priv = psmouse->private;
961 unsigned char *packet = psmouse->packet;
962 struct input_dev *dev2 = priv->dev2;
963 int x, y, z, left, right, middle;
964
965 /*
966 * b7 b6 b5 b4 b3 b2 b1 b0
967 * Byte0 0 1 0 0 1 0 0 0
968 * Byte1 1 1 * * 1 M R L
969 * Byte2 X7 1 X5 X4 X3 X2 X1 X0
970 * Byte3 Z6 1 Y6 X6 1 Y2 Y1 Y0
971 * Byte4 Y7 0 Y5 Y4 Y3 1 1 0
972 * Byte5 T&P 0 Z5 Z4 Z3 Z2 Z1 Z0
973 * M / R / L: Middle / Right / Left button
974 */
975
976 x = ((packet[2] & 0xbf)) | ((packet[3] & 0x10) << 2);
977 y = (packet[3] & 0x07) | (packet[4] & 0xb8) |
978 ((packet[3] & 0x20) << 1);
979 z = (packet[5] & 0x3f) | ((packet[3] & 0x80) >> 1);
980
981 left = (packet[1] & 0x01);
982 right = (packet[1] & 0x02) >> 1;
983 middle = (packet[1] & 0x04) >> 2;
984
985 /* Divide 2 since trackpoint's speed is too fast */
986 input_report_rel(dev2, REL_X, (char)x / 2);
987 input_report_rel(dev2, REL_Y, -((char)y / 2));
988
989 input_report_key(dev2, BTN_LEFT, left);
990 input_report_key(dev2, BTN_RIGHT, right);
991 input_report_key(dev2, BTN_MIDDLE, middle);
992
993 input_sync(dev2);
994}
995
996static void alps_process_touchpad_packet_v7(struct psmouse *psmouse)
997{
998 struct alps_data *priv = psmouse->private;
999 struct input_dev *dev = psmouse->dev;
1000 struct alps_fields *f = &priv->f;
1001
1002 memset(f, 0, sizeof(*f));
1003
1004 if (priv->decode_fields(f, psmouse->packet, psmouse))
1005 return;
1006
1007 alps_report_mt_data(psmouse, alps_get_mt_count(f->mt));
1008
1009 input_mt_report_finger_count(dev, f->fingers);
1010
1011 input_report_key(dev, BTN_LEFT, f->left);
1012 input_report_key(dev, BTN_RIGHT, f->right);
1013 input_report_key(dev, BTN_MIDDLE, f->middle);
915 1014
916 input_sync(dev); 1015 input_sync(dev);
917} 1016}
918 1017
1018static void alps_process_packet_v7(struct psmouse *psmouse)
1019{
1020 unsigned char *packet = psmouse->packet;
1021
1022 if (packet[0] == 0x48 && (packet[4] & 0x47) == 0x06)
1023 alps_process_trackstick_packet_v7(psmouse);
1024 else
1025 alps_process_touchpad_packet_v7(psmouse);
1026}
1027
919static void alps_report_bare_ps2_packet(struct psmouse *psmouse, 1028static void alps_report_bare_ps2_packet(struct psmouse *psmouse,
920 unsigned char packet[], 1029 unsigned char packet[],
921 bool report_buttons) 1030 bool report_buttons)
@@ -1080,6 +1189,14 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
1080 return PSMOUSE_BAD_DATA; 1189 return PSMOUSE_BAD_DATA;
1081 } 1190 }
1082 1191
1192 if (priv->proto_version == ALPS_PROTO_V7 &&
1193 !alps_is_valid_package_v7(psmouse)) {
1194 psmouse_dbg(psmouse, "refusing packet[%i] = %x\n",
1195 psmouse->pktcnt - 1,
1196 psmouse->packet[psmouse->pktcnt - 1]);
1197 return PSMOUSE_BAD_DATA;
1198 }
1199
1083 if (psmouse->pktcnt == psmouse->pktsize) { 1200 if (psmouse->pktcnt == psmouse->pktsize) {
1084 priv->process_packet(psmouse); 1201 priv->process_packet(psmouse);
1085 return PSMOUSE_FULL_PACKET; 1202 return PSMOUSE_FULL_PACKET;
@@ -1192,6 +1309,22 @@ static int alps_rpt_cmd(struct psmouse *psmouse, int init_command,
1192 return 0; 1309 return 0;
1193} 1310}
1194 1311
1312static bool alps_check_valid_firmware_id(unsigned char id[])
1313{
1314 if (id[0] == 0x73)
1315 return true;
1316
1317 if (id[0] == 0x88 &&
1318 (id[1] == 0x07 ||
1319 id[1] == 0x08 ||
1320 (id[1] & 0xf0) == 0xb0 ||
1321 (id[1] & 0xf0) == 0xc0)) {
1322 return true;
1323 }
1324
1325 return false;
1326}
1327
1195static int alps_enter_command_mode(struct psmouse *psmouse) 1328static int alps_enter_command_mode(struct psmouse *psmouse)
1196{ 1329{
1197 unsigned char param[4]; 1330 unsigned char param[4];
@@ -1201,8 +1334,7 @@ static int alps_enter_command_mode(struct psmouse *psmouse)
1201 return -1; 1334 return -1;
1202 } 1335 }
1203 1336
1204 if ((param[0] != 0x88 || (param[1] != 0x07 && param[1] != 0x08)) && 1337 if (!alps_check_valid_firmware_id(param)) {
1205 param[0] != 0x73) {
1206 psmouse_dbg(psmouse, 1338 psmouse_dbg(psmouse,
1207 "unknown response while entering command mode\n"); 1339 "unknown response while entering command mode\n");
1208 return -1; 1340 return -1;
@@ -1660,6 +1792,45 @@ error:
1660 return -1; 1792 return -1;
1661} 1793}
1662 1794
1795static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch)
1796{
1797 int reg, x_pitch, y_pitch, x_electrode, y_electrode, x_phys, y_phys;
1798 struct alps_data *priv = psmouse->private;
1799
1800 reg = alps_command_mode_read_reg(psmouse, reg_pitch);
1801 if (reg < 0)
1802 return reg;
1803
1804 x_pitch = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */
1805 x_pitch = 50 + 2 * x_pitch; /* In 0.1 mm units */
1806
1807 y_pitch = (char)reg >> 4; /* sign extend upper 4 bits */
1808 y_pitch = 36 + 2 * y_pitch; /* In 0.1 mm units */
1809
1810 reg = alps_command_mode_read_reg(psmouse, reg_pitch + 1);
1811 if (reg < 0)
1812 return reg;
1813
1814 x_electrode = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */
1815 x_electrode = 17 + x_electrode;
1816
1817 y_electrode = (char)reg >> 4; /* sign extend upper 4 bits */
1818 y_electrode = 13 + y_electrode;
1819
1820 x_phys = x_pitch * (x_electrode - 1); /* In 0.1 mm units */
1821 y_phys = y_pitch * (y_electrode - 1); /* In 0.1 mm units */
1822
1823 priv->x_res = priv->x_max * 10 / x_phys; /* units / mm */
1824 priv->y_res = priv->y_max * 10 / y_phys; /* units / mm */
1825
1826 psmouse_dbg(psmouse,
1827 "pitch %dx%d num-electrodes %dx%d physical size %dx%d mm res %dx%d\n",
1828 x_pitch, y_pitch, x_electrode, y_electrode,
1829 x_phys / 10, y_phys / 10, priv->x_res, priv->y_res);
1830
1831 return 0;
1832}
1833
1663static int alps_hw_init_rushmore_v3(struct psmouse *psmouse) 1834static int alps_hw_init_rushmore_v3(struct psmouse *psmouse)
1664{ 1835{
1665 struct alps_data *priv = psmouse->private; 1836 struct alps_data *priv = psmouse->private;
@@ -1680,6 +1851,9 @@ static int alps_hw_init_rushmore_v3(struct psmouse *psmouse)
1680 alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00)) 1851 alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00))
1681 goto error; 1852 goto error;
1682 1853
1854 if (alps_get_v3_v7_resolution(psmouse, 0xc2da))
1855 goto error;
1856
1683 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c6); 1857 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c6);
1684 if (reg_val == -1) 1858 if (reg_val == -1)
1685 goto error; 1859 goto error;
@@ -1856,6 +2030,35 @@ static int alps_hw_init_dolphin_v1(struct psmouse *psmouse)
1856 return 0; 2030 return 0;
1857} 2031}
1858 2032
2033static int alps_hw_init_v7(struct psmouse *psmouse)
2034{
2035 struct ps2dev *ps2dev = &psmouse->ps2dev;
2036 int reg_val, ret = -1;
2037
2038 if (alps_enter_command_mode(psmouse) ||
2039 alps_command_mode_read_reg(psmouse, 0xc2d9) == -1)
2040 goto error;
2041
2042 if (alps_get_v3_v7_resolution(psmouse, 0xc397))
2043 goto error;
2044
2045 if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64))
2046 goto error;
2047
2048 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4);
2049 if (reg_val == -1)
2050 goto error;
2051 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02))
2052 goto error;
2053
2054 alps_exit_command_mode(psmouse);
2055 return ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE);
2056
2057error:
2058 alps_exit_command_mode(psmouse);
2059 return ret;
2060}
2061
1859static void alps_set_defaults(struct alps_data *priv) 2062static void alps_set_defaults(struct alps_data *priv)
1860{ 2063{
1861 priv->byte0 = 0x8f; 2064 priv->byte0 = 0x8f;
@@ -1914,6 +2117,21 @@ static void alps_set_defaults(struct alps_data *priv)
1914 priv->x_max = 2047; 2117 priv->x_max = 2047;
1915 priv->y_max = 1535; 2118 priv->y_max = 1535;
1916 break; 2119 break;
2120 case ALPS_PROTO_V7:
2121 priv->hw_init = alps_hw_init_v7;
2122 priv->process_packet = alps_process_packet_v7;
2123 priv->decode_fields = alps_decode_packet_v7;
2124 priv->set_abs_params = alps_set_abs_params_mt;
2125 priv->nibble_commands = alps_v3_nibble_commands;
2126 priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
2127 priv->x_max = 0xfff;
2128 priv->y_max = 0x7ff;
2129 priv->byte0 = 0x48;
2130 priv->mask0 = 0x48;
2131
2132 if (priv->fw_ver[1] != 0xba)
2133 priv->flags |= ALPS_BUTTONPAD;
2134 break;
1917 } 2135 }
1918} 2136}
1919 2137
@@ -1972,6 +2190,9 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
1972 alps_exit_command_mode(psmouse)) 2190 alps_exit_command_mode(psmouse))
1973 return -EIO; 2191 return -EIO;
1974 2192
2193 /* Save the Firmware version */
2194 memcpy(priv->fw_ver, ec, 3);
2195
1975 if (alps_match_table(psmouse, priv, e7, ec) == 0) { 2196 if (alps_match_table(psmouse, priv, e7, ec) == 0) {
1976 return 0; 2197 return 0;
1977 } else if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 && 2198 } else if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 &&
@@ -1982,6 +2203,12 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
1982 return -EIO; 2203 return -EIO;
1983 else 2204 else
1984 return 0; 2205 return 0;
2206 } else if (ec[0] == 0x88 &&
2207 ((ec[1] & 0xf0) == 0xb0 || (ec[1] & 0xf0) == 0xc0)) {
2208 priv->proto_version = ALPS_PROTO_V7;
2209 alps_set_defaults(priv);
2210
2211 return 0;
1985 } else if (ec[0] == 0x88 && ec[1] == 0x08) { 2212 } else if (ec[0] == 0x88 && ec[1] == 0x08) {
1986 priv->proto_version = ALPS_PROTO_V3; 2213 priv->proto_version = ALPS_PROTO_V3;
1987 alps_set_defaults(priv); 2214 alps_set_defaults(priv);
@@ -1990,6 +2217,7 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
1990 priv->decode_fields = alps_decode_rushmore; 2217 priv->decode_fields = alps_decode_rushmore;
1991 priv->x_bits = 16; 2218 priv->x_bits = 16;
1992 priv->y_bits = 12; 2219 priv->y_bits = 12;
2220 priv->flags |= ALPS_IS_RUSHMORE;
1993 2221
1994 /* hack to make addr_command, nibble_command available */ 2222 /* hack to make addr_command, nibble_command available */
1995 psmouse->private = priv; 2223 psmouse->private = priv;
@@ -2044,17 +2272,21 @@ static void alps_set_abs_params_st(struct alps_data *priv,
2044static void alps_set_abs_params_mt(struct alps_data *priv, 2272static void alps_set_abs_params_mt(struct alps_data *priv,
2045 struct input_dev *dev1) 2273 struct input_dev *dev1)
2046{ 2274{
2047 set_bit(INPUT_PROP_SEMI_MT, dev1->propbit);
2048 input_mt_init_slots(dev1, 2, 0);
2049 input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0); 2275 input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0);
2050 input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0); 2276 input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0);
2051 2277
2052 set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit); 2278 input_abs_set_res(dev1, ABS_MT_POSITION_X, priv->x_res);
2279 input_abs_set_res(dev1, ABS_MT_POSITION_Y, priv->y_res);
2280
2281 input_mt_init_slots(dev1, MAX_TOUCHES, INPUT_MT_POINTER |
2282 INPUT_MT_DROP_UNUSED | INPUT_MT_TRACK | INPUT_MT_SEMI_MT);
2283
2053 set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit); 2284 set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit);
2054 set_bit(BTN_TOOL_QUADTAP, dev1->keybit); 2285 set_bit(BTN_TOOL_QUADTAP, dev1->keybit);
2055 2286
2056 input_set_abs_params(dev1, ABS_X, 0, priv->x_max, 0, 0); 2287 /* V7 is real multi-touch */
2057 input_set_abs_params(dev1, ABS_Y, 0, priv->y_max, 0, 0); 2288 if (priv->proto_version == ALPS_PROTO_V7)
2289 clear_bit(INPUT_PROP_SEMI_MT, dev1->propbit);
2058} 2290}
2059 2291
2060int alps_init(struct psmouse *psmouse) 2292int alps_init(struct psmouse *psmouse)
@@ -2100,7 +2332,9 @@ int alps_init(struct psmouse *psmouse)
2100 dev1->evbit[BIT_WORD(EV_ABS)] |= BIT_MASK(EV_ABS); 2332 dev1->evbit[BIT_WORD(EV_ABS)] |= BIT_MASK(EV_ABS);
2101 2333
2102 priv->set_abs_params(priv, dev1); 2334 priv->set_abs_params(priv, dev1);
2103 input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0); 2335 /* No pressure on V7 */
2336 if (priv->proto_version != ALPS_PROTO_V7)
2337 input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0);
2104 2338
2105 if (priv->flags & ALPS_WHEEL) { 2339 if (priv->flags & ALPS_WHEEL) {
2106 dev1->evbit[BIT_WORD(EV_REL)] |= BIT_MASK(EV_REL); 2340 dev1->evbit[BIT_WORD(EV_REL)] |= BIT_MASK(EV_REL);
@@ -2117,6 +2351,9 @@ int alps_init(struct psmouse *psmouse)
2117 dev1->keybit[BIT_WORD(BTN_1)] |= BIT_MASK(BTN_1); 2351 dev1->keybit[BIT_WORD(BTN_1)] |= BIT_MASK(BTN_1);
2118 dev1->keybit[BIT_WORD(BTN_2)] |= BIT_MASK(BTN_2); 2352 dev1->keybit[BIT_WORD(BTN_2)] |= BIT_MASK(BTN_2);
2119 dev1->keybit[BIT_WORD(BTN_3)] |= BIT_MASK(BTN_3); 2353 dev1->keybit[BIT_WORD(BTN_3)] |= BIT_MASK(BTN_3);
2354 } else if (priv->flags & ALPS_BUTTONPAD) {
2355 set_bit(INPUT_PROP_BUTTONPAD, dev1->propbit);
2356 clear_bit(BTN_RIGHT, dev1->keybit);
2120 } else { 2357 } else {
2121 dev1->keybit[BIT_WORD(BTN_MIDDLE)] |= BIT_MASK(BTN_MIDDLE); 2358 dev1->keybit[BIT_WORD(BTN_MIDDLE)] |= BIT_MASK(BTN_MIDDLE);
2122 } 2359 }
diff --git a/drivers/input/mouse/alps.h b/drivers/input/mouse/alps.h
index 03f88b6940c7..66240b47819a 100644
--- a/drivers/input/mouse/alps.h
+++ b/drivers/input/mouse/alps.h
@@ -12,17 +12,39 @@
12#ifndef _ALPS_H 12#ifndef _ALPS_H
13#define _ALPS_H 13#define _ALPS_H
14 14
15#include <linux/input/mt.h>
16
15#define ALPS_PROTO_V1 1 17#define ALPS_PROTO_V1 1
16#define ALPS_PROTO_V2 2 18#define ALPS_PROTO_V2 2
17#define ALPS_PROTO_V3 3 19#define ALPS_PROTO_V3 3
18#define ALPS_PROTO_V4 4 20#define ALPS_PROTO_V4 4
19#define ALPS_PROTO_V5 5 21#define ALPS_PROTO_V5 5
20#define ALPS_PROTO_V6 6 22#define ALPS_PROTO_V6 6
23#define ALPS_PROTO_V7 7 /* t3btl t4s */
24
25#define MAX_TOUCHES 2
21 26
22#define DOLPHIN_COUNT_PER_ELECTRODE 64 27#define DOLPHIN_COUNT_PER_ELECTRODE 64
23#define DOLPHIN_PROFILE_XOFFSET 8 /* x-electrode offset */ 28#define DOLPHIN_PROFILE_XOFFSET 8 /* x-electrode offset */
24#define DOLPHIN_PROFILE_YOFFSET 1 /* y-electrode offset */ 29#define DOLPHIN_PROFILE_YOFFSET 1 /* y-electrode offset */
25 30
31/*
32 * enum V7_PACKET_ID - defines the packet type for V7
33 * V7_PACKET_ID_IDLE: There's no finger and no button activity.
34 * V7_PACKET_ID_TWO: There's one or two non-resting fingers on touchpad
35 * or there's button activities.
36 * V7_PACKET_ID_MULTI: There are at least three non-resting fingers.
37 * V7_PACKET_ID_NEW: The finger position in slot is not continues from
38 * previous packet.
39*/
40enum V7_PACKET_ID {
41 V7_PACKET_ID_IDLE,
42 V7_PACKET_ID_TWO,
43 V7_PACKET_ID_MULTI,
44 V7_PACKET_ID_NEW,
45 V7_PACKET_ID_UNKNOWN,
46};
47
26/** 48/**
27 * struct alps_model_info - touchpad ID table 49 * struct alps_model_info - touchpad ID table
28 * @signature: E7 response string to match. 50 * @signature: E7 response string to match.
@@ -46,7 +68,7 @@ struct alps_model_info {
46 unsigned char command_mode_resp; 68 unsigned char command_mode_resp;
47 unsigned char proto_version; 69 unsigned char proto_version;
48 unsigned char byte0, mask0; 70 unsigned char byte0, mask0;
49 unsigned char flags; 71 int flags;
50}; 72};
51 73
52/** 74/**
@@ -65,14 +87,19 @@ struct alps_nibble_commands {
65 unsigned char data; 87 unsigned char data;
66}; 88};
67 89
90struct alps_bitmap_point {
91 int start_bit;
92 int num_bits;
93};
94
68/** 95/**
69 * struct alps_fields - decoded version of the report packet 96 * struct alps_fields - decoded version of the report packet
70 * @x_map: Bitmap of active X positions for MT. 97 * @x_map: Bitmap of active X positions for MT.
71 * @y_map: Bitmap of active Y positions for MT. 98 * @y_map: Bitmap of active Y positions for MT.
72 * @fingers: Number of fingers for MT. 99 * @fingers: Number of fingers for MT.
73 * @x: X position for ST. 100 * @pressure: Pressure.
74 * @y: Y position for ST. 101 * @st: position for ST.
75 * @z: Z position for ST. 102 * @mt: position for MT.
76 * @first_mp: Packet is the first of a multi-packet report. 103 * @first_mp: Packet is the first of a multi-packet report.
77 * @is_mp: Packet is part of a multi-packet report. 104 * @is_mp: Packet is part of a multi-packet report.
78 * @left: Left touchpad button is active. 105 * @left: Left touchpad button is active.
@@ -86,9 +113,11 @@ struct alps_fields {
86 unsigned int x_map; 113 unsigned int x_map;
87 unsigned int y_map; 114 unsigned int y_map;
88 unsigned int fingers; 115 unsigned int fingers;
89 unsigned int x; 116
90 unsigned int y; 117 int pressure;
91 unsigned int z; 118 struct input_mt_pos st;
119 struct input_mt_pos mt[MAX_TOUCHES];
120
92 unsigned int first_mp:1; 121 unsigned int first_mp:1;
93 unsigned int is_mp:1; 122 unsigned int is_mp:1;
94 123
@@ -113,6 +142,7 @@ struct alps_fields {
113 * known format for this model. The first byte of the report, ANDed with 142 * known format for this model. The first byte of the report, ANDed with
114 * mask0, should match byte0. 143 * mask0, should match byte0.
115 * @mask0: The mask used to check the first byte of the report. 144 * @mask0: The mask used to check the first byte of the report.
145 * @fw_ver: cached copy of firmware version (EC report)
116 * @flags: Additional device capabilities (passthrough port, trackstick, etc.). 146 * @flags: Additional device capabilities (passthrough port, trackstick, etc.).
117 * @x_max: Largest possible X position value. 147 * @x_max: Largest possible X position value.
118 * @y_max: Largest possible Y position value. 148 * @y_max: Largest possible Y position value.
@@ -125,11 +155,7 @@ struct alps_fields {
125 * @prev_fin: Finger bit from previous packet. 155 * @prev_fin: Finger bit from previous packet.
126 * @multi_packet: Multi-packet data in progress. 156 * @multi_packet: Multi-packet data in progress.
127 * @multi_data: Saved multi-packet data. 157 * @multi_data: Saved multi-packet data.
128 * @x1: First X coordinate from last MT report. 158 * @f: Decoded packet data fields.
129 * @x2: Second X coordinate from last MT report.
130 * @y1: First Y coordinate from last MT report.
131 * @y2: Second Y coordinate from last MT report.
132 * @fingers: Number of fingers from last MT report.
133 * @quirks: Bitmap of ALPS_QUIRK_*. 159 * @quirks: Bitmap of ALPS_QUIRK_*.
134 * @timer: Timer for flushing out the final report packet in the stream. 160 * @timer: Timer for flushing out the final report packet in the stream.
135 */ 161 */
@@ -142,23 +168,25 @@ struct alps_data {
142 int addr_command; 168 int addr_command;
143 unsigned char proto_version; 169 unsigned char proto_version;
144 unsigned char byte0, mask0; 170 unsigned char byte0, mask0;
145 unsigned char flags; 171 unsigned char fw_ver[3];
172 int flags;
146 int x_max; 173 int x_max;
147 int y_max; 174 int y_max;
148 int x_bits; 175 int x_bits;
149 int y_bits; 176 int y_bits;
177 unsigned int x_res;
178 unsigned int y_res;
150 179
151 int (*hw_init)(struct psmouse *psmouse); 180 int (*hw_init)(struct psmouse *psmouse);
152 void (*process_packet)(struct psmouse *psmouse); 181 void (*process_packet)(struct psmouse *psmouse);
153 void (*decode_fields)(struct alps_fields *f, unsigned char *p, 182 int (*decode_fields)(struct alps_fields *f, unsigned char *p,
154 struct psmouse *psmouse); 183 struct psmouse *psmouse);
155 void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1); 184 void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1);
156 185
157 int prev_fin; 186 int prev_fin;
158 int multi_packet; 187 int multi_packet;
159 unsigned char multi_data[6]; 188 unsigned char multi_data[6];
160 int x1, x2, y1, y2; 189 struct alps_fields f;
161 int fingers;
162 u8 quirks; 190 u8 quirks;
163 struct timer_list timer; 191 struct timer_list timer;
164}; 192};
diff --git a/drivers/input/serio/hyperv-keyboard.c b/drivers/input/serio/hyperv-keyboard.c
index 613261994621..e74e5d6e5f9f 100644
--- a/drivers/input/serio/hyperv-keyboard.c
+++ b/drivers/input/serio/hyperv-keyboard.c
@@ -170,6 +170,15 @@ static void hv_kbd_on_receive(struct hv_device *hv_dev,
170 serio_interrupt(kbd_dev->hv_serio, scan_code, 0); 170 serio_interrupt(kbd_dev->hv_serio, scan_code, 0);
171 } 171 }
172 spin_unlock_irqrestore(&kbd_dev->lock, flags); 172 spin_unlock_irqrestore(&kbd_dev->lock, flags);
173
174 /*
175 * Only trigger a wakeup on key down, otherwise
176 * "echo freeze > /sys/power/state" can't really enter the
177 * state because the Enter-UP can trigger a wakeup at once.
178 */
179 if (!(info & IS_BREAK))
180 pm_wakeup_event(&hv_dev->device, 0);
181
173 break; 182 break;
174 183
175 default: 184 default:
@@ -376,6 +385,9 @@ static int hv_kbd_probe(struct hv_device *hv_dev,
376 goto err_close_vmbus; 385 goto err_close_vmbus;
377 386
378 serio_register_port(kbd_dev->hv_serio); 387 serio_register_port(kbd_dev->hv_serio);
388
389 device_init_wakeup(&hv_dev->device, true);
390
379 return 0; 391 return 0;
380 392
381err_close_vmbus: 393err_close_vmbus:
@@ -390,6 +402,7 @@ static int hv_kbd_remove(struct hv_device *hv_dev)
390{ 402{
391 struct hv_kbd_dev *kbd_dev = hv_get_drvdata(hv_dev); 403 struct hv_kbd_dev *kbd_dev = hv_get_drvdata(hv_dev);
392 404
405 device_init_wakeup(&hv_dev->device, false);
393 serio_unregister_port(kbd_dev->hv_serio); 406 serio_unregister_port(kbd_dev->hv_serio);
394 vmbus_close(hv_dev->channel); 407 vmbus_close(hv_dev->channel);
395 kfree(kbd_dev); 408 kfree(kbd_dev);
diff --git a/drivers/input/tablet/Kconfig b/drivers/input/tablet/Kconfig
index cd9c79e0a11b..623bb9e0d5a4 100644
--- a/drivers/input/tablet/Kconfig
+++ b/drivers/input/tablet/Kconfig
@@ -73,4 +73,14 @@ config TABLET_USB_KBTAB
73 To compile this driver as a module, choose M here: the 73 To compile this driver as a module, choose M here: the
74 module will be called kbtab. 74 module will be called kbtab.
75 75
76config TABLET_SERIAL_WACOM4
77 tristate "Wacom protocol 4 serial tablet support"
78 select SERIO
79 help
80 Say Y here if you want to use Wacom protocol 4 serial tablets.
81 E.g. serial versions of the Cintiq, Graphire or Penpartner.
82
83 To compile this driver as a module, choose M here: the
84 module will be called wacom_serial4.
85
76endif 86endif
diff --git a/drivers/input/tablet/Makefile b/drivers/input/tablet/Makefile
index cc3bc17d5b08..2e130101cf3c 100644
--- a/drivers/input/tablet/Makefile
+++ b/drivers/input/tablet/Makefile
@@ -8,3 +8,4 @@ obj-$(CONFIG_TABLET_USB_AIPTEK) += aiptek.o
8obj-$(CONFIG_TABLET_USB_GTCO) += gtco.o 8obj-$(CONFIG_TABLET_USB_GTCO) += gtco.o
9obj-$(CONFIG_TABLET_USB_HANWANG) += hanwang.o 9obj-$(CONFIG_TABLET_USB_HANWANG) += hanwang.o
10obj-$(CONFIG_TABLET_USB_KBTAB) += kbtab.o 10obj-$(CONFIG_TABLET_USB_KBTAB) += kbtab.o
11obj-$(CONFIG_TABLET_SERIAL_WACOM4) += wacom_serial4.o
diff --git a/drivers/input/tablet/wacom_serial4.c b/drivers/input/tablet/wacom_serial4.c
new file mode 100644
index 000000000000..20ab802461e7
--- /dev/null
+++ b/drivers/input/tablet/wacom_serial4.c
@@ -0,0 +1,620 @@
1/*
2 * Wacom protocol 4 serial tablet driver
3 *
4 * Copyright 2014 Hans de Goede <hdegoede@redhat.com>
5 * Copyright 2011-2012 Julian Squires <julian@cipht.net>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version of 2 of the License, or (at your
10 * option) any later version. See the file COPYING in the main directory of
11 * this archive for more details.
12 *
13 * Many thanks to Bill Seremetis, without whom PenPartner support
14 * would not have been possible. Thanks to Patrick Mahoney.
15 *
16 * This driver was developed with reference to much code written by others,
17 * particularly:
18 * - elo, gunze drivers by Vojtech Pavlik <vojtech@ucw.cz>;
19 * - wacom_w8001 driver by Jaya Kumar <jayakumar.lkml@gmail.com>;
20 * - the USB wacom input driver, credited to many people
21 * (see drivers/input/tablet/wacom.h);
22 * - new and old versions of linuxwacom / xf86-input-wacom credited to
23 * Frederic Lepied, France. <Lepied@XFree86.org> and
24 * Ping Cheng, Wacom. <pingc@wacom.com>;
25 * - and xf86wacom.c (a presumably ancient version of the linuxwacom code),
26 * by Frederic Lepied and Raph Levien <raph@gtk.org>.
27 *
28 * To do:
29 * - support pad buttons; (requires access to a model with pad buttons)
30 * - support (protocol 4-style) tilt (requires access to a > 1.4 rom model)
31 */
32
33/*
34 * Wacom serial protocol 4 documentation taken from linuxwacom-0.9.9 code,
35 * protocol 4 uses 7 or 9 byte of data in the following format:
36 *
37 * Byte 1
38 * bit 7 Sync bit always 1
39 * bit 6 Pointing device detected
40 * bit 5 Cursor = 0 / Stylus = 1
41 * bit 4 Reserved
42 * bit 3 1 if a button on the pointing device has been pressed
43 * bit 2 P0 (optional)
44 * bit 1 X15
45 * bit 0 X14
46 *
47 * Byte 2
48 * bit 7 Always 0
49 * bits 6-0 = X13 - X7
50 *
51 * Byte 3
52 * bit 7 Always 0
53 * bits 6-0 = X6 - X0
54 *
55 * Byte 4
56 * bit 7 Always 0
57 * bit 6 B3
58 * bit 5 B2
59 * bit 4 B1
60 * bit 3 B0
61 * bit 2 P1 (optional)
62 * bit 1 Y15
63 * bit 0 Y14
64 *
65 * Byte 5
66 * bit 7 Always 0
67 * bits 6-0 = Y13 - Y7
68 *
69 * Byte 6
70 * bit 7 Always 0
71 * bits 6-0 = Y6 - Y0
72 *
73 * Byte 7
74 * bit 7 Always 0
75 * bit 6 Sign of pressure data; or wheel-rel for cursor tool
76 * bit 5 P7; or REL1 for cursor tool
77 * bit 4 P6; or REL0 for cursor tool
78 * bit 3 P5
79 * bit 2 P4
80 * bit 1 P3
81 * bit 0 P2
82 *
83 * byte 8 and 9 are optional and present only
84 * in tilt mode.
85 *
86 * Byte 8
87 * bit 7 Always 0
88 * bit 6 Sign of tilt X
89 * bit 5 Xt6
90 * bit 4 Xt5
91 * bit 3 Xt4
92 * bit 2 Xt3
93 * bit 1 Xt2
94 * bit 0 Xt1
95 *
96 * Byte 9
97 * bit 7 Always 0
98 * bit 6 Sign of tilt Y
99 * bit 5 Yt6
100 * bit 4 Yt5
101 * bit 3 Yt4
102 * bit 2 Yt3
103 * bit 1 Yt2
104 * bit 0 Yt1
105 */
106
107#include <linux/completion.h>
108#include <linux/init.h>
109#include <linux/input.h>
110#include <linux/interrupt.h>
111#include <linux/kernel.h>
112#include <linux/module.h>
113#include <linux/serio.h>
114#include <linux/slab.h>
115#include <linux/string.h>
116
117MODULE_AUTHOR("Julian Squires <julian@cipht.net>, Hans de Goede <hdegoede@redhat.com>");
118MODULE_DESCRIPTION("Wacom protocol 4 serial tablet driver");
119MODULE_LICENSE("GPL");
120
121#define REQUEST_MODEL_AND_ROM_VERSION "~#"
122#define REQUEST_MAX_COORDINATES "~C\r"
123#define REQUEST_CONFIGURATION_STRING "~R\r"
124#define REQUEST_RESET_TO_PROTOCOL_IV "\r#"
125/*
126 * Note: sending "\r$\r" causes at least the Digitizer II to send
127 * packets in ASCII instead of binary. "\r#" seems to undo that.
128 */
129
130#define COMMAND_START_SENDING_PACKETS "ST\r"
131#define COMMAND_STOP_SENDING_PACKETS "SP\r"
132#define COMMAND_MULTI_MODE_INPUT "MU1\r"
133#define COMMAND_ORIGIN_IN_UPPER_LEFT "OC1\r"
134#define COMMAND_ENABLE_ALL_MACRO_BUTTONS "~M0\r"
135#define COMMAND_DISABLE_GROUP_1_MACRO_BUTTONS "~M1\r"
136#define COMMAND_TRANSMIT_AT_MAX_RATE "IT0\r"
137#define COMMAND_DISABLE_INCREMENTAL_MODE "IN0\r"
138#define COMMAND_ENABLE_CONTINUOUS_MODE "SR\r"
139#define COMMAND_ENABLE_PRESSURE_MODE "PH1\r"
140#define COMMAND_Z_FILTER "ZF1\r"
141
142/* Note that this is a protocol 4 packet without tilt information. */
143#define PACKET_LENGTH 7
144#define DATA_SIZE 32
145
146/* flags */
147#define F_COVERS_SCREEN 0x01
148#define F_HAS_STYLUS2 0x02
149#define F_HAS_SCROLLWHEEL 0x04
150
151/* device IDs */
152#define STYLUS_DEVICE_ID 0x02
153#define CURSOR_DEVICE_ID 0x06
154#define ERASER_DEVICE_ID 0x0A
155
156enum { STYLUS = 1, ERASER, CURSOR };
157
158static const struct {
159 int device_id;
160 int input_id;
161} tools[] = {
162 { 0, 0 },
163 { STYLUS_DEVICE_ID, BTN_TOOL_PEN },
164 { ERASER_DEVICE_ID, BTN_TOOL_RUBBER },
165 { CURSOR_DEVICE_ID, BTN_TOOL_MOUSE },
166};
167
168struct wacom {
169 struct input_dev *dev;
170 struct completion cmd_done;
171 int result;
172 u8 expect;
173 u8 eraser_mask;
174 unsigned int extra_z_bits;
175 unsigned int flags;
176 unsigned int res_x, res_y;
177 unsigned int max_x, max_y;
178 unsigned int tool;
179 unsigned int idx;
180 u8 data[DATA_SIZE];
181 char phys[32];
182};
183
184enum {
185 MODEL_CINTIQ = 0x504C, /* PL */
186 MODEL_CINTIQ2 = 0x4454, /* DT */
187 MODEL_DIGITIZER_II = 0x5544, /* UD */
188 MODEL_GRAPHIRE = 0x4554, /* ET */
189 MODEL_PENPARTNER = 0x4354, /* CT */
190};
191
192static void wacom_handle_model_response(struct wacom *wacom)
193{
194 int major_v, minor_v, r = 0;
195 char *p;
196
197 p = strrchr(wacom->data, 'V');
198 if (p)
199 r = sscanf(p + 1, "%u.%u", &major_v, &minor_v);
200 if (r != 2)
201 major_v = minor_v = 0;
202
203 switch (wacom->data[2] << 8 | wacom->data[3]) {
204 case MODEL_CINTIQ: /* UNTESTED */
205 case MODEL_CINTIQ2:
206 if ((wacom->data[2] << 8 | wacom->data[3]) == MODEL_CINTIQ) {
207 wacom->dev->name = "Wacom Cintiq";
208 wacom->dev->id.version = MODEL_CINTIQ;
209 } else {
210 wacom->dev->name = "Wacom Cintiq II";
211 wacom->dev->id.version = MODEL_CINTIQ2;
212 }
213 wacom->res_x = 508;
214 wacom->res_y = 508;
215
216 switch (wacom->data[5] << 8 | wacom->data[6]) {
217 case 0x3731: /* PL-710 */
218 wacom->res_x = 2540;
219 wacom->res_y = 2540;
220 /* fall through */
221 case 0x3535: /* PL-550 */
222 case 0x3830: /* PL-800 */
223 wacom->extra_z_bits = 2;
224 }
225
226 wacom->flags = F_COVERS_SCREEN;
227 break;
228
229 case MODEL_PENPARTNER:
230 wacom->dev->name = "Wacom Penpartner";
231 wacom->dev->id.version = MODEL_PENPARTNER;
232 wacom->res_x = 1000;
233 wacom->res_y = 1000;
234 break;
235
236 case MODEL_GRAPHIRE:
237 wacom->dev->name = "Wacom Graphire";
238 wacom->dev->id.version = MODEL_GRAPHIRE;
239 wacom->res_x = 1016;
240 wacom->res_y = 1016;
241 wacom->max_x = 5103;
242 wacom->max_y = 3711;
243 wacom->extra_z_bits = 2;
244 wacom->eraser_mask = 0x08;
245 wacom->flags = F_HAS_STYLUS2 | F_HAS_SCROLLWHEEL;
246 break;
247
248 case MODEL_DIGITIZER_II:
249 wacom->dev->name = "Wacom Digitizer II";
250 wacom->dev->id.version = MODEL_DIGITIZER_II;
251 if (major_v == 1 && minor_v <= 2)
252 wacom->extra_z_bits = 0; /* UNTESTED */
253 break;
254
255 default:
256 dev_err(&wacom->dev->dev, "Unsupported Wacom model %s\n",
257 wacom->data);
258 wacom->result = -ENODEV;
259 return;
260 }
261
262 dev_info(&wacom->dev->dev, "%s tablet, version %u.%u\n",
263 wacom->dev->name, major_v, minor_v);
264}
265
266static void wacom_handle_configuration_response(struct wacom *wacom)
267{
268 int r, skip;
269
270 dev_dbg(&wacom->dev->dev, "Configuration string: %s\n", wacom->data);
271 r = sscanf(wacom->data, "~R%x,%u,%u,%u,%u", &skip, &skip, &skip,
272 &wacom->res_x, &wacom->res_y);
273 if (r != 5)
274 dev_warn(&wacom->dev->dev, "could not get resolution\n");
275}
276
277static void wacom_handle_coordinates_response(struct wacom *wacom)
278{
279 int r;
280
281 dev_dbg(&wacom->dev->dev, "Coordinates string: %s\n", wacom->data);
282 r = sscanf(wacom->data, "~C%u,%u", &wacom->max_x, &wacom->max_y);
283 if (r != 2)
284 dev_warn(&wacom->dev->dev, "could not get max coordinates\n");
285}
286
287static void wacom_handle_response(struct wacom *wacom)
288{
289 if (wacom->data[0] != '~' || wacom->data[1] != wacom->expect) {
290 dev_err(&wacom->dev->dev,
291 "Wacom got an unexpected response: %s\n", wacom->data);
292 wacom->result = -EIO;
293 } else {
294 wacom->result = 0;
295
296 switch (wacom->data[1]) {
297 case '#':
298 wacom_handle_model_response(wacom);
299 break;
300 case 'R':
301 wacom_handle_configuration_response(wacom);
302 break;
303 case 'C':
304 wacom_handle_coordinates_response(wacom);
305 break;
306 }
307 }
308
309 complete(&wacom->cmd_done);
310}
311
312static void wacom_handle_packet(struct wacom *wacom)
313{
314 u8 in_proximity_p, stylus_p, button;
315 unsigned int tool;
316 int x, y, z;
317
318 in_proximity_p = wacom->data[0] & 0x40;
319 stylus_p = wacom->data[0] & 0x20;
320 button = (wacom->data[3] & 0x78) >> 3;
321 x = (wacom->data[0] & 3) << 14 | wacom->data[1]<<7 | wacom->data[2];
322 y = (wacom->data[3] & 3) << 14 | wacom->data[4]<<7 | wacom->data[5];
323
324 if (in_proximity_p && stylus_p) {
325 z = wacom->data[6] & 0x7f;
326 if (wacom->extra_z_bits >= 1)
327 z = z << 1 | (wacom->data[3] & 0x4) >> 2;
328 if (wacom->extra_z_bits > 1)
329 z = z << 1 | (wacom->data[0] & 0x4) >> 2;
330 z = z ^ (0x40 << wacom->extra_z_bits);
331 } else {
332 z = -1;
333 }
334
335 if (stylus_p)
336 tool = (button & wacom->eraser_mask) ? ERASER : STYLUS;
337 else
338 tool = CURSOR;
339
340 if (tool != wacom->tool && wacom->tool != 0) {
341 input_report_key(wacom->dev, tools[wacom->tool].input_id, 0);
342 input_sync(wacom->dev);
343 }
344 wacom->tool = tool;
345
346 input_report_key(wacom->dev, tools[tool].input_id, in_proximity_p);
347 input_report_abs(wacom->dev, ABS_MISC,
348 in_proximity_p ? tools[tool].device_id : 0);
349 input_report_abs(wacom->dev, ABS_X, x);
350 input_report_abs(wacom->dev, ABS_Y, y);
351 input_report_abs(wacom->dev, ABS_PRESSURE, z);
352 if (stylus_p) {
353 input_report_key(wacom->dev, BTN_TOUCH, button & 1);
354 input_report_key(wacom->dev, BTN_STYLUS, button & 2);
355 input_report_key(wacom->dev, BTN_STYLUS2, button & 4);
356 } else {
357 input_report_key(wacom->dev, BTN_LEFT, button & 1);
358 input_report_key(wacom->dev, BTN_RIGHT, button & 2);
359 input_report_key(wacom->dev, BTN_MIDDLE, button & 4);
360 /* handle relative wheel for non-stylus device */
361 z = (wacom->data[6] & 0x30) >> 4;
362 if (wacom->data[6] & 0x40)
363 z = -z;
364 input_report_rel(wacom->dev, REL_WHEEL, z);
365 }
366 input_sync(wacom->dev);
367}
368
369static void wacom_clear_data_buf(struct wacom *wacom)
370{
371 memset(wacom->data, 0, DATA_SIZE);
372 wacom->idx = 0;
373}
374
375static irqreturn_t wacom_interrupt(struct serio *serio, unsigned char data,
376 unsigned int flags)
377{
378 struct wacom *wacom = serio_get_drvdata(serio);
379
380 if (data & 0x80)
381 wacom->idx = 0;
382
383 /*
384 * We're either expecting a carriage return-terminated ASCII
385 * response string, or a seven-byte packet with the MSB set on
386 * the first byte.
387 *
388 * Note however that some tablets (the PenPartner, for
389 * example) don't send a carriage return at the end of a
390 * command. We handle these by waiting for timeout.
391 */
392 if (data == '\r' && !(wacom->data[0] & 0x80)) {
393 wacom_handle_response(wacom);
394 wacom_clear_data_buf(wacom);
395 return IRQ_HANDLED;
396 }
397
398 /* Leave place for 0 termination */
399 if (wacom->idx > (DATA_SIZE - 2)) {
400 dev_dbg(&wacom->dev->dev,
401 "throwing away %d bytes of garbage\n", wacom->idx);
402 wacom_clear_data_buf(wacom);
403 }
404 wacom->data[wacom->idx++] = data;
405
406 if (wacom->idx == PACKET_LENGTH && (wacom->data[0] & 0x80)) {
407 wacom_handle_packet(wacom);
408 wacom_clear_data_buf(wacom);
409 }
410
411 return IRQ_HANDLED;
412}
413
414static void wacom_disconnect(struct serio *serio)
415{
416 struct wacom *wacom = serio_get_drvdata(serio);
417
418 serio_close(serio);
419 serio_set_drvdata(serio, NULL);
420 input_unregister_device(wacom->dev);
421 kfree(wacom);
422}
423
424static int wacom_send(struct serio *serio, const u8 *command)
425{
426 int err = 0;
427
428 for (; !err && *command; command++)
429 err = serio_write(serio, *command);
430
431 return err;
432}
433
434static int wacom_send_setup_string(struct wacom *wacom, struct serio *serio)
435{
436 const u8 *cmd;
437
438 switch (wacom->dev->id.version) {
439 case MODEL_CINTIQ: /* UNTESTED */
440 cmd = COMMAND_ORIGIN_IN_UPPER_LEFT
441 COMMAND_TRANSMIT_AT_MAX_RATE
442 COMMAND_ENABLE_CONTINUOUS_MODE
443 COMMAND_START_SENDING_PACKETS;
444 break;
445
446 case MODEL_PENPARTNER:
447 cmd = COMMAND_ENABLE_PRESSURE_MODE
448 COMMAND_START_SENDING_PACKETS;
449 break;
450
451 default:
452 cmd = COMMAND_MULTI_MODE_INPUT
453 COMMAND_ORIGIN_IN_UPPER_LEFT
454 COMMAND_ENABLE_ALL_MACRO_BUTTONS
455 COMMAND_DISABLE_GROUP_1_MACRO_BUTTONS
456 COMMAND_TRANSMIT_AT_MAX_RATE
457 COMMAND_DISABLE_INCREMENTAL_MODE
458 COMMAND_ENABLE_CONTINUOUS_MODE
459 COMMAND_Z_FILTER
460 COMMAND_START_SENDING_PACKETS;
461 break;
462 }
463
464 return wacom_send(serio, cmd);
465}
466
467static int wacom_send_and_wait(struct wacom *wacom, struct serio *serio,
468 const u8 *cmd, const char *desc)
469{
470 int err;
471 unsigned long u;
472
473 wacom->expect = cmd[1];
474 init_completion(&wacom->cmd_done);
475
476 err = wacom_send(serio, cmd);
477 if (err)
478 return err;
479
480 u = wait_for_completion_timeout(&wacom->cmd_done, HZ);
481 if (u == 0) {
482 /* Timeout, process what we've received. */
483 wacom_handle_response(wacom);
484 }
485
486 wacom->expect = 0;
487 return wacom->result;
488}
489
490static int wacom_setup(struct wacom *wacom, struct serio *serio)
491{
492 int err;
493
494 /* Note that setting the link speed is the job of inputattach.
495 * We assume that reset negotiation has already happened,
496 * here. */
497 err = wacom_send_and_wait(wacom, serio, REQUEST_MODEL_AND_ROM_VERSION,
498 "model and version");
499 if (err)
500 return err;
501
502 if (!(wacom->res_x && wacom->res_y)) {
503 err = wacom_send_and_wait(wacom, serio,
504 REQUEST_CONFIGURATION_STRING,
505 "configuration string");
506 if (err)
507 return err;
508 }
509
510 if (!(wacom->max_x && wacom->max_y)) {
511 err = wacom_send_and_wait(wacom, serio,
512 REQUEST_MAX_COORDINATES,
513 "coordinates string");
514 if (err)
515 return err;
516 }
517
518 return wacom_send_setup_string(wacom, serio);
519}
520
521static int wacom_connect(struct serio *serio, struct serio_driver *drv)
522{
523 struct wacom *wacom;
524 struct input_dev *input_dev;
525 int err = -ENOMEM;
526
527 wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL);
528 input_dev = input_allocate_device();
529 if (!wacom || !input_dev)
530 goto free_device;
531
532 wacom->dev = input_dev;
533 wacom->extra_z_bits = 1;
534 wacom->eraser_mask = 0x04;
535 wacom->tool = wacom->idx = 0;
536 snprintf(wacom->phys, sizeof(wacom->phys), "%s/input0", serio->phys);
537 input_dev->phys = wacom->phys;
538 input_dev->id.bustype = BUS_RS232;
539 input_dev->id.vendor = SERIO_WACOM_IV;
540 input_dev->id.product = serio->id.extra;
541 input_dev->dev.parent = &serio->dev;
542
543 input_dev->evbit[0] =
544 BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | BIT_MASK(EV_REL);
545 set_bit(ABS_MISC, input_dev->absbit);
546 set_bit(BTN_TOOL_PEN, input_dev->keybit);
547 set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
548 set_bit(BTN_TOOL_MOUSE, input_dev->keybit);
549 set_bit(BTN_TOUCH, input_dev->keybit);
550 set_bit(BTN_STYLUS, input_dev->keybit);
551 set_bit(BTN_LEFT, input_dev->keybit);
552 set_bit(BTN_RIGHT, input_dev->keybit);
553 set_bit(BTN_MIDDLE, input_dev->keybit);
554
555 serio_set_drvdata(serio, wacom);
556
557 err = serio_open(serio, drv);
558 if (err)
559 goto free_device;
560
561 err = wacom_setup(wacom, serio);
562 if (err)
563 goto close_serio;
564
565 set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
566 if (!(wacom->flags & F_COVERS_SCREEN))
567 __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
568
569 if (wacom->flags & F_HAS_STYLUS2)
570 __set_bit(BTN_STYLUS2, input_dev->keybit);
571
572 if (wacom->flags & F_HAS_SCROLLWHEEL)
573 __set_bit(REL_WHEEL, input_dev->relbit);
574
575 input_abs_set_res(wacom->dev, ABS_X, wacom->res_x);
576 input_abs_set_res(wacom->dev, ABS_Y, wacom->res_y);
577 input_set_abs_params(wacom->dev, ABS_X, 0, wacom->max_x, 0, 0);
578 input_set_abs_params(wacom->dev, ABS_Y, 0, wacom->max_y, 0, 0);
579 input_set_abs_params(wacom->dev, ABS_PRESSURE, -1,
580 (1 << (7 + wacom->extra_z_bits)) - 1, 0, 0);
581
582 err = input_register_device(wacom->dev);
583 if (err)
584 goto close_serio;
585
586 return 0;
587
588close_serio:
589 serio_close(serio);
590free_device:
591 serio_set_drvdata(serio, NULL);
592 input_free_device(input_dev);
593 kfree(wacom);
594 return err;
595}
596
597static struct serio_device_id wacom_serio_ids[] = {
598 {
599 .type = SERIO_RS232,
600 .proto = SERIO_WACOM_IV,
601 .id = SERIO_ANY,
602 .extra = SERIO_ANY,
603 },
604 { 0 }
605};
606
607MODULE_DEVICE_TABLE(serio, wacom_serio_ids);
608
609static struct serio_driver wacom_drv = {
610 .driver = {
611 .name = "wacom_serial4",
612 },
613 .description = "Wacom protocol 4 serial tablet driver",
614 .id_table = wacom_serio_ids,
615 .interrupt = wacom_interrupt,
616 .connect = wacom_connect,
617 .disconnect = wacom_disconnect,
618};
619
620module_serio_driver(wacom_drv);
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index a23a94bb4bcb..6bb9a7dd23b6 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -471,6 +471,18 @@ config TOUCHSCREEN_HP7XX
471 To compile this driver as a module, choose M here: the 471 To compile this driver as a module, choose M here: the
472 module will be called jornada720_ts. 472 module will be called jornada720_ts.
473 473
474config TOUCHSCREEN_IPAQ_MICRO
475 tristate "HP iPAQ Atmel Micro ASIC touchscreen"
476 depends on MFD_IPAQ_MICRO
477 help
478 Say Y here to enable support for the touchscreen attached to
479 the Atmel Micro peripheral controller on iPAQ h3100/h3600/h3700
480
481 If unsure, say N.
482
483 To compile this driver as a module, choose M here: the
484 module will be called ipaq-micro-ts.
485
474config TOUCHSCREEN_HTCPEN 486config TOUCHSCREEN_HTCPEN
475 tristate "HTC Shift X9500 touchscreen" 487 tristate "HTC Shift X9500 touchscreen"
476 depends on ISA 488 depends on ISA
diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 126479d8c29a..4be94fce41af 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -46,6 +46,7 @@ obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
46obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o 46obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o
47obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o 47obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
48obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o 48obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o
49obj-$(CONFIG_TOUCHSCREEN_IPAQ_MICRO) += ipaq-micro-ts.o
49obj-$(CONFIG_TOUCHSCREEN_HTCPEN) += htcpen.o 50obj-$(CONFIG_TOUCHSCREEN_HTCPEN) += htcpen.o
50obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o 51obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o
51obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o 52obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index da201b8e37dc..e57ba52bf484 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -1302,8 +1302,10 @@ static int ads7846_probe(struct spi_device *spi)
1302 pdata = dev_get_platdata(&spi->dev); 1302 pdata = dev_get_platdata(&spi->dev);
1303 if (!pdata) { 1303 if (!pdata) {
1304 pdata = ads7846_probe_dt(&spi->dev); 1304 pdata = ads7846_probe_dt(&spi->dev);
1305 if (IS_ERR(pdata)) 1305 if (IS_ERR(pdata)) {
1306 return PTR_ERR(pdata); 1306 err = PTR_ERR(pdata);
1307 goto err_free_mem;
1308 }
1307 } 1309 }
1308 1310
1309 ts->model = pdata->model ? : 7846; 1311 ts->model = pdata->model ? : 7846;
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 6e0b4a2120d3..03b85711cb70 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -2,6 +2,7 @@
2 * Atmel maXTouch Touchscreen driver 2 * Atmel maXTouch Touchscreen driver
3 * 3 *
4 * Copyright (C) 2010 Samsung Electronics Co.Ltd 4 * Copyright (C) 2010 Samsung Electronics Co.Ltd
5 * Copyright (C) 2011-2014 Atmel Corporation
5 * Copyright (C) 2012 Google, Inc. 6 * Copyright (C) 2012 Google, Inc.
6 * 7 *
7 * Author: Joonyoung Shim <jy0922.shim@samsung.com> 8 * Author: Joonyoung Shim <jy0922.shim@samsung.com>
@@ -22,6 +23,7 @@
22#include <linux/i2c/atmel_mxt_ts.h> 23#include <linux/i2c/atmel_mxt_ts.h>
23#include <linux/input/mt.h> 24#include <linux/input/mt.h>
24#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26#include <linux/of.h>
25#include <linux/slab.h> 27#include <linux/slab.h>
26 28
27/* Version */ 29/* Version */
@@ -29,8 +31,10 @@
29#define MXT_VER_21 21 31#define MXT_VER_21 21
30#define MXT_VER_22 22 32#define MXT_VER_22 22
31 33
32/* Firmware */ 34/* Firmware files */
33#define MXT_FW_NAME "maxtouch.fw" 35#define MXT_FW_NAME "maxtouch.fw"
36#define MXT_CFG_NAME "maxtouch.cfg"
37#define MXT_CFG_MAGIC "OBP_RAW V1"
34 38
35/* Registers */ 39/* Registers */
36#define MXT_INFO 0x00 40#define MXT_INFO 0x00
@@ -44,6 +48,8 @@
44#define MXT_OBJECT_START 0x07 48#define MXT_OBJECT_START 0x07
45 49
46#define MXT_OBJECT_SIZE 6 50#define MXT_OBJECT_SIZE 6
51#define MXT_INFO_CHECKSUM_SIZE 3
52#define MXT_MAX_BLOCK_WRITE 256
47 53
48/* Object types */ 54/* Object types */
49#define MXT_DEBUG_DIAGNOSTIC_T37 37 55#define MXT_DEBUG_DIAGNOSTIC_T37 37
@@ -74,6 +80,9 @@
74#define MXT_SPT_MESSAGECOUNT_T44 44 80#define MXT_SPT_MESSAGECOUNT_T44 44
75#define MXT_SPT_CTECONFIG_T46 46 81#define MXT_SPT_CTECONFIG_T46 46
76 82
83/* MXT_GEN_MESSAGE_T5 object */
84#define MXT_RPTID_NOMSG 0xff
85
77/* MXT_GEN_COMMAND_T6 field */ 86/* MXT_GEN_COMMAND_T6 field */
78#define MXT_COMMAND_RESET 0 87#define MXT_COMMAND_RESET 0
79#define MXT_COMMAND_BACKUPNV 1 88#define MXT_COMMAND_BACKUPNV 1
@@ -83,11 +92,20 @@
83 92
84/* Define for T6 status byte */ 93/* Define for T6 status byte */
85#define MXT_T6_STATUS_RESET (1 << 7) 94#define MXT_T6_STATUS_RESET (1 << 7)
95#define MXT_T6_STATUS_OFL (1 << 6)
96#define MXT_T6_STATUS_SIGERR (1 << 5)
97#define MXT_T6_STATUS_CAL (1 << 4)
98#define MXT_T6_STATUS_CFGERR (1 << 3)
99#define MXT_T6_STATUS_COMSERR (1 << 2)
86 100
87/* MXT_GEN_POWER_T7 field */ 101/* MXT_GEN_POWER_T7 field */
88#define MXT_POWER_IDLEACQINT 0 102struct t7_config {
89#define MXT_POWER_ACTVACQINT 1 103 u8 idle;
90#define MXT_POWER_ACTV2IDLETO 2 104 u8 active;
105} __packed;
106
107#define MXT_POWER_CFG_RUN 0
108#define MXT_POWER_CFG_DEEPSLEEP 1
91 109
92/* MXT_GEN_ACQUIRE_T8 field */ 110/* MXT_GEN_ACQUIRE_T8 field */
93#define MXT_ACQUIRE_CHRGTIME 0 111#define MXT_ACQUIRE_CHRGTIME 0
@@ -99,7 +117,6 @@
99#define MXT_ACQUIRE_ATCHCALSTHR 7 117#define MXT_ACQUIRE_ATCHCALSTHR 7
100 118
101/* MXT_TOUCH_MULTI_T9 field */ 119/* MXT_TOUCH_MULTI_T9 field */
102#define MXT_TOUCH_CTRL 0
103#define MXT_T9_ORIENT 9 120#define MXT_T9_ORIENT 9
104#define MXT_T9_RANGE 18 121#define MXT_T9_RANGE 18
105 122
@@ -217,11 +234,6 @@ struct mxt_object {
217 u8 num_report_ids; 234 u8 num_report_ids;
218} __packed; 235} __packed;
219 236
220struct mxt_message {
221 u8 reportid;
222 u8 message[7];
223};
224
225/* Each client has this additional data */ 237/* Each client has this additional data */
226struct mxt_data { 238struct mxt_data {
227 struct i2c_client *client; 239 struct i2c_client *client;
@@ -234,15 +246,28 @@ struct mxt_data {
234 unsigned int max_x; 246 unsigned int max_x;
235 unsigned int max_y; 247 unsigned int max_y;
236 bool in_bootloader; 248 bool in_bootloader;
249 u16 mem_size;
250 u8 max_reportid;
237 u32 config_crc; 251 u32 config_crc;
252 u32 info_crc;
238 u8 bootloader_addr; 253 u8 bootloader_addr;
254 u8 *msg_buf;
255 u8 t6_status;
256 bool update_input;
257 u8 last_message_count;
258 u8 num_touchids;
259 struct t7_config t7_cfg;
239 260
240 /* Cached parameters from object table */ 261 /* Cached parameters from object table */
262 u16 T5_address;
263 u8 T5_msg_size;
241 u8 T6_reportid; 264 u8 T6_reportid;
242 u16 T6_address; 265 u16 T6_address;
266 u16 T7_address;
243 u8 T9_reportid_min; 267 u8 T9_reportid_min;
244 u8 T9_reportid_max; 268 u8 T9_reportid_max;
245 u8 T19_reportid; 269 u8 T19_reportid;
270 u16 T44_address;
246 271
247 /* for fw update in bootloader */ 272 /* for fw update in bootloader */
248 struct completion bl_completion; 273 struct completion bl_completion;
@@ -297,42 +322,10 @@ static bool mxt_object_readable(unsigned int type)
297 } 322 }
298} 323}
299 324
300static bool mxt_object_writable(unsigned int type) 325static void mxt_dump_message(struct mxt_data *data, u8 *message)
301{
302 switch (type) {
303 case MXT_GEN_COMMAND_T6:
304 case MXT_GEN_POWER_T7:
305 case MXT_GEN_ACQUIRE_T8:
306 case MXT_TOUCH_MULTI_T9:
307 case MXT_TOUCH_KEYARRAY_T15:
308 case MXT_TOUCH_PROXIMITY_T23:
309 case MXT_TOUCH_PROXKEY_T52:
310 case MXT_PROCI_GRIPFACE_T20:
311 case MXT_PROCG_NOISE_T22:
312 case MXT_PROCI_ONETOUCH_T24:
313 case MXT_PROCI_TWOTOUCH_T27:
314 case MXT_PROCI_GRIP_T40:
315 case MXT_PROCI_PALM_T41:
316 case MXT_PROCI_TOUCHSUPPRESSION_T42:
317 case MXT_PROCI_STYLUS_T47:
318 case MXT_PROCG_NOISESUPPRESSION_T48:
319 case MXT_SPT_COMMSCONFIG_T18:
320 case MXT_SPT_GPIOPWM_T19:
321 case MXT_SPT_SELFTEST_T25:
322 case MXT_SPT_CTECONFIG_T28:
323 case MXT_SPT_DIGITIZER_T43:
324 case MXT_SPT_CTECONFIG_T46:
325 return true;
326 default:
327 return false;
328 }
329}
330
331static void mxt_dump_message(struct device *dev,
332 struct mxt_message *message)
333{ 326{
334 dev_dbg(dev, "reportid: %u\tmessage: %*ph\n", 327 dev_dbg(&data->client->dev, "message: %*ph\n",
335 message->reportid, 7, message->message); 328 data->T5_msg_size, message);
336} 329}
337 330
338static int mxt_wait_for_completion(struct mxt_data *data, 331static int mxt_wait_for_completion(struct mxt_data *data,
@@ -401,7 +394,7 @@ static int mxt_bootloader_write(struct mxt_data *data,
401 return ret; 394 return ret;
402} 395}
403 396
404static int mxt_lookup_bootloader_address(struct mxt_data *data) 397static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
405{ 398{
406 u8 appmode = data->client->addr; 399 u8 appmode = data->client->addr;
407 u8 bootloader; 400 u8 bootloader;
@@ -409,6 +402,12 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data)
409 switch (appmode) { 402 switch (appmode) {
410 case 0x4a: 403 case 0x4a:
411 case 0x4b: 404 case 0x4b:
405 /* Chips after 1664S use different scheme */
406 if (retry || data->info.family_id >= 0xa2) {
407 bootloader = appmode - 0x24;
408 break;
409 }
410 /* Fall through for normal case */
412 case 0x4c: 411 case 0x4c:
413 case 0x4d: 412 case 0x4d:
414 case 0x5a: 413 case 0x5a:
@@ -426,6 +425,30 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data)
426 return 0; 425 return 0;
427} 426}
428 427
428static int mxt_probe_bootloader(struct mxt_data *data, bool retry)
429{
430 struct device *dev = &data->client->dev;
431 int ret;
432 u8 val;
433 bool crc_failure;
434
435 ret = mxt_lookup_bootloader_address(data, retry);
436 if (ret)
437 return ret;
438
439 ret = mxt_bootloader_read(data, &val, 1);
440 if (ret)
441 return ret;
442
443 /* Check app crc fail mode */
444 crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL;
445
446 dev_err(dev, "Detected bootloader, status:%02X%s\n",
447 val, crc_failure ? ", APP_CRC_FAIL" : "");
448
449 return 0;
450}
451
429static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val) 452static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
430{ 453{
431 struct device *dev = &data->client->dev; 454 struct device *dev = &data->client->dev;
@@ -447,14 +470,15 @@ static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
447 } 470 }
448} 471}
449 472
450static int mxt_check_bootloader(struct mxt_data *data, unsigned int state) 473static int mxt_check_bootloader(struct mxt_data *data, unsigned int state,
474 bool wait)
451{ 475{
452 struct device *dev = &data->client->dev; 476 struct device *dev = &data->client->dev;
453 u8 val; 477 u8 val;
454 int ret; 478 int ret;
455 479
456recheck: 480recheck:
457 if (state != MXT_WAITING_BOOTLOAD_CMD) { 481 if (wait) {
458 /* 482 /*
459 * In application update mode, the interrupt 483 * In application update mode, the interrupt
460 * line signals state transitions. We must wait for the 484 * line signals state transitions. We must wait for the
@@ -485,6 +509,7 @@ recheck:
485 switch (state) { 509 switch (state) {
486 case MXT_WAITING_BOOTLOAD_CMD: 510 case MXT_WAITING_BOOTLOAD_CMD:
487 case MXT_WAITING_FRAME_DATA: 511 case MXT_WAITING_FRAME_DATA:
512 case MXT_APP_CRC_FAIL:
488 val &= ~MXT_BOOT_STATUS_MASK; 513 val &= ~MXT_BOOT_STATUS_MASK;
489 break; 514 break;
490 case MXT_FRAME_CRC_PASS: 515 case MXT_FRAME_CRC_PASS:
@@ -508,13 +533,18 @@ recheck:
508 return 0; 533 return 0;
509} 534}
510 535
511static int mxt_unlock_bootloader(struct mxt_data *data) 536static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock)
512{ 537{
513 int ret; 538 int ret;
514 u8 buf[2]; 539 u8 buf[2];
515 540
516 buf[0] = MXT_UNLOCK_CMD_LSB; 541 if (unlock) {
517 buf[1] = MXT_UNLOCK_CMD_MSB; 542 buf[0] = MXT_UNLOCK_CMD_LSB;
543 buf[1] = MXT_UNLOCK_CMD_MSB;
544 } else {
545 buf[0] = 0x01;
546 buf[1] = 0x01;
547 }
518 548
519 ret = mxt_bootloader_write(data, buf, 2); 549 ret = mxt_bootloader_write(data, buf, 2);
520 if (ret) 550 if (ret)
@@ -605,40 +635,44 @@ mxt_get_object(struct mxt_data *data, u8 type)
605 return object; 635 return object;
606 } 636 }
607 637
608 dev_err(&data->client->dev, "Invalid object type T%u\n", type); 638 dev_warn(&data->client->dev, "Invalid object type T%u\n", type);
609 return NULL; 639 return NULL;
610} 640}
611 641
612static int mxt_read_message(struct mxt_data *data, 642static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg)
613 struct mxt_message *message)
614{ 643{
615 struct mxt_object *object; 644 struct device *dev = &data->client->dev;
616 u16 reg; 645 u8 status = msg[1];
617 646 u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16);
618 object = mxt_get_object(data, MXT_GEN_MESSAGE_T5);
619 if (!object)
620 return -EINVAL;
621
622 reg = object->start_address;
623 return __mxt_read_reg(data->client, reg,
624 sizeof(struct mxt_message), message);
625}
626 647
627static int mxt_write_object(struct mxt_data *data, 648 complete(&data->crc_completion);
628 u8 type, u8 offset, u8 val)
629{
630 struct mxt_object *object;
631 u16 reg;
632 649
633 object = mxt_get_object(data, type); 650 if (crc != data->config_crc) {
634 if (!object || offset >= mxt_obj_size(object)) 651 data->config_crc = crc;
635 return -EINVAL; 652 dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc);
653 }
636 654
637 reg = object->start_address; 655 /* Detect reset */
638 return mxt_write_reg(data->client, reg + offset, val); 656 if (status & MXT_T6_STATUS_RESET)
657 complete(&data->reset_completion);
658
659 /* Output debug if status has changed */
660 if (status != data->t6_status)
661 dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n",
662 status,
663 status == 0 ? " OK" : "",
664 status & MXT_T6_STATUS_RESET ? " RESET" : "",
665 status & MXT_T6_STATUS_OFL ? " OFL" : "",
666 status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "",
667 status & MXT_T6_STATUS_CAL ? " CAL" : "",
668 status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "",
669 status & MXT_T6_STATUS_COMSERR ? " COMSERR" : "");
670
671 /* Save current status */
672 data->t6_status = status;
639} 673}
640 674
641static void mxt_input_button(struct mxt_data *data, struct mxt_message *message) 675static void mxt_input_button(struct mxt_data *data, u8 *message)
642{ 676{
643 struct input_dev *input = data->input_dev; 677 struct input_dev *input = data->input_dev;
644 const struct mxt_platform_data *pdata = data->pdata; 678 const struct mxt_platform_data *pdata = data->pdata;
@@ -649,30 +683,33 @@ static void mxt_input_button(struct mxt_data *data, struct mxt_message *message)
649 for (i = 0; i < pdata->t19_num_keys; i++) { 683 for (i = 0; i < pdata->t19_num_keys; i++) {
650 if (pdata->t19_keymap[i] == KEY_RESERVED) 684 if (pdata->t19_keymap[i] == KEY_RESERVED)
651 continue; 685 continue;
652 button = !(message->message[0] & (1 << i)); 686 button = !(message[1] & (1 << i));
653 input_report_key(input, pdata->t19_keymap[i], button); 687 input_report_key(input, pdata->t19_keymap[i], button);
654 } 688 }
655} 689}
656 690
657static void mxt_input_sync(struct input_dev *input_dev) 691static void mxt_input_sync(struct mxt_data *data)
658{ 692{
659 input_mt_report_pointer_emulation(input_dev, false); 693 input_mt_report_pointer_emulation(data->input_dev,
660 input_sync(input_dev); 694 data->pdata->t19_num_keys);
695 input_sync(data->input_dev);
661} 696}
662 697
663static void mxt_input_touchevent(struct mxt_data *data, 698static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
664 struct mxt_message *message, int id)
665{ 699{
666 struct device *dev = &data->client->dev; 700 struct device *dev = &data->client->dev;
667 u8 status = message->message[0];
668 struct input_dev *input_dev = data->input_dev; 701 struct input_dev *input_dev = data->input_dev;
702 int id;
703 u8 status;
669 int x; 704 int x;
670 int y; 705 int y;
671 int area; 706 int area;
672 int amplitude; 707 int amplitude;
673 708
674 x = (message->message[1] << 4) | ((message->message[3] >> 4) & 0xf); 709 id = message[0] - data->T9_reportid_min;
675 y = (message->message[2] << 4) | ((message->message[3] & 0xf)); 710 status = message[1];
711 x = (message[2] << 4) | ((message[4] >> 4) & 0xf);
712 y = (message[3] << 4) | ((message[4] & 0xf));
676 713
677 /* Handle 10/12 bit switching */ 714 /* Handle 10/12 bit switching */
678 if (data->max_x < 1024) 715 if (data->max_x < 1024)
@@ -680,8 +717,8 @@ static void mxt_input_touchevent(struct mxt_data *data,
680 if (data->max_y < 1024) 717 if (data->max_y < 1024)
681 y >>= 2; 718 y >>= 2;
682 719
683 area = message->message[4]; 720 area = message[5];
684 amplitude = message->message[5]; 721 amplitude = message[6];
685 722
686 dev_dbg(dev, 723 dev_dbg(dev,
687 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n", 724 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
@@ -707,7 +744,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
707 if (status & MXT_T9_RELEASE) { 744 if (status & MXT_T9_RELEASE) {
708 input_mt_report_slot_state(input_dev, 745 input_mt_report_slot_state(input_dev,
709 MT_TOOL_FINGER, 0); 746 MT_TOOL_FINGER, 0);
710 mxt_input_sync(input_dev); 747 mxt_input_sync(data);
711 } 748 }
712 749
713 /* Touch active */ 750 /* Touch active */
@@ -720,64 +757,179 @@ static void mxt_input_touchevent(struct mxt_data *data,
720 /* Touch no longer active, close out slot */ 757 /* Touch no longer active, close out slot */
721 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0); 758 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
722 } 759 }
760
761 data->update_input = true;
762}
763
764static int mxt_proc_message(struct mxt_data *data, u8 *message)
765{
766 u8 report_id = message[0];
767
768 if (report_id == MXT_RPTID_NOMSG)
769 return 0;
770
771 if (report_id == data->T6_reportid) {
772 mxt_proc_t6_messages(data, message);
773 } else if (!data->input_dev) {
774 /*
775 * Do not report events if input device
776 * is not yet registered.
777 */
778 mxt_dump_message(data, message);
779 } else if (report_id >= data->T9_reportid_min
780 && report_id <= data->T9_reportid_max) {
781 mxt_proc_t9_message(data, message);
782 } else if (report_id == data->T19_reportid) {
783 mxt_input_button(data, message);
784 data->update_input = true;
785 } else {
786 mxt_dump_message(data, message);
787 }
788
789 return 1;
723} 790}
724 791
725static u16 mxt_extract_T6_csum(const u8 *csum) 792static int mxt_read_and_process_messages(struct mxt_data *data, u8 count)
726{ 793{
727 return csum[0] | (csum[1] << 8) | (csum[2] << 16); 794 struct device *dev = &data->client->dev;
795 int ret;
796 int i;
797 u8 num_valid = 0;
798
799 /* Safety check for msg_buf */
800 if (count > data->max_reportid)
801 return -EINVAL;
802
803 /* Process remaining messages if necessary */
804 ret = __mxt_read_reg(data->client, data->T5_address,
805 data->T5_msg_size * count, data->msg_buf);
806 if (ret) {
807 dev_err(dev, "Failed to read %u messages (%d)\n", count, ret);
808 return ret;
809 }
810
811 for (i = 0; i < count; i++) {
812 ret = mxt_proc_message(data,
813 data->msg_buf + data->T5_msg_size * i);
814
815 if (ret == 1)
816 num_valid++;
817 }
818
819 /* return number of messages read */
820 return num_valid;
728} 821}
729 822
730static bool mxt_is_T9_message(struct mxt_data *data, struct mxt_message *msg) 823static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
731{ 824{
732 u8 id = msg->reportid; 825 struct device *dev = &data->client->dev;
733 return (id >= data->T9_reportid_min && id <= data->T9_reportid_max); 826 int ret;
827 u8 count, num_left;
828
829 /* Read T44 and T5 together */
830 ret = __mxt_read_reg(data->client, data->T44_address,
831 data->T5_msg_size + 1, data->msg_buf);
832 if (ret) {
833 dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret);
834 return IRQ_NONE;
835 }
836
837 count = data->msg_buf[0];
838
839 if (count == 0) {
840 dev_warn(dev, "Interrupt triggered but zero messages\n");
841 return IRQ_NONE;
842 } else if (count > data->max_reportid) {
843 dev_err(dev, "T44 count %d exceeded max report id\n", count);
844 count = data->max_reportid;
845 }
846
847 /* Process first message */
848 ret = mxt_proc_message(data, data->msg_buf + 1);
849 if (ret < 0) {
850 dev_warn(dev, "Unexpected invalid message\n");
851 return IRQ_NONE;
852 }
853
854 num_left = count - 1;
855
856 /* Process remaining messages if necessary */
857 if (num_left) {
858 ret = mxt_read_and_process_messages(data, num_left);
859 if (ret < 0)
860 goto end;
861 else if (ret != num_left)
862 dev_warn(dev, "Unexpected invalid message\n");
863 }
864
865end:
866 if (data->update_input) {
867 mxt_input_sync(data);
868 data->update_input = false;
869 }
870
871 return IRQ_HANDLED;
734} 872}
735 873
736static irqreturn_t mxt_process_messages_until_invalid(struct mxt_data *data) 874static int mxt_process_messages_until_invalid(struct mxt_data *data)
737{ 875{
738 struct mxt_message message;
739 const u8 *payload = &message.message[0];
740 struct device *dev = &data->client->dev; 876 struct device *dev = &data->client->dev;
741 u8 reportid; 877 int count, read;
742 bool update_input = false; 878 u8 tries = 2;
743 u32 crc;
744 879
880 count = data->max_reportid;
881
882 /* Read messages until we force an invalid */
745 do { 883 do {
746 if (mxt_read_message(data, &message)) { 884 read = mxt_read_and_process_messages(data, count);
747 dev_err(dev, "Failed to read message\n"); 885 if (read < count)
748 return IRQ_NONE; 886 return 0;
749 } 887 } while (--tries);
750 888
751 reportid = message.reportid; 889 if (data->update_input) {
890 mxt_input_sync(data);
891 data->update_input = false;
892 }
752 893
753 if (reportid == data->T6_reportid) { 894 dev_err(dev, "CHG pin isn't cleared\n");
754 u8 status = payload[0]; 895 return -EBUSY;
896}
755 897
756 crc = mxt_extract_T6_csum(&payload[1]); 898static irqreturn_t mxt_process_messages(struct mxt_data *data)
757 if (crc != data->config_crc) { 899{
758 data->config_crc = crc; 900 int total_handled, num_handled;
759 complete(&data->crc_completion); 901 u8 count = data->last_message_count;
760 }
761 902
762 dev_dbg(dev, "Status: %02x Config Checksum: %06x\n", 903 if (count < 1 || count > data->max_reportid)
763 status, data->config_crc); 904 count = 1;
764
765 if (status & MXT_T6_STATUS_RESET)
766 complete(&data->reset_completion);
767 } else if (mxt_is_T9_message(data, &message)) {
768 int id = reportid - data->T9_reportid_min;
769 mxt_input_touchevent(data, &message, id);
770 update_input = true;
771 } else if (message.reportid == data->T19_reportid) {
772 mxt_input_button(data, &message);
773 update_input = true;
774 } else {
775 mxt_dump_message(dev, &message);
776 }
777 } while (reportid != 0xff);
778 905
779 if (update_input) 906 /* include final invalid message */
780 mxt_input_sync(data->input_dev); 907 total_handled = mxt_read_and_process_messages(data, count + 1);
908 if (total_handled < 0)
909 return IRQ_NONE;
910 /* if there were invalid messages, then we are done */
911 else if (total_handled <= count)
912 goto update_count;
913
914 /* keep reading two msgs until one is invalid or reportid limit */
915 do {
916 num_handled = mxt_read_and_process_messages(data, 2);
917 if (num_handled < 0)
918 return IRQ_NONE;
919
920 total_handled += num_handled;
921
922 if (num_handled < 2)
923 break;
924 } while (total_handled < data->num_touchids);
925
926update_count:
927 data->last_message_count = total_handled;
928
929 if (data->update_input) {
930 mxt_input_sync(data);
931 data->update_input = false;
932 }
781 933
782 return IRQ_HANDLED; 934 return IRQ_HANDLED;
783} 935}
@@ -792,7 +944,14 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id)
792 return IRQ_HANDLED; 944 return IRQ_HANDLED;
793 } 945 }
794 946
795 return mxt_process_messages_until_invalid(data); 947 if (!data->object_table)
948 return IRQ_HANDLED;
949
950 if (data->T44_address) {
951 return mxt_process_messages_t44(data);
952 } else {
953 return mxt_process_messages(data);
954 }
796} 955}
797 956
798static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset, 957static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
@@ -866,78 +1025,314 @@ static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value)
866 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT); 1025 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT);
867} 1026}
868 1027
869static int mxt_check_reg_init(struct mxt_data *data) 1028static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte)
1029{
1030 static const unsigned int crcpoly = 0x80001B;
1031 u32 result;
1032 u32 data_word;
1033
1034 data_word = (secondbyte << 8) | firstbyte;
1035 result = ((*crc << 1) ^ data_word);
1036
1037 if (result & 0x1000000)
1038 result ^= crcpoly;
1039
1040 *crc = result;
1041}
1042
1043static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off)
1044{
1045 u32 crc = 0;
1046 u8 *ptr = base + start_off;
1047 u8 *last_val = base + end_off - 1;
1048
1049 if (end_off < start_off)
1050 return -EINVAL;
1051
1052 while (ptr < last_val) {
1053 mxt_calc_crc24(&crc, *ptr, *(ptr + 1));
1054 ptr += 2;
1055 }
1056
1057 /* if len is odd, fill the last byte with 0 */
1058 if (ptr == last_val)
1059 mxt_calc_crc24(&crc, *ptr, 0);
1060
1061 /* Mask to 24-bit */
1062 crc &= 0x00FFFFFF;
1063
1064 return crc;
1065}
1066
1067/*
1068 * mxt_update_cfg - download configuration to chip
1069 *
1070 * Atmel Raw Config File Format
1071 *
1072 * The first four lines of the raw config file contain:
1073 * 1) Version
1074 * 2) Chip ID Information (first 7 bytes of device memory)
1075 * 3) Chip Information Block 24-bit CRC Checksum
1076 * 4) Chip Configuration 24-bit CRC Checksum
1077 *
1078 * The rest of the file consists of one line per object instance:
1079 * <TYPE> <INSTANCE> <SIZE> <CONTENTS>
1080 *
1081 * <TYPE> - 2-byte object type as hex
1082 * <INSTANCE> - 2-byte object instance number as hex
1083 * <SIZE> - 2-byte object size as hex
1084 * <CONTENTS> - array of <SIZE> 1-byte hex values
1085 */
1086static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
870{ 1087{
871 const struct mxt_platform_data *pdata = data->pdata;
872 struct mxt_object *object;
873 struct device *dev = &data->client->dev; 1088 struct device *dev = &data->client->dev;
874 int index = 0; 1089 struct mxt_info cfg_info;
875 int i, size; 1090 struct mxt_object *object;
876 int ret; 1091 int ret;
1092 int offset;
1093 int data_pos;
1094 int byte_offset;
1095 int i;
1096 int cfg_start_ofs;
1097 u32 info_crc, config_crc, calculated_crc;
1098 u8 *config_mem;
1099 size_t config_mem_size;
1100 unsigned int type, instance, size;
1101 u8 val;
1102 u16 reg;
877 1103
878 if (!pdata->config) { 1104 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1);
879 dev_dbg(dev, "No cfg data defined, skipping reg init\n"); 1105
880 return 0; 1106 if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) {
1107 dev_err(dev, "Unrecognised config file\n");
1108 ret = -EINVAL;
1109 goto release;
881 } 1110 }
882 1111
883 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1); 1112 data_pos = strlen(MXT_CFG_MAGIC);
1113
1114 /* Load information block and check */
1115 for (i = 0; i < sizeof(struct mxt_info); i++) {
1116 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1117 (unsigned char *)&cfg_info + i,
1118 &offset);
1119 if (ret != 1) {
1120 dev_err(dev, "Bad format\n");
1121 ret = -EINVAL;
1122 goto release;
1123 }
884 1124
885 if (data->config_crc == pdata->config_crc) { 1125 data_pos += offset;
886 dev_info(dev, "Config CRC 0x%06X: OK\n", data->config_crc);
887 return 0;
888 } 1126 }
889 1127
890 dev_info(dev, "Config CRC 0x%06X: does not match 0x%06X\n", 1128 if (cfg_info.family_id != data->info.family_id) {
891 data->config_crc, pdata->config_crc); 1129 dev_err(dev, "Family ID mismatch!\n");
1130 ret = -EINVAL;
1131 goto release;
1132 }
892 1133
893 for (i = 0; i < data->info.object_num; i++) { 1134 if (cfg_info.variant_id != data->info.variant_id) {
894 object = data->object_table + i; 1135 dev_err(dev, "Variant ID mismatch!\n");
1136 ret = -EINVAL;
1137 goto release;
1138 }
1139
1140 /* Read CRCs */
1141 ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset);
1142 if (ret != 1) {
1143 dev_err(dev, "Bad format: failed to parse Info CRC\n");
1144 ret = -EINVAL;
1145 goto release;
1146 }
1147 data_pos += offset;
895 1148
896 if (!mxt_object_writable(object->type)) 1149 ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset);
1150 if (ret != 1) {
1151 dev_err(dev, "Bad format: failed to parse Config CRC\n");
1152 ret = -EINVAL;
1153 goto release;
1154 }
1155 data_pos += offset;
1156
1157 /*
1158 * The Info Block CRC is calculated over mxt_info and the object
1159 * table. If it does not match then we are trying to load the
1160 * configuration from a different chip or firmware version, so
1161 * the configuration CRC is invalid anyway.
1162 */
1163 if (info_crc == data->info_crc) {
1164 if (config_crc == 0 || data->config_crc == 0) {
1165 dev_info(dev, "CRC zero, attempting to apply config\n");
1166 } else if (config_crc == data->config_crc) {
1167 dev_dbg(dev, "Config CRC 0x%06X: OK\n",
1168 data->config_crc);
1169 ret = 0;
1170 goto release;
1171 } else {
1172 dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
1173 data->config_crc, config_crc);
1174 }
1175 } else {
1176 dev_warn(dev,
1177 "Warning: Info CRC error - device=0x%06X file=0x%06X\n",
1178 data->info_crc, info_crc);
1179 }
1180
1181 /* Malloc memory to store configuration */
1182 cfg_start_ofs = MXT_OBJECT_START +
1183 data->info.object_num * sizeof(struct mxt_object) +
1184 MXT_INFO_CHECKSUM_SIZE;
1185 config_mem_size = data->mem_size - cfg_start_ofs;
1186 config_mem = kzalloc(config_mem_size, GFP_KERNEL);
1187 if (!config_mem) {
1188 dev_err(dev, "Failed to allocate memory\n");
1189 ret = -ENOMEM;
1190 goto release;
1191 }
1192
1193 while (data_pos < cfg->size) {
1194 /* Read type, instance, length */
1195 ret = sscanf(cfg->data + data_pos, "%x %x %x%n",
1196 &type, &instance, &size, &offset);
1197 if (ret == 0) {
1198 /* EOF */
1199 break;
1200 } else if (ret != 3) {
1201 dev_err(dev, "Bad format: failed to parse object\n");
1202 ret = -EINVAL;
1203 goto release_mem;
1204 }
1205 data_pos += offset;
1206
1207 object = mxt_get_object(data, type);
1208 if (!object) {
1209 /* Skip object */
1210 for (i = 0; i < size; i++) {
1211 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1212 &val,
1213 &offset);
1214 data_pos += offset;
1215 }
897 continue; 1216 continue;
1217 }
898 1218
899 size = mxt_obj_size(object) * mxt_obj_instances(object); 1219 if (size > mxt_obj_size(object)) {
900 if (index + size > pdata->config_length) { 1220 /*
901 dev_err(dev, "Not enough config data!\n"); 1221 * Either we are in fallback mode due to wrong
902 return -EINVAL; 1222 * config or config from a later fw version,
1223 * or the file is corrupt or hand-edited.
1224 */
1225 dev_warn(dev, "Discarding %zu byte(s) in T%u\n",
1226 size - mxt_obj_size(object), type);
1227 } else if (mxt_obj_size(object) > size) {
1228 /*
1229 * If firmware is upgraded, new bytes may be added to
1230 * end of objects. It is generally forward compatible
1231 * to zero these bytes - previous behaviour will be
1232 * retained. However this does invalidate the CRC and
1233 * will force fallback mode until the configuration is
1234 * updated. We warn here but do nothing else - the
1235 * malloc has zeroed the entire configuration.
1236 */
1237 dev_warn(dev, "Zeroing %zu byte(s) in T%d\n",
1238 mxt_obj_size(object) - size, type);
903 } 1239 }
904 1240
905 ret = __mxt_write_reg(data->client, object->start_address, 1241 if (instance >= mxt_obj_instances(object)) {
906 size, &pdata->config[index]); 1242 dev_err(dev, "Object instances exceeded!\n");
907 if (ret) 1243 ret = -EINVAL;
908 return ret; 1244 goto release_mem;
909 index += size; 1245 }
1246
1247 reg = object->start_address + mxt_obj_size(object) * instance;
1248
1249 for (i = 0; i < size; i++) {
1250 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1251 &val,
1252 &offset);
1253 if (ret != 1) {
1254 dev_err(dev, "Bad format in T%d\n", type);
1255 ret = -EINVAL;
1256 goto release_mem;
1257 }
1258 data_pos += offset;
1259
1260 if (i > mxt_obj_size(object))
1261 continue;
1262
1263 byte_offset = reg + i - cfg_start_ofs;
1264
1265 if ((byte_offset >= 0)
1266 && (byte_offset <= config_mem_size)) {
1267 *(config_mem + byte_offset) = val;
1268 } else {
1269 dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n",
1270 reg, object->type, byte_offset);
1271 ret = -EINVAL;
1272 goto release_mem;
1273 }
1274 }
1275 }
1276
1277 /* Calculate crc of the received configs (not the raw config file) */
1278 if (data->T7_address < cfg_start_ofs) {
1279 dev_err(dev, "Bad T7 address, T7addr = %x, config offset %x\n",
1280 data->T7_address, cfg_start_ofs);
1281 ret = 0;
1282 goto release_mem;
1283 }
1284
1285 calculated_crc = mxt_calculate_crc(config_mem,
1286 data->T7_address - cfg_start_ofs,
1287 config_mem_size);
1288
1289 if (config_crc > 0 && (config_crc != calculated_crc))
1290 dev_warn(dev, "Config CRC error, calculated=%06X, file=%06X\n",
1291 calculated_crc, config_crc);
1292
1293 /* Write configuration as blocks */
1294 byte_offset = 0;
1295 while (byte_offset < config_mem_size) {
1296 size = config_mem_size - byte_offset;
1297
1298 if (size > MXT_MAX_BLOCK_WRITE)
1299 size = MXT_MAX_BLOCK_WRITE;
1300
1301 ret = __mxt_write_reg(data->client,
1302 cfg_start_ofs + byte_offset,
1303 size, config_mem + byte_offset);
1304 if (ret != 0) {
1305 dev_err(dev, "Config write error, ret=%d\n", ret);
1306 goto release_mem;
1307 }
1308
1309 byte_offset += size;
910 } 1310 }
911 1311
912 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE); 1312 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE);
913 1313
914 ret = mxt_soft_reset(data); 1314 ret = mxt_soft_reset(data);
915 if (ret) 1315 if (ret)
916 return ret; 1316 goto release_mem;
917 1317
918 dev_info(dev, "Config successfully updated\n"); 1318 dev_info(dev, "Config successfully updated\n");
919 1319
920 return 0; 1320release_mem:
1321 kfree(config_mem);
1322release:
1323 release_firmware(cfg);
1324 return ret;
921} 1325}
922 1326
923static int mxt_make_highchg(struct mxt_data *data) 1327static int mxt_acquire_irq(struct mxt_data *data)
924{ 1328{
925 struct device *dev = &data->client->dev;
926 struct mxt_message message;
927 int count = 10;
928 int error; 1329 int error;
929 1330
930 /* Read dummy message to make high CHG pin */ 1331 enable_irq(data->irq);
931 do {
932 error = mxt_read_message(data, &message);
933 if (error)
934 return error;
935 } while (message.reportid != 0xff && --count);
936 1332
937 if (!count) { 1333 error = mxt_process_messages_until_invalid(data);
938 dev_err(dev, "CHG pin isn't cleared\n"); 1334 if (error)
939 return -EBUSY; 1335 return error;
940 }
941 1336
942 return 0; 1337 return 0;
943} 1338}
@@ -956,24 +1351,55 @@ static int mxt_get_info(struct mxt_data *data)
956 return 0; 1351 return 0;
957} 1352}
958 1353
1354static void mxt_free_object_table(struct mxt_data *data)
1355{
1356 input_unregister_device(data->input_dev);
1357 data->input_dev = NULL;
1358
1359 kfree(data->object_table);
1360 data->object_table = NULL;
1361 kfree(data->msg_buf);
1362 data->msg_buf = NULL;
1363 data->T5_address = 0;
1364 data->T5_msg_size = 0;
1365 data->T6_reportid = 0;
1366 data->T7_address = 0;
1367 data->T9_reportid_min = 0;
1368 data->T9_reportid_max = 0;
1369 data->T19_reportid = 0;
1370 data->T44_address = 0;
1371 data->max_reportid = 0;
1372}
1373
959static int mxt_get_object_table(struct mxt_data *data) 1374static int mxt_get_object_table(struct mxt_data *data)
960{ 1375{
961 struct i2c_client *client = data->client; 1376 struct i2c_client *client = data->client;
962 size_t table_size; 1377 size_t table_size;
1378 struct mxt_object *object_table;
963 int error; 1379 int error;
964 int i; 1380 int i;
965 u8 reportid; 1381 u8 reportid;
1382 u16 end_address;
966 1383
967 table_size = data->info.object_num * sizeof(struct mxt_object); 1384 table_size = data->info.object_num * sizeof(struct mxt_object);
1385 object_table = kzalloc(table_size, GFP_KERNEL);
1386 if (!object_table) {
1387 dev_err(&data->client->dev, "Failed to allocate memory\n");
1388 return -ENOMEM;
1389 }
1390
968 error = __mxt_read_reg(client, MXT_OBJECT_START, table_size, 1391 error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
969 data->object_table); 1392 object_table);
970 if (error) 1393 if (error) {
1394 kfree(object_table);
971 return error; 1395 return error;
1396 }
972 1397
973 /* Valid Report IDs start counting from 1 */ 1398 /* Valid Report IDs start counting from 1 */
974 reportid = 1; 1399 reportid = 1;
1400 data->mem_size = 0;
975 for (i = 0; i < data->info.object_num; i++) { 1401 for (i = 0; i < data->info.object_num; i++) {
976 struct mxt_object *object = data->object_table + i; 1402 struct mxt_object *object = object_table + i;
977 u8 min_id, max_id; 1403 u8 min_id, max_id;
978 1404
979 le16_to_cpus(&object->start_address); 1405 le16_to_cpus(&object->start_address);
@@ -995,31 +1421,71 @@ static int mxt_get_object_table(struct mxt_data *data)
995 min_id, max_id); 1421 min_id, max_id);
996 1422
997 switch (object->type) { 1423 switch (object->type) {
1424 case MXT_GEN_MESSAGE_T5:
1425 if (data->info.family_id == 0x80) {
1426 /*
1427 * On mXT224 read and discard unused CRC byte
1428 * otherwise DMA reads are misaligned
1429 */
1430 data->T5_msg_size = mxt_obj_size(object);
1431 } else {
1432 /* CRC not enabled, so skip last byte */
1433 data->T5_msg_size = mxt_obj_size(object) - 1;
1434 }
1435 data->T5_address = object->start_address;
998 case MXT_GEN_COMMAND_T6: 1436 case MXT_GEN_COMMAND_T6:
999 data->T6_reportid = min_id; 1437 data->T6_reportid = min_id;
1000 data->T6_address = object->start_address; 1438 data->T6_address = object->start_address;
1001 break; 1439 break;
1440 case MXT_GEN_POWER_T7:
1441 data->T7_address = object->start_address;
1442 break;
1002 case MXT_TOUCH_MULTI_T9: 1443 case MXT_TOUCH_MULTI_T9:
1003 data->T9_reportid_min = min_id; 1444 data->T9_reportid_min = min_id;
1004 data->T9_reportid_max = max_id; 1445 data->T9_reportid_max = max_id;
1446 data->num_touchids = object->num_report_ids
1447 * mxt_obj_instances(object);
1448 break;
1449 case MXT_SPT_MESSAGECOUNT_T44:
1450 data->T44_address = object->start_address;
1005 break; 1451 break;
1006 case MXT_SPT_GPIOPWM_T19: 1452 case MXT_SPT_GPIOPWM_T19:
1007 data->T19_reportid = min_id; 1453 data->T19_reportid = min_id;
1008 break; 1454 break;
1009 } 1455 }
1456
1457 end_address = object->start_address
1458 + mxt_obj_size(object) * mxt_obj_instances(object) - 1;
1459
1460 if (end_address >= data->mem_size)
1461 data->mem_size = end_address + 1;
1462 }
1463
1464 /* Store maximum reportid */
1465 data->max_reportid = reportid;
1466
1467 /* If T44 exists, T5 position has to be directly after */
1468 if (data->T44_address && (data->T5_address != data->T44_address + 1)) {
1469 dev_err(&client->dev, "Invalid T44 position\n");
1470 error = -EINVAL;
1471 goto free_object_table;
1472 }
1473
1474 data->msg_buf = kcalloc(data->max_reportid,
1475 data->T5_msg_size, GFP_KERNEL);
1476 if (!data->msg_buf) {
1477 dev_err(&client->dev, "Failed to allocate message buffer\n");
1478 error = -ENOMEM;
1479 goto free_object_table;
1010 } 1480 }
1011 1481
1482 data->object_table = object_table;
1483
1012 return 0; 1484 return 0;
1013}
1014 1485
1015static void mxt_free_object_table(struct mxt_data *data) 1486free_object_table:
1016{ 1487 mxt_free_object_table(data);
1017 kfree(data->object_table); 1488 return error;
1018 data->object_table = NULL;
1019 data->T6_reportid = 0;
1020 data->T9_reportid_min = 0;
1021 data->T9_reportid_max = 0;
1022 data->T19_reportid = 0;
1023} 1489}
1024 1490
1025static int mxt_read_t9_resolution(struct mxt_data *data) 1491static int mxt_read_t9_resolution(struct mxt_data *data)
@@ -1070,55 +1536,255 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
1070 return 0; 1536 return 0;
1071} 1537}
1072 1538
1539static int mxt_input_open(struct input_dev *dev);
1540static void mxt_input_close(struct input_dev *dev);
1541
1542static int mxt_initialize_t9_input_device(struct mxt_data *data)
1543{
1544 struct device *dev = &data->client->dev;
1545 const struct mxt_platform_data *pdata = data->pdata;
1546 struct input_dev *input_dev;
1547 int error;
1548 unsigned int num_mt_slots;
1549 unsigned int mt_flags = 0;
1550 int i;
1551
1552 error = mxt_read_t9_resolution(data);
1553 if (error)
1554 dev_warn(dev, "Failed to initialize T9 resolution\n");
1555
1556 input_dev = input_allocate_device();
1557 if (!input_dev) {
1558 dev_err(dev, "Failed to allocate memory\n");
1559 return -ENOMEM;
1560 }
1561
1562 input_dev->name = "Atmel maXTouch Touchscreen";
1563 input_dev->phys = data->phys;
1564 input_dev->id.bustype = BUS_I2C;
1565 input_dev->dev.parent = dev;
1566 input_dev->open = mxt_input_open;
1567 input_dev->close = mxt_input_close;
1568
1569 __set_bit(EV_ABS, input_dev->evbit);
1570 __set_bit(EV_KEY, input_dev->evbit);
1571 __set_bit(BTN_TOUCH, input_dev->keybit);
1572
1573 if (pdata->t19_num_keys) {
1574 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1575
1576 for (i = 0; i < pdata->t19_num_keys; i++)
1577 if (pdata->t19_keymap[i] != KEY_RESERVED)
1578 input_set_capability(input_dev, EV_KEY,
1579 pdata->t19_keymap[i]);
1580
1581 mt_flags |= INPUT_MT_POINTER;
1582
1583 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1584 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1585 input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1586 MXT_PIXELS_PER_MM);
1587 input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1588 MXT_PIXELS_PER_MM);
1589
1590 input_dev->name = "Atmel maXTouch Touchpad";
1591 }
1592
1593 /* For single touch */
1594 input_set_abs_params(input_dev, ABS_X,
1595 0, data->max_x, 0, 0);
1596 input_set_abs_params(input_dev, ABS_Y,
1597 0, data->max_y, 0, 0);
1598 input_set_abs_params(input_dev, ABS_PRESSURE,
1599 0, 255, 0, 0);
1600
1601 /* For multi touch */
1602 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1603 error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
1604 if (error) {
1605 dev_err(dev, "Error %d initialising slots\n", error);
1606 goto err_free_mem;
1607 }
1608
1609 input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1610 0, MXT_MAX_AREA, 0, 0);
1611 input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1612 0, data->max_x, 0, 0);
1613 input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1614 0, data->max_y, 0, 0);
1615 input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1616 0, 255, 0, 0);
1617
1618 input_set_drvdata(input_dev, data);
1619
1620 error = input_register_device(input_dev);
1621 if (error) {
1622 dev_err(dev, "Error %d registering input device\n", error);
1623 goto err_free_mem;
1624 }
1625
1626 data->input_dev = input_dev;
1627
1628 return 0;
1629
1630err_free_mem:
1631 input_free_device(input_dev);
1632 return error;
1633}
1634
1635static int mxt_configure_objects(struct mxt_data *data,
1636 const struct firmware *cfg);
1637
1638static void mxt_config_cb(const struct firmware *cfg, void *ctx)
1639{
1640 mxt_configure_objects(ctx, cfg);
1641}
1642
1073static int mxt_initialize(struct mxt_data *data) 1643static int mxt_initialize(struct mxt_data *data)
1074{ 1644{
1075 struct i2c_client *client = data->client; 1645 struct i2c_client *client = data->client;
1076 struct mxt_info *info = &data->info;
1077 int error; 1646 int error;
1647 bool alt_bootloader_addr = false;
1648 bool retry = false;
1078 1649
1650retry_info:
1079 error = mxt_get_info(data); 1651 error = mxt_get_info(data);
1080 if (error) 1652 if (error) {
1081 return error; 1653retry_bootloader:
1654 error = mxt_probe_bootloader(data, alt_bootloader_addr);
1655 if (error) {
1656 if (alt_bootloader_addr) {
1657 /* Chip is not in appmode or bootloader mode */
1658 return error;
1659 }
1082 1660
1083 data->object_table = kcalloc(info->object_num, 1661 dev_info(&client->dev, "Trying alternate bootloader address\n");
1084 sizeof(struct mxt_object), 1662 alt_bootloader_addr = true;
1085 GFP_KERNEL); 1663 goto retry_bootloader;
1086 if (!data->object_table) { 1664 } else {
1087 dev_err(&client->dev, "Failed to allocate memory\n"); 1665 if (retry) {
1088 return -ENOMEM; 1666 dev_err(&client->dev, "Could not recover from bootloader mode\n");
1667 /*
1668 * We can reflash from this state, so do not
1669 * abort init
1670 */
1671 data->in_bootloader = true;
1672 return 0;
1673 }
1674
1675 /* Attempt to exit bootloader into app mode */
1676 mxt_send_bootloader_cmd(data, false);
1677 msleep(MXT_FW_RESET_TIME);
1678 retry = true;
1679 goto retry_info;
1680 }
1089 } 1681 }
1090 1682
1091 /* Get object table information */ 1683 /* Get object table information */
1092 error = mxt_get_object_table(data); 1684 error = mxt_get_object_table(data);
1093 if (error) { 1685 if (error) {
1094 dev_err(&client->dev, "Error %d reading object table\n", error); 1686 dev_err(&client->dev, "Error %d reading object table\n", error);
1095 goto err_free_object_table; 1687 return error;
1096 } 1688 }
1097 1689
1098 /* Check register init values */ 1690 mxt_acquire_irq(data);
1099 error = mxt_check_reg_init(data); 1691 if (error)
1100 if (error) {
1101 dev_err(&client->dev, "Error %d initializing configuration\n",
1102 error);
1103 goto err_free_object_table; 1692 goto err_free_object_table;
1693
1694 request_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME,
1695 &data->client->dev, GFP_KERNEL, data,
1696 mxt_config_cb);
1697
1698 return 0;
1699
1700err_free_object_table:
1701 mxt_free_object_table(data);
1702 return error;
1703}
1704
1705static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep)
1706{
1707 struct device *dev = &data->client->dev;
1708 int error;
1709 struct t7_config *new_config;
1710 struct t7_config deepsleep = { .active = 0, .idle = 0 };
1711
1712 if (sleep == MXT_POWER_CFG_DEEPSLEEP)
1713 new_config = &deepsleep;
1714 else
1715 new_config = &data->t7_cfg;
1716
1717 error = __mxt_write_reg(data->client, data->T7_address,
1718 sizeof(data->t7_cfg), new_config);
1719 if (error)
1720 return error;
1721
1722 dev_dbg(dev, "Set T7 ACTV:%d IDLE:%d\n",
1723 new_config->active, new_config->idle);
1724
1725 return 0;
1726}
1727
1728static int mxt_init_t7_power_cfg(struct mxt_data *data)
1729{
1730 struct device *dev = &data->client->dev;
1731 int error;
1732 bool retry = false;
1733
1734recheck:
1735 error = __mxt_read_reg(data->client, data->T7_address,
1736 sizeof(data->t7_cfg), &data->t7_cfg);
1737 if (error)
1738 return error;
1739
1740 if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) {
1741 if (!retry) {
1742 dev_dbg(dev, "T7 cfg zero, resetting\n");
1743 mxt_soft_reset(data);
1744 retry = true;
1745 goto recheck;
1746 } else {
1747 dev_dbg(dev, "T7 cfg zero after reset, overriding\n");
1748 data->t7_cfg.active = 20;
1749 data->t7_cfg.idle = 100;
1750 return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
1751 }
1104 } 1752 }
1105 1753
1106 error = mxt_read_t9_resolution(data); 1754 dev_dbg(dev, "Initialized power cfg: ACTV %d, IDLE %d\n",
1755 data->t7_cfg.active, data->t7_cfg.idle);
1756 return 0;
1757}
1758
1759static int mxt_configure_objects(struct mxt_data *data,
1760 const struct firmware *cfg)
1761{
1762 struct device *dev = &data->client->dev;
1763 struct mxt_info *info = &data->info;
1764 int error;
1765
1766 if (cfg) {
1767 error = mxt_update_cfg(data, cfg);
1768 if (error)
1769 dev_warn(dev, "Error %d updating config\n", error);
1770 }
1771
1772 error = mxt_init_t7_power_cfg(data);
1107 if (error) { 1773 if (error) {
1108 dev_err(&client->dev, "Failed to initialize T9 resolution\n"); 1774 dev_err(dev, "Failed to initialize power cfg\n");
1109 goto err_free_object_table; 1775 return error;
1110 } 1776 }
1111 1777
1112 dev_info(&client->dev, 1778 error = mxt_initialize_t9_input_device(data);
1779 if (error)
1780 return error;
1781
1782 dev_info(dev,
1113 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n", 1783 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
1114 info->family_id, info->variant_id, info->version >> 4, 1784 info->family_id, info->variant_id, info->version >> 4,
1115 info->version & 0xf, info->build, info->object_num); 1785 info->version & 0xf, info->build, info->object_num);
1116 1786
1117 return 0; 1787 return 0;
1118
1119err_free_object_table:
1120 mxt_free_object_table(data);
1121 return error;
1122} 1788}
1123 1789
1124/* Firmware Version is returned as Major.Minor.Build */ 1790/* Firmware Version is returned as Major.Minor.Build */
@@ -1246,30 +1912,45 @@ static int mxt_load_fw(struct device *dev, const char *fn)
1246 if (ret) 1912 if (ret)
1247 goto release_firmware; 1913 goto release_firmware;
1248 1914
1249 ret = mxt_lookup_bootloader_address(data); 1915 if (!data->in_bootloader) {
1250 if (ret) 1916 /* Change to the bootloader mode */
1251 goto release_firmware; 1917 data->in_bootloader = true;
1252 1918
1253 /* Change to the bootloader mode */ 1919 ret = mxt_t6_command(data, MXT_COMMAND_RESET,
1254 data->in_bootloader = true; 1920 MXT_BOOT_VALUE, false);
1921 if (ret)
1922 goto release_firmware;
1255 1923
1256 ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_BOOT_VALUE, false); 1924 msleep(MXT_RESET_TIME);
1257 if (ret)
1258 goto release_firmware;
1259 1925
1260 msleep(MXT_RESET_TIME); 1926 /* Do not need to scan since we know family ID */
1927 ret = mxt_lookup_bootloader_address(data, 0);
1928 if (ret)
1929 goto release_firmware;
1930 } else {
1931 enable_irq(data->irq);
1932 }
1261 1933
1934 mxt_free_object_table(data);
1262 reinit_completion(&data->bl_completion); 1935 reinit_completion(&data->bl_completion);
1263 1936
1264 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD); 1937 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
1265 if (ret) 1938 if (ret) {
1266 goto disable_irq; 1939 /* Bootloader may still be unlocked from previous attempt */
1940 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false);
1941 if (ret)
1942 goto disable_irq;
1943 } else {
1944 dev_info(dev, "Unlocking bootloader\n");
1267 1945
1268 /* Unlock bootloader */ 1946 /* Unlock bootloader */
1269 mxt_unlock_bootloader(data); 1947 ret = mxt_send_bootloader_cmd(data, true);
1948 if (ret)
1949 goto disable_irq;
1950 }
1270 1951
1271 while (pos < fw->size) { 1952 while (pos < fw->size) {
1272 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA); 1953 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
1273 if (ret) 1954 if (ret)
1274 goto disable_irq; 1955 goto disable_irq;
1275 1956
@@ -1283,7 +1964,7 @@ static int mxt_load_fw(struct device *dev, const char *fn)
1283 if (ret) 1964 if (ret)
1284 goto disable_irq; 1965 goto disable_irq;
1285 1966
1286 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS); 1967 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
1287 if (ret) { 1968 if (ret) {
1288 retry++; 1969 retry++;
1289 1970
@@ -1343,13 +2024,7 @@ static ssize_t mxt_update_fw_store(struct device *dev,
1343 } else { 2024 } else {
1344 dev_info(dev, "The firmware update succeeded\n"); 2025 dev_info(dev, "The firmware update succeeded\n");
1345 2026
1346 mxt_free_object_table(data); 2027 error = mxt_initialize(data);
1347
1348 mxt_initialize(data);
1349
1350 enable_irq(data->irq);
1351
1352 error = mxt_make_highchg(data);
1353 if (error) 2028 if (error)
1354 return error; 2029 return error;
1355 } 2030 }
@@ -1376,16 +2051,15 @@ static const struct attribute_group mxt_attr_group = {
1376 2051
1377static void mxt_start(struct mxt_data *data) 2052static void mxt_start(struct mxt_data *data)
1378{ 2053{
1379 /* Touch enable */ 2054 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
1380 mxt_write_object(data, 2055
1381 MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0x83); 2056 /* Recalibrate since chip has been in deep sleep */
2057 mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false);
1382} 2058}
1383 2059
1384static void mxt_stop(struct mxt_data *data) 2060static void mxt_stop(struct mxt_data *data)
1385{ 2061{
1386 /* Touch disable */ 2062 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP);
1387 mxt_write_object(data,
1388 MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0);
1389} 2063}
1390 2064
1391static int mxt_input_open(struct input_dev *dev) 2065static int mxt_input_open(struct input_dev *dev)
@@ -1404,138 +2078,112 @@ static void mxt_input_close(struct input_dev *dev)
1404 mxt_stop(data); 2078 mxt_stop(data);
1405} 2079}
1406 2080
1407static int mxt_probe(struct i2c_client *client, 2081#ifdef CONFIG_OF
1408 const struct i2c_device_id *id) 2082static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
2083{
2084 struct mxt_platform_data *pdata;
2085 u32 *keymap;
2086 u32 keycode;
2087 int proplen, i, ret;
2088
2089 if (!client->dev.of_node)
2090 return ERR_PTR(-ENODEV);
2091
2092 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
2093 if (!pdata)
2094 return ERR_PTR(-ENOMEM);
2095
2096 if (of_find_property(client->dev.of_node, "linux,gpio-keymap",
2097 &proplen)) {
2098 pdata->t19_num_keys = proplen / sizeof(u32);
2099
2100 keymap = devm_kzalloc(&client->dev,
2101 pdata->t19_num_keys * sizeof(keymap[0]),
2102 GFP_KERNEL);
2103 if (!keymap)
2104 return ERR_PTR(-ENOMEM);
2105
2106 for (i = 0; i < pdata->t19_num_keys; i++) {
2107 ret = of_property_read_u32_index(client->dev.of_node,
2108 "linux,gpio-keymap", i, &keycode);
2109 if (ret)
2110 keycode = KEY_RESERVED;
2111
2112 keymap[i] = keycode;
2113 }
2114
2115 pdata->t19_keymap = keymap;
2116 }
2117
2118 return pdata;
2119}
2120#else
2121static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
2122{
2123 dev_dbg(&client->dev, "No platform data specified\n");
2124 return ERR_PTR(-EINVAL);
2125}
2126#endif
2127
2128static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
1409{ 2129{
1410 const struct mxt_platform_data *pdata = dev_get_platdata(&client->dev);
1411 struct mxt_data *data; 2130 struct mxt_data *data;
1412 struct input_dev *input_dev; 2131 const struct mxt_platform_data *pdata;
1413 int error; 2132 int error;
1414 unsigned int num_mt_slots;
1415 unsigned int mt_flags = 0;
1416 int i;
1417 2133
1418 if (!pdata) 2134 pdata = dev_get_platdata(&client->dev);
1419 return -EINVAL; 2135 if (!pdata) {
2136 pdata = mxt_parse_dt(client);
2137 if (IS_ERR(pdata))
2138 return PTR_ERR(pdata);
2139 }
1420 2140
1421 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL); 2141 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1422 input_dev = input_allocate_device(); 2142 if (!data) {
1423 if (!data || !input_dev) {
1424 dev_err(&client->dev, "Failed to allocate memory\n"); 2143 dev_err(&client->dev, "Failed to allocate memory\n");
1425 error = -ENOMEM; 2144 return -ENOMEM;
1426 goto err_free_mem;
1427 } 2145 }
1428 2146
1429 input_dev->name = "Atmel maXTouch Touchscreen";
1430 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0", 2147 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
1431 client->adapter->nr, client->addr); 2148 client->adapter->nr, client->addr);
1432 2149
1433 input_dev->phys = data->phys;
1434
1435 input_dev->id.bustype = BUS_I2C;
1436 input_dev->dev.parent = &client->dev;
1437 input_dev->open = mxt_input_open;
1438 input_dev->close = mxt_input_close;
1439
1440 data->client = client; 2150 data->client = client;
1441 data->input_dev = input_dev;
1442 data->pdata = pdata; 2151 data->pdata = pdata;
1443 data->irq = client->irq; 2152 data->irq = client->irq;
2153 i2c_set_clientdata(client, data);
1444 2154
1445 init_completion(&data->bl_completion); 2155 init_completion(&data->bl_completion);
1446 init_completion(&data->reset_completion); 2156 init_completion(&data->reset_completion);
1447 init_completion(&data->crc_completion); 2157 init_completion(&data->crc_completion);
1448 2158
1449 error = mxt_initialize(data);
1450 if (error)
1451 goto err_free_mem;
1452
1453 __set_bit(EV_ABS, input_dev->evbit);
1454 __set_bit(EV_KEY, input_dev->evbit);
1455 __set_bit(BTN_TOUCH, input_dev->keybit);
1456
1457 if (pdata->t19_num_keys) {
1458 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1459
1460 for (i = 0; i < pdata->t19_num_keys; i++)
1461 if (pdata->t19_keymap[i] != KEY_RESERVED)
1462 input_set_capability(input_dev, EV_KEY,
1463 pdata->t19_keymap[i]);
1464
1465 mt_flags |= INPUT_MT_POINTER;
1466
1467 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1468 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1469 input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1470 MXT_PIXELS_PER_MM);
1471 input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1472 MXT_PIXELS_PER_MM);
1473
1474 input_dev->name = "Atmel maXTouch Touchpad";
1475 }
1476
1477 /* For single touch */
1478 input_set_abs_params(input_dev, ABS_X,
1479 0, data->max_x, 0, 0);
1480 input_set_abs_params(input_dev, ABS_Y,
1481 0, data->max_y, 0, 0);
1482 input_set_abs_params(input_dev, ABS_PRESSURE,
1483 0, 255, 0, 0);
1484
1485 /* For multi touch */
1486 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1487 error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
1488 if (error)
1489 goto err_free_object;
1490 input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1491 0, MXT_MAX_AREA, 0, 0);
1492 input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1493 0, data->max_x, 0, 0);
1494 input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1495 0, data->max_y, 0, 0);
1496 input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1497 0, 255, 0, 0);
1498
1499 input_set_drvdata(input_dev, data);
1500 i2c_set_clientdata(client, data);
1501
1502 error = request_threaded_irq(client->irq, NULL, mxt_interrupt, 2159 error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
1503 pdata->irqflags | IRQF_ONESHOT, 2160 pdata->irqflags | IRQF_ONESHOT,
1504 client->name, data); 2161 client->name, data);
1505 if (error) { 2162 if (error) {
1506 dev_err(&client->dev, "Failed to register interrupt\n"); 2163 dev_err(&client->dev, "Failed to register interrupt\n");
1507 goto err_free_object; 2164 goto err_free_mem;
1508 } 2165 }
1509 2166
1510 error = mxt_make_highchg(data); 2167 disable_irq(client->irq);
1511 if (error)
1512 goto err_free_irq;
1513 2168
1514 error = input_register_device(input_dev); 2169 error = mxt_initialize(data);
1515 if (error) { 2170 if (error)
1516 dev_err(&client->dev, "Error %d registering input device\n",
1517 error);
1518 goto err_free_irq; 2171 goto err_free_irq;
1519 }
1520 2172
1521 error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group); 2173 error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
1522 if (error) { 2174 if (error) {
1523 dev_err(&client->dev, "Failure %d creating sysfs group\n", 2175 dev_err(&client->dev, "Failure %d creating sysfs group\n",
1524 error); 2176 error);
1525 goto err_unregister_device; 2177 goto err_free_object;
1526 } 2178 }
1527 2179
1528 return 0; 2180 return 0;
1529 2181
1530err_unregister_device: 2182err_free_object:
1531 input_unregister_device(input_dev); 2183 mxt_free_object_table(data);
1532 input_dev = NULL;
1533err_free_irq: 2184err_free_irq:
1534 free_irq(client->irq, data); 2185 free_irq(client->irq, data);
1535err_free_object:
1536 kfree(data->object_table);
1537err_free_mem: 2186err_free_mem:
1538 input_free_device(input_dev);
1539 kfree(data); 2187 kfree(data);
1540 return error; 2188 return error;
1541} 2189}
@@ -1547,7 +2195,7 @@ static int mxt_remove(struct i2c_client *client)
1547 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group); 2195 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
1548 free_irq(data->irq, data); 2196 free_irq(data->irq, data);
1549 input_unregister_device(data->input_dev); 2197 input_unregister_device(data->input_dev);
1550 kfree(data->object_table); 2198 mxt_free_object_table(data);
1551 kfree(data); 2199 kfree(data);
1552 2200
1553 return 0; 2201 return 0;
@@ -1576,8 +2224,6 @@ static int mxt_resume(struct device *dev)
1576 struct mxt_data *data = i2c_get_clientdata(client); 2224 struct mxt_data *data = i2c_get_clientdata(client);
1577 struct input_dev *input_dev = data->input_dev; 2225 struct input_dev *input_dev = data->input_dev;
1578 2226
1579 mxt_soft_reset(data);
1580
1581 mutex_lock(&input_dev->mutex); 2227 mutex_lock(&input_dev->mutex);
1582 2228
1583 if (input_dev->users) 2229 if (input_dev->users)
@@ -1591,6 +2237,12 @@ static int mxt_resume(struct device *dev)
1591 2237
1592static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume); 2238static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
1593 2239
2240static const struct of_device_id mxt_of_match[] = {
2241 { .compatible = "atmel,maxtouch", },
2242 {},
2243};
2244MODULE_DEVICE_TABLE(of, mxt_of_match);
2245
1594static const struct i2c_device_id mxt_id[] = { 2246static const struct i2c_device_id mxt_id[] = {
1595 { "qt602240_ts", 0 }, 2247 { "qt602240_ts", 0 },
1596 { "atmel_mxt_ts", 0 }, 2248 { "atmel_mxt_ts", 0 },
@@ -1604,6 +2256,7 @@ static struct i2c_driver mxt_driver = {
1604 .driver = { 2256 .driver = {
1605 .name = "atmel_mxt_ts", 2257 .name = "atmel_mxt_ts",
1606 .owner = THIS_MODULE, 2258 .owner = THIS_MODULE,
2259 .of_match_table = of_match_ptr(mxt_of_match),
1607 .pm = &mxt_pm_ops, 2260 .pm = &mxt_pm_ops,
1608 }, 2261 },
1609 .probe = mxt_probe, 2262 .probe = mxt_probe,
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index d4f33992ad8c..5a6d50c004d7 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -733,8 +733,7 @@ edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
733static void 733static void
734edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata) 734edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
735{ 735{
736 if (tsdata->debug_dir) 736 debugfs_remove_recursive(tsdata->debug_dir);
737 debugfs_remove_recursive(tsdata->debug_dir);
738 kfree(tsdata->raw_buffer); 737 kfree(tsdata->raw_buffer);
739} 738}
740 739
diff --git a/drivers/input/touchscreen/ipaq-micro-ts.c b/drivers/input/touchscreen/ipaq-micro-ts.c
new file mode 100644
index 000000000000..62c8976e616f
--- /dev/null
+++ b/drivers/input/touchscreen/ipaq-micro-ts.c
@@ -0,0 +1,166 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License version 2 as
4 * published by the Free Software Foundation.
5 *
6 * h3600 atmel micro companion support, touchscreen subdevice
7 * Author : Alessandro Gardich <gremlin@gremlin.it>
8 * Author : Dmitry Artamonow <mad_soft@inbox.ru>
9 * Author : Linus Walleij <linus.walleij@linaro.org>
10 *
11 */
12
13#include <asm/byteorder.h>
14#include <linux/module.h>
15#include <linux/init.h>
16#include <linux/interrupt.h>
17#include <linux/pm.h>
18#include <linux/delay.h>
19#include <linux/device.h>
20#include <linux/input.h>
21#include <linux/platform_device.h>
22#include <linux/slab.h>
23#include <linux/mfd/ipaq-micro.h>
24
25struct touchscreen_data {
26 struct input_dev *input;
27 struct ipaq_micro *micro;
28};
29
30static void micro_ts_receive(void *data, int len, unsigned char *msg)
31{
32 struct touchscreen_data *ts = data;
33
34 if (len == 4) {
35 input_report_abs(ts->input, ABS_X,
36 be16_to_cpup((__be16 *) &msg[2]));
37 input_report_abs(ts->input, ABS_Y,
38 be16_to_cpup((__be16 *) &msg[0]));
39 input_report_key(ts->input, BTN_TOUCH, 1);
40 input_sync(ts->input);
41 } else if (len == 0) {
42 input_report_abs(ts->input, ABS_X, 0);
43 input_report_abs(ts->input, ABS_Y, 0);
44 input_report_key(ts->input, BTN_TOUCH, 0);
45 input_sync(ts->input);
46 }
47}
48
49static void micro_ts_toggle_receive(struct touchscreen_data *ts, bool enable)
50{
51 struct ipaq_micro *micro = ts->micro;
52
53 spin_lock_irq(&micro->lock);
54
55 if (enable) {
56 micro->ts = micro_ts_receive;
57 micro->ts_data = ts;
58 } else {
59 micro->ts = NULL;
60 micro->ts_data = NULL;
61 }
62
63 spin_unlock_irq(&ts->micro->lock);
64}
65
66static int micro_ts_open(struct input_dev *input)
67{
68 struct touchscreen_data *ts = input_get_drvdata(input);
69
70 micro_ts_toggle_receive(ts, true);
71
72 return 0;
73}
74
75static void micro_ts_close(struct input_dev *input)
76{
77 struct touchscreen_data *ts = input_get_drvdata(input);
78
79 micro_ts_toggle_receive(ts, false);
80}
81
82static int micro_ts_probe(struct platform_device *pdev)
83{
84 struct ipaq_micro *micro = dev_get_drvdata(pdev->dev.parent);
85 struct touchscreen_data *ts;
86 int error;
87
88 ts = devm_kzalloc(&pdev->dev, sizeof(*ts), GFP_KERNEL);
89 if (!ts)
90 return -ENOMEM;
91
92 ts->micro = micro;
93
94 ts->input = devm_input_allocate_device(&pdev->dev);
95 if (!ts->input) {
96 dev_err(&pdev->dev, "failed to allocate input device\n");
97 return -ENOMEM;
98 }
99
100 ts->input->name = "ipaq micro ts";
101 ts->input->open = micro_ts_open;
102 ts->input->close = micro_ts_close;
103
104 input_set_drvdata(ts->input, ts);
105
106 input_set_capability(ts->input, EV_KEY, BTN_TOUCH);
107 input_set_capability(ts->input, EV_ABS, ABS_X);
108 input_set_capability(ts->input, EV_ABS, ABS_Y);
109 input_set_abs_params(ts->input, ABS_X, 0, 1023, 0, 0);
110 input_set_abs_params(ts->input, ABS_Y, 0, 1023, 0, 0);
111
112 error = input_register_device(ts->input);
113 if (error) {
114 dev_err(&pdev->dev, "error registering touch input\n");
115 return error;
116 }
117
118 platform_set_drvdata(pdev, ts);
119
120 dev_info(&pdev->dev, "iPAQ micro touchscreen\n");
121
122 return 0;
123}
124
125#ifdef CONFIG_PM_SLEEP
126static int micro_ts_suspend(struct device *dev)
127{
128 struct touchscreen_data *ts = dev_get_drvdata(dev);
129
130 micro_ts_toggle_receive(ts, false);
131
132 return 0;
133}
134
135static int micro_ts_resume(struct device *dev)
136{
137 struct touchscreen_data *ts = dev_get_drvdata(dev);
138 struct input_dev *input = ts->input;
139
140 mutex_lock(&input->mutex);
141
142 if (input->users)
143 micro_ts_toggle_receive(ts, true);
144
145 mutex_unlock(&input->mutex);
146
147 return 0;
148}
149#endif
150
151static const struct dev_pm_ops micro_ts_dev_pm_ops = {
152 SET_SYSTEM_SLEEP_PM_OPS(micro_ts_suspend, micro_ts_resume)
153};
154
155static struct platform_driver micro_ts_device_driver = {
156 .driver = {
157 .name = "ipaq-micro-ts",
158 .pm = &micro_ts_dev_pm_ops,
159 },
160 .probe = micro_ts_probe,
161};
162module_platform_driver(micro_ts_device_driver);
163
164MODULE_LICENSE("GPL");
165MODULE_DESCRIPTION("driver for iPAQ Atmel micro touchscreen");
166MODULE_ALIAS("platform:ipaq-micro-ts");
diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c
index 7324c5c0fb86..651ec71a5c68 100644
--- a/drivers/input/touchscreen/jornada720_ts.c
+++ b/drivers/input/touchscreen/jornada720_ts.c
@@ -36,22 +36,21 @@ struct jornada_ts {
36 36
37static void jornada720_ts_collect_data(struct jornada_ts *jornada_ts) 37static void jornada720_ts_collect_data(struct jornada_ts *jornada_ts)
38{ 38{
39 /* 3 low word X samples */
40 jornada_ts->x_data[0] = jornada_ssp_byte(TXDUMMY);
41 jornada_ts->x_data[1] = jornada_ssp_byte(TXDUMMY);
42 jornada_ts->x_data[2] = jornada_ssp_byte(TXDUMMY);
39 43
40 /* 3 low word X samples */ 44 /* 3 low word Y samples */
41 jornada_ts->x_data[0] = jornada_ssp_byte(TXDUMMY); 45 jornada_ts->y_data[0] = jornada_ssp_byte(TXDUMMY);
42 jornada_ts->x_data[1] = jornada_ssp_byte(TXDUMMY); 46 jornada_ts->y_data[1] = jornada_ssp_byte(TXDUMMY);
43 jornada_ts->x_data[2] = jornada_ssp_byte(TXDUMMY); 47 jornada_ts->y_data[2] = jornada_ssp_byte(TXDUMMY);
44 48
45 /* 3 low word Y samples */ 49 /* combined x samples bits */
46 jornada_ts->y_data[0] = jornada_ssp_byte(TXDUMMY); 50 jornada_ts->x_data[3] = jornada_ssp_byte(TXDUMMY);
47 jornada_ts->y_data[1] = jornada_ssp_byte(TXDUMMY);
48 jornada_ts->y_data[2] = jornada_ssp_byte(TXDUMMY);
49 51
50 /* combined x samples bits */ 52 /* combined y samples bits */
51 jornada_ts->x_data[3] = jornada_ssp_byte(TXDUMMY); 53 jornada_ts->y_data[3] = jornada_ssp_byte(TXDUMMY);
52
53 /* combined y samples bits */
54 jornada_ts->y_data[3] = jornada_ssp_byte(TXDUMMY);
55} 54}
56 55
57static int jornada720_ts_average(int coords[4]) 56static int jornada720_ts_average(int coords[4])
@@ -104,13 +103,13 @@ static int jornada720_ts_probe(struct platform_device *pdev)
104 struct input_dev *input_dev; 103 struct input_dev *input_dev;
105 int error; 104 int error;
106 105
107 jornada_ts = kzalloc(sizeof(struct jornada_ts), GFP_KERNEL); 106 jornada_ts = devm_kzalloc(&pdev->dev, sizeof(*jornada_ts), GFP_KERNEL);
108 input_dev = input_allocate_device(); 107 if (!jornada_ts)
108 return -ENOMEM;
109 109
110 if (!jornada_ts || !input_dev) { 110 input_dev = devm_input_allocate_device(&pdev->dev);
111 error = -ENOMEM; 111 if (!input_dev)
112 goto fail1; 112 return -ENOMEM;
113 }
114 113
115 platform_set_drvdata(pdev, jornada_ts); 114 platform_set_drvdata(pdev, jornada_ts);
116 115
@@ -126,36 +125,18 @@ static int jornada720_ts_probe(struct platform_device *pdev)
126 input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0); 125 input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0);
127 input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0); 126 input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0);
128 127
129 error = request_irq(IRQ_GPIO9, 128 error = devm_request_irq(&pdev->dev, IRQ_GPIO9,
130 jornada720_ts_interrupt, 129 jornada720_ts_interrupt,
131 IRQF_TRIGGER_RISING, 130 IRQF_TRIGGER_RISING,
132 "HP7XX Touchscreen driver", pdev); 131 "HP7XX Touchscreen driver", pdev);
133 if (error) { 132 if (error) {
134 printk(KERN_INFO "HP7XX TS : Unable to acquire irq!\n"); 133 dev_err(&pdev->dev, "HP7XX TS : Unable to acquire irq!\n");
135 goto fail1; 134 return error;
136 } 135 }
137 136
138 error = input_register_device(jornada_ts->dev); 137 error = input_register_device(jornada_ts->dev);
139 if (error) 138 if (error)
140 goto fail2; 139 return error;
141
142 return 0;
143
144 fail2:
145 free_irq(IRQ_GPIO9, pdev);
146 fail1:
147 input_free_device(input_dev);
148 kfree(jornada_ts);
149 return error;
150}
151
152static int jornada720_ts_remove(struct platform_device *pdev)
153{
154 struct jornada_ts *jornada_ts = platform_get_drvdata(pdev);
155
156 free_irq(IRQ_GPIO9, pdev);
157 input_unregister_device(jornada_ts->dev);
158 kfree(jornada_ts);
159 140
160 return 0; 141 return 0;
161} 142}
@@ -165,7 +146,6 @@ MODULE_ALIAS("platform:jornada_ts");
165 146
166static struct platform_driver jornada720_ts_driver = { 147static struct platform_driver jornada720_ts_driver = {
167 .probe = jornada720_ts_probe, 148 .probe = jornada720_ts_probe,
168 .remove = jornada720_ts_remove,
169 .driver = { 149 .driver = {
170 .name = "jornada_ts", 150 .name = "jornada_ts",
171 .owner = THIS_MODULE, 151 .owner = THIS_MODULE,
diff --git a/drivers/input/touchscreen/mcs5000_ts.c b/drivers/input/touchscreen/mcs5000_ts.c
index 00510a9836b3..8b47e1fecb25 100644
--- a/drivers/input/touchscreen/mcs5000_ts.c
+++ b/drivers/input/touchscreen/mcs5000_ts.c
@@ -248,8 +248,7 @@ static int mcs5000_ts_probe(struct i2c_client *client,
248 return 0; 248 return 0;
249} 249}
250 250
251#ifdef CONFIG_PM 251static int __maybe_unused mcs5000_ts_suspend(struct device *dev)
252static int mcs5000_ts_suspend(struct device *dev)
253{ 252{
254 struct i2c_client *client = to_i2c_client(dev); 253 struct i2c_client *client = to_i2c_client(dev);
255 254
@@ -259,7 +258,7 @@ static int mcs5000_ts_suspend(struct device *dev)
259 return 0; 258 return 0;
260} 259}
261 260
262static int mcs5000_ts_resume(struct device *dev) 261static int __maybe_unused mcs5000_ts_resume(struct device *dev)
263{ 262{
264 struct i2c_client *client = to_i2c_client(dev); 263 struct i2c_client *client = to_i2c_client(dev);
265 struct mcs5000_ts_data *data = i2c_get_clientdata(client); 264 struct mcs5000_ts_data *data = i2c_get_clientdata(client);
@@ -269,7 +268,6 @@ static int mcs5000_ts_resume(struct device *dev)
269 268
270 return 0; 269 return 0;
271} 270}
272#endif
273 271
274static SIMPLE_DEV_PM_OPS(mcs5000_ts_pm, mcs5000_ts_suspend, mcs5000_ts_resume); 272static SIMPLE_DEV_PM_OPS(mcs5000_ts_pm, mcs5000_ts_suspend, mcs5000_ts_resume);
275 273
diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
index 19c6c0fdc94b..fc49c75317d1 100644
--- a/drivers/input/touchscreen/pixcir_i2c_ts.c
+++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
@@ -23,22 +23,51 @@
23#include <linux/slab.h> 23#include <linux/slab.h>
24#include <linux/i2c.h> 24#include <linux/i2c.h>
25#include <linux/input.h> 25#include <linux/input.h>
26#include <linux/input/mt.h>
26#include <linux/input/pixcir_ts.h> 27#include <linux/input/pixcir_ts.h>
27#include <linux/gpio.h> 28#include <linux/gpio.h>
29#include <linux/of.h>
30#include <linux/of_gpio.h>
31#include <linux/of_device.h>
32
33#define PIXCIR_MAX_SLOTS 5 /* Max fingers supported by driver */
28 34
29struct pixcir_i2c_ts_data { 35struct pixcir_i2c_ts_data {
30 struct i2c_client *client; 36 struct i2c_client *client;
31 struct input_dev *input; 37 struct input_dev *input;
32 const struct pixcir_ts_platform_data *chip; 38 const struct pixcir_ts_platform_data *pdata;
33 bool running; 39 bool running;
40 int max_fingers; /* Max fingers supported in this instance */
41};
42
43struct pixcir_touch {
44 int x;
45 int y;
46 int id;
47};
48
49struct pixcir_report_data {
50 int num_touches;
51 struct pixcir_touch touches[PIXCIR_MAX_SLOTS];
34}; 52};
35 53
36static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data) 54static void pixcir_ts_parse(struct pixcir_i2c_ts_data *tsdata,
55 struct pixcir_report_data *report)
37{ 56{
38 struct pixcir_i2c_ts_data *tsdata = data; 57 u8 rdbuf[2 + PIXCIR_MAX_SLOTS * 5];
39 u8 rdbuf[10], wrbuf[1] = { 0 }; 58 u8 wrbuf[1] = { 0 };
59 u8 *bufptr;
40 u8 touch; 60 u8 touch;
41 int ret; 61 int ret, i;
62 int readsize;
63 const struct pixcir_i2c_chip_data *chip = &tsdata->pdata->chip;
64
65 memset(report, 0, sizeof(struct pixcir_report_data));
66
67 i = chip->has_hw_ids ? 1 : 0;
68 readsize = 2 + tsdata->max_fingers * (4 + i);
69 if (readsize > sizeof(rdbuf))
70 readsize = sizeof(rdbuf);
42 71
43 ret = i2c_master_send(tsdata->client, wrbuf, sizeof(wrbuf)); 72 ret = i2c_master_send(tsdata->client, wrbuf, sizeof(wrbuf));
44 if (ret != sizeof(wrbuf)) { 73 if (ret != sizeof(wrbuf)) {
@@ -48,7 +77,7 @@ static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data)
48 return; 77 return;
49 } 78 }
50 79
51 ret = i2c_master_recv(tsdata->client, rdbuf, sizeof(rdbuf)); 80 ret = i2c_master_recv(tsdata->client, rdbuf, readsize);
52 if (ret != sizeof(rdbuf)) { 81 if (ret != sizeof(rdbuf)) {
53 dev_err(&tsdata->client->dev, 82 dev_err(&tsdata->client->dev,
54 "%s: i2c_master_recv failed(), ret=%d\n", 83 "%s: i2c_master_recv failed(), ret=%d\n",
@@ -56,45 +85,103 @@ static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data)
56 return; 85 return;
57 } 86 }
58 87
59 touch = rdbuf[0]; 88 touch = rdbuf[0] & 0x7;
60 if (touch) { 89 if (touch > tsdata->max_fingers)
61 u16 posx1 = (rdbuf[3] << 8) | rdbuf[2]; 90 touch = tsdata->max_fingers;
62 u16 posy1 = (rdbuf[5] << 8) | rdbuf[4]; 91
63 u16 posx2 = (rdbuf[7] << 8) | rdbuf[6]; 92 report->num_touches = touch;
64 u16 posy2 = (rdbuf[9] << 8) | rdbuf[8]; 93 bufptr = &rdbuf[2];
65 94
66 input_report_key(tsdata->input, BTN_TOUCH, 1); 95 for (i = 0; i < touch; i++) {
67 input_report_abs(tsdata->input, ABS_X, posx1); 96 report->touches[i].x = (bufptr[1] << 8) | bufptr[0];
68 input_report_abs(tsdata->input, ABS_Y, posy1); 97 report->touches[i].y = (bufptr[3] << 8) | bufptr[2];
69 98
70 input_report_abs(tsdata->input, ABS_MT_POSITION_X, posx1); 99 if (chip->has_hw_ids) {
71 input_report_abs(tsdata->input, ABS_MT_POSITION_Y, posy1); 100 report->touches[i].id = bufptr[4];
72 input_mt_sync(tsdata->input); 101 bufptr = bufptr + 5;
73 102 } else {
74 if (touch == 2) { 103 bufptr = bufptr + 4;
75 input_report_abs(tsdata->input, 104 }
76 ABS_MT_POSITION_X, posx2); 105 }
77 input_report_abs(tsdata->input, 106}
78 ABS_MT_POSITION_Y, posy2); 107
79 input_mt_sync(tsdata->input); 108static void pixcir_ts_report(struct pixcir_i2c_ts_data *ts,
109 struct pixcir_report_data *report)
110{
111 struct input_mt_pos pos[PIXCIR_MAX_SLOTS];
112 int slots[PIXCIR_MAX_SLOTS];
113 struct pixcir_touch *touch;
114 int n, i, slot;
115 struct device *dev = &ts->client->dev;
116 const struct pixcir_i2c_chip_data *chip = &ts->pdata->chip;
117
118 n = report->num_touches;
119 if (n > PIXCIR_MAX_SLOTS)
120 n = PIXCIR_MAX_SLOTS;
121
122 if (!chip->has_hw_ids) {
123 for (i = 0; i < n; i++) {
124 touch = &report->touches[i];
125 pos[i].x = touch->x;
126 pos[i].y = touch->y;
127 }
128
129 input_mt_assign_slots(ts->input, slots, pos, n);
130 }
131
132 for (i = 0; i < n; i++) {
133 touch = &report->touches[i];
134
135 if (chip->has_hw_ids) {
136 slot = input_mt_get_slot_by_key(ts->input, touch->id);
137 if (slot < 0) {
138 dev_dbg(dev, "no free slot for id 0x%x\n",
139 touch->id);
140 continue;
141 }
142 } else {
143 slot = slots[i];
80 } 144 }
81 } else { 145
82 input_report_key(tsdata->input, BTN_TOUCH, 0); 146 input_mt_slot(ts->input, slot);
147 input_mt_report_slot_state(ts->input,
148 MT_TOOL_FINGER, true);
149
150 input_event(ts->input, EV_ABS, ABS_MT_POSITION_X, touch->x);
151 input_event(ts->input, EV_ABS, ABS_MT_POSITION_Y, touch->y);
152
153 dev_dbg(dev, "%d: slot %d, x %d, y %d\n",
154 i, slot, touch->x, touch->y);
83 } 155 }
84 156
85 input_sync(tsdata->input); 157 input_mt_sync_frame(ts->input);
158 input_sync(ts->input);
86} 159}
87 160
88static irqreturn_t pixcir_ts_isr(int irq, void *dev_id) 161static irqreturn_t pixcir_ts_isr(int irq, void *dev_id)
89{ 162{
90 struct pixcir_i2c_ts_data *tsdata = dev_id; 163 struct pixcir_i2c_ts_data *tsdata = dev_id;
91 const struct pixcir_ts_platform_data *pdata = tsdata->chip; 164 const struct pixcir_ts_platform_data *pdata = tsdata->pdata;
165 struct pixcir_report_data report;
92 166
93 while (tsdata->running) { 167 while (tsdata->running) {
94 pixcir_ts_poscheck(tsdata); 168 /* parse packet */
95 169 pixcir_ts_parse(tsdata, &report);
96 if (gpio_get_value(pdata->gpio_attb)) 170
171 /* report it */
172 pixcir_ts_report(tsdata, &report);
173
174 if (gpio_get_value(pdata->gpio_attb)) {
175 if (report.num_touches) {
176 /*
177 * Last report with no finger up?
178 * Do it now then.
179 */
180 input_mt_sync_frame(tsdata->input);
181 input_sync(tsdata->input);
182 }
97 break; 183 break;
184 }
98 185
99 msleep(20); 186 msleep(20);
100 } 187 }
@@ -323,16 +410,69 @@ unlock:
323static SIMPLE_DEV_PM_OPS(pixcir_dev_pm_ops, 410static SIMPLE_DEV_PM_OPS(pixcir_dev_pm_ops,
324 pixcir_i2c_ts_suspend, pixcir_i2c_ts_resume); 411 pixcir_i2c_ts_suspend, pixcir_i2c_ts_resume);
325 412
413#ifdef CONFIG_OF
414static const struct of_device_id pixcir_of_match[];
415
416static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
417{
418 struct pixcir_ts_platform_data *pdata;
419 struct device_node *np = dev->of_node;
420 const struct of_device_id *match;
421
422 match = of_match_device(of_match_ptr(pixcir_of_match), dev);
423 if (!match)
424 return ERR_PTR(-EINVAL);
425
426 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
427 if (!pdata)
428 return ERR_PTR(-ENOMEM);
429
430 pdata->chip = *(const struct pixcir_i2c_chip_data *)match->data;
431
432 pdata->gpio_attb = of_get_named_gpio(np, "attb-gpio", 0);
433 /* gpio_attb validity is checked in probe */
434
435 if (of_property_read_u32(np, "touchscreen-size-x", &pdata->x_max)) {
436 dev_err(dev, "Failed to get touchscreen-size-x property\n");
437 return ERR_PTR(-EINVAL);
438 }
439 pdata->x_max -= 1;
440
441 if (of_property_read_u32(np, "touchscreen-size-y", &pdata->y_max)) {
442 dev_err(dev, "Failed to get touchscreen-size-y property\n");
443 return ERR_PTR(-EINVAL);
444 }
445 pdata->y_max -= 1;
446
447 dev_dbg(dev, "%s: x %d, y %d, gpio %d\n", __func__,
448 pdata->x_max + 1, pdata->y_max + 1, pdata->gpio_attb);
449
450 return pdata;
451}
452#else
453static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev)
454{
455 return ERR_PTR(-EINVAL);
456}
457#endif
458
326static int pixcir_i2c_ts_probe(struct i2c_client *client, 459static int pixcir_i2c_ts_probe(struct i2c_client *client,
327 const struct i2c_device_id *id) 460 const struct i2c_device_id *id)
328{ 461{
329 const struct pixcir_ts_platform_data *pdata = 462 const struct pixcir_ts_platform_data *pdata =
330 dev_get_platdata(&client->dev); 463 dev_get_platdata(&client->dev);
331 struct device *dev = &client->dev; 464 struct device *dev = &client->dev;
465 struct device_node *np = dev->of_node;
332 struct pixcir_i2c_ts_data *tsdata; 466 struct pixcir_i2c_ts_data *tsdata;
333 struct input_dev *input; 467 struct input_dev *input;
334 int error; 468 int error;
335 469
470 if (np && !pdata) {
471 pdata = pixcir_parse_dt(dev);
472 if (IS_ERR(pdata))
473 return PTR_ERR(pdata);
474 }
475
336 if (!pdata) { 476 if (!pdata) {
337 dev_err(&client->dev, "platform data not defined\n"); 477 dev_err(&client->dev, "platform data not defined\n");
338 return -EINVAL; 478 return -EINVAL;
@@ -343,6 +483,11 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
343 return -EINVAL; 483 return -EINVAL;
344 } 484 }
345 485
486 if (!pdata->chip.max_fingers) {
487 dev_err(dev, "Invalid max_fingers in pdata\n");
488 return -EINVAL;
489 }
490
346 tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL); 491 tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL);
347 if (!tsdata) 492 if (!tsdata)
348 return -ENOMEM; 493 return -ENOMEM;
@@ -355,7 +500,7 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
355 500
356 tsdata->client = client; 501 tsdata->client = client;
357 tsdata->input = input; 502 tsdata->input = input;
358 tsdata->chip = pdata; 503 tsdata->pdata = pdata;
359 504
360 input->name = client->name; 505 input->name = client->name;
361 input->id.bustype = BUS_I2C; 506 input->id.bustype = BUS_I2C;
@@ -371,6 +516,20 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
371 input_set_abs_params(input, ABS_MT_POSITION_X, 0, pdata->x_max, 0, 0); 516 input_set_abs_params(input, ABS_MT_POSITION_X, 0, pdata->x_max, 0, 0);
372 input_set_abs_params(input, ABS_MT_POSITION_Y, 0, pdata->y_max, 0, 0); 517 input_set_abs_params(input, ABS_MT_POSITION_Y, 0, pdata->y_max, 0, 0);
373 518
519 tsdata->max_fingers = tsdata->pdata->chip.max_fingers;
520 if (tsdata->max_fingers > PIXCIR_MAX_SLOTS) {
521 tsdata->max_fingers = PIXCIR_MAX_SLOTS;
522 dev_info(dev, "Limiting maximum fingers to %d\n",
523 tsdata->max_fingers);
524 }
525
526 error = input_mt_init_slots(input, tsdata->max_fingers,
527 INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
528 if (error) {
529 dev_err(dev, "Error initializing Multi-Touch slots\n");
530 return error;
531 }
532
374 input_set_drvdata(input, tsdata); 533 input_set_drvdata(input, tsdata);
375 534
376 error = devm_gpio_request_one(dev, pdata->gpio_attb, 535 error = devm_gpio_request_one(dev, pdata->gpio_attb,
@@ -419,15 +578,36 @@ static int pixcir_i2c_ts_remove(struct i2c_client *client)
419 578
420static const struct i2c_device_id pixcir_i2c_ts_id[] = { 579static const struct i2c_device_id pixcir_i2c_ts_id[] = {
421 { "pixcir_ts", 0 }, 580 { "pixcir_ts", 0 },
581 { "pixcir_tangoc", 0 },
422 { } 582 { }
423}; 583};
424MODULE_DEVICE_TABLE(i2c, pixcir_i2c_ts_id); 584MODULE_DEVICE_TABLE(i2c, pixcir_i2c_ts_id);
425 585
586#ifdef CONFIG_OF
587static const struct pixcir_i2c_chip_data pixcir_ts_data = {
588 .max_fingers = 2,
589 /* no hw id support */
590};
591
592static const struct pixcir_i2c_chip_data pixcir_tangoc_data = {
593 .max_fingers = 5,
594 .has_hw_ids = true,
595};
596
597static const struct of_device_id pixcir_of_match[] = {
598 { .compatible = "pixcir,pixcir_ts", .data = &pixcir_ts_data },
599 { .compatible = "pixcir,pixcir_tangoc", .data = &pixcir_tangoc_data },
600 { }
601};
602MODULE_DEVICE_TABLE(of, pixcir_of_match);
603#endif
604
426static struct i2c_driver pixcir_i2c_ts_driver = { 605static struct i2c_driver pixcir_i2c_ts_driver = {
427 .driver = { 606 .driver = {
428 .owner = THIS_MODULE, 607 .owner = THIS_MODULE,
429 .name = "pixcir_ts", 608 .name = "pixcir_ts",
430 .pm = &pixcir_dev_pm_ops, 609 .pm = &pixcir_dev_pm_ops,
610 .of_match_table = of_match_ptr(pixcir_of_match),
431 }, 611 },
432 .probe = pixcir_i2c_ts_probe, 612 .probe = pixcir_i2c_ts_probe,
433 .remove = pixcir_i2c_ts_remove, 613 .remove = pixcir_i2c_ts_remove,
diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
index 19cb247dbb86..5a69ded9b53c 100644
--- a/drivers/input/touchscreen/s3c2410_ts.c
+++ b/drivers/input/touchscreen/s3c2410_ts.c
@@ -264,7 +264,7 @@ static int s3c2410ts_probe(struct platform_device *pdev)
264 return -ENOENT; 264 return -ENOENT;
265 } 265 }
266 266
267 clk_enable(ts.clock); 267 clk_prepare_enable(ts.clock);
268 dev_dbg(dev, "got and enabled clocks\n"); 268 dev_dbg(dev, "got and enabled clocks\n");
269 269
270 ts.irq_tc = ret = platform_get_irq(pdev, 0); 270 ts.irq_tc = ret = platform_get_irq(pdev, 0);
@@ -369,7 +369,7 @@ static int s3c2410ts_remove(struct platform_device *pdev)
369 free_irq(ts.irq_tc, ts.input); 369 free_irq(ts.irq_tc, ts.input);
370 del_timer_sync(&touch_timer); 370 del_timer_sync(&touch_timer);
371 371
372 clk_disable(ts.clock); 372 clk_disable_unprepare(ts.clock);
373 clk_put(ts.clock); 373 clk_put(ts.clock);
374 374
375 input_unregister_device(ts.input); 375 input_unregister_device(ts.input);
diff --git a/drivers/input/touchscreen/zforce_ts.c b/drivers/input/touchscreen/zforce_ts.c
index feea85b52fa8..8ba48f5eff7b 100644
--- a/drivers/input/touchscreen/zforce_ts.c
+++ b/drivers/input/touchscreen/zforce_ts.c
@@ -29,6 +29,8 @@
29#include <linux/sysfs.h> 29#include <linux/sysfs.h>
30#include <linux/input/mt.h> 30#include <linux/input/mt.h>
31#include <linux/platform_data/zforce_ts.h> 31#include <linux/platform_data/zforce_ts.h>
32#include <linux/regulator/consumer.h>
33#include <linux/delay.h>
32#include <linux/of.h> 34#include <linux/of.h>
33#include <linux/of_gpio.h> 35#include <linux/of_gpio.h>
34 36
@@ -117,6 +119,8 @@ struct zforce_ts {
117 const struct zforce_ts_platdata *pdata; 119 const struct zforce_ts_platdata *pdata;
118 char phys[32]; 120 char phys[32];
119 121
122 struct regulator *reg_vdd;
123
120 bool suspending; 124 bool suspending;
121 bool suspended; 125 bool suspended;
122 bool boot_complete; 126 bool boot_complete;
@@ -690,6 +694,11 @@ static void zforce_reset(void *data)
690 struct zforce_ts *ts = data; 694 struct zforce_ts *ts = data;
691 695
692 gpio_set_value(ts->pdata->gpio_rst, 0); 696 gpio_set_value(ts->pdata->gpio_rst, 0);
697
698 udelay(10);
699
700 if (!IS_ERR(ts->reg_vdd))
701 regulator_disable(ts->reg_vdd);
693} 702}
694 703
695static struct zforce_ts_platdata *zforce_parse_dt(struct device *dev) 704static struct zforce_ts_platdata *zforce_parse_dt(struct device *dev)
@@ -765,10 +774,32 @@ static int zforce_probe(struct i2c_client *client,
765 return ret; 774 return ret;
766 } 775 }
767 776
777 ts->reg_vdd = devm_regulator_get_optional(&client->dev, "vdd");
778 if (IS_ERR(ts->reg_vdd)) {
779 ret = PTR_ERR(ts->reg_vdd);
780 if (ret == -EPROBE_DEFER)
781 return ret;
782 } else {
783 ret = regulator_enable(ts->reg_vdd);
784 if (ret)
785 return ret;
786
787 /*
788 * according to datasheet add 100us grace time after regular
789 * regulator enable delay.
790 */
791 udelay(100);
792 }
793
768 ret = devm_add_action(&client->dev, zforce_reset, ts); 794 ret = devm_add_action(&client->dev, zforce_reset, ts);
769 if (ret) { 795 if (ret) {
770 dev_err(&client->dev, "failed to register reset action, %d\n", 796 dev_err(&client->dev, "failed to register reset action, %d\n",
771 ret); 797 ret);
798
799 /* hereafter the regulator will be disabled by the action */
800 if (!IS_ERR(ts->reg_vdd))
801 regulator_disable(ts->reg_vdd);
802
772 return ret; 803 return ret;
773 } 804 }
774 805
diff --git a/drivers/platform/chrome/chromeos_laptop.c b/drivers/platform/chrome/chromeos_laptop.c
index 7f1a2e2711bd..67b316b2a2bd 100644
--- a/drivers/platform/chrome/chromeos_laptop.c
+++ b/drivers/platform/chrome/chromeos_laptop.c
@@ -97,8 +97,6 @@ static struct mxt_platform_data atmel_224s_tp_platform_data = {
97 .irqflags = IRQF_TRIGGER_FALLING, 97 .irqflags = IRQF_TRIGGER_FALLING,
98 .t19_num_keys = ARRAY_SIZE(mxt_t19_keys), 98 .t19_num_keys = ARRAY_SIZE(mxt_t19_keys),
99 .t19_keymap = mxt_t19_keys, 99 .t19_keymap = mxt_t19_keys,
100 .config = NULL,
101 .config_length = 0,
102}; 100};
103 101
104static struct i2c_board_info atmel_224s_tp_device = { 102static struct i2c_board_info atmel_224s_tp_device = {
@@ -109,8 +107,6 @@ static struct i2c_board_info atmel_224s_tp_device = {
109 107
110static struct mxt_platform_data atmel_1664s_platform_data = { 108static struct mxt_platform_data atmel_1664s_platform_data = {
111 .irqflags = IRQF_TRIGGER_FALLING, 109 .irqflags = IRQF_TRIGGER_FALLING,
112 .config = NULL,
113 .config_length = 0,
114}; 110};
115 111
116static struct i2c_board_info atmel_1664s_device = { 112static struct i2c_board_info atmel_1664s_device = {
diff --git a/include/linux/i2c/atmel_mxt_ts.h b/include/linux/i2c/atmel_mxt_ts.h
index 3891dc1de21c..02bf6ea31701 100644
--- a/include/linux/i2c/atmel_mxt_ts.h
+++ b/include/linux/i2c/atmel_mxt_ts.h
@@ -17,9 +17,6 @@
17 17
18/* The platform data for the Atmel maXTouch touchscreen driver */ 18/* The platform data for the Atmel maXTouch touchscreen driver */
19struct mxt_platform_data { 19struct mxt_platform_data {
20 const u8 *config;
21 size_t config_length;
22 u32 config_crc;
23 unsigned long irqflags; 20 unsigned long irqflags;
24 u8 t19_num_keys; 21 u8 t19_num_keys;
25 const unsigned int *t19_keymap; 22 const unsigned int *t19_keymap;
diff --git a/include/linux/input/pixcir_ts.h b/include/linux/input/pixcir_ts.h
index 160cf353aa39..7bae83b7c396 100644
--- a/include/linux/input/pixcir_ts.h
+++ b/include/linux/input/pixcir_ts.h
@@ -43,10 +43,22 @@ enum pixcir_int_mode {
43#define PIXCIR_INT_ENABLE (1UL << 3) 43#define PIXCIR_INT_ENABLE (1UL << 3)
44#define PIXCIR_INT_POL_HIGH (1UL << 2) 44#define PIXCIR_INT_POL_HIGH (1UL << 2)
45 45
46/**
47 * struct pixcir_irc_chip_data - chip related data
48 * @max_fingers: Max number of fingers reported simultaneously by h/w
49 * @has_hw_ids: Hardware supports finger tracking IDs
50 *
51 */
52struct pixcir_i2c_chip_data {
53 u8 max_fingers;
54 bool has_hw_ids;
55};
56
46struct pixcir_ts_platform_data { 57struct pixcir_ts_platform_data {
47 int x_max; 58 int x_max;
48 int y_max; 59 int y_max;
49 int gpio_attb; /* GPIO connected to ATTB line */ 60 int gpio_attb; /* GPIO connected to ATTB line */
61 struct pixcir_i2c_chip_data chip;
50}; 62};
51 63
52#endif 64#endif
diff --git a/include/uapi/linux/serio.h b/include/uapi/linux/serio.h
index 9f53fa7fc132..becdd78295cc 100644
--- a/include/uapi/linux/serio.h
+++ b/include/uapi/linux/serio.h
@@ -76,5 +76,6 @@
76#define SERIO_HAMPSHIRE 0x3b 76#define SERIO_HAMPSHIRE 0x3b
77#define SERIO_PS2MULT 0x3c 77#define SERIO_PS2MULT 0x3c
78#define SERIO_TSC40 0x3d 78#define SERIO_TSC40 0x3d
79#define SERIO_WACOM_IV 0x3e
79 80
80#endif /* _UAPI_SERIO_H */ 81#endif /* _UAPI_SERIO_H */
diff --git a/include/uapi/linux/uinput.h b/include/uapi/linux/uinput.h
index 0389b489bbba..baeab83deb64 100644
--- a/include/uapi/linux/uinput.h
+++ b/include/uapi/linux/uinput.h
@@ -84,6 +84,15 @@ struct uinput_ff_erase {
84 */ 84 */
85#define UI_GET_SYSNAME(len) _IOC(_IOC_READ, UINPUT_IOCTL_BASE, 300, len) 85#define UI_GET_SYSNAME(len) _IOC(_IOC_READ, UINPUT_IOCTL_BASE, 300, len)
86 86
87/**
88 * UI_GET_VERSION - Return version of uinput protocol
89 *
90 * This writes uinput protocol version implemented by the kernel into
91 * the integer pointed to by the ioctl argument. The protocol version
92 * is hard-coded in the kernel and is independent of the uinput device.
93 */
94#define UI_GET_VERSION _IOR(UINPUT_IOCTL_BASE, 301, unsigned int)
95
87/* 96/*
88 * To write a force-feedback-capable driver, the upload_effect 97 * To write a force-feedback-capable driver, the upload_effect
89 * and erase_effect callbacks in input_dev must be implemented. 98 * and erase_effect callbacks in input_dev must be implemented.