aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-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
26 files changed, 2989 insertions, 720 deletions
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 = {