blob: d2bd4dfe7c1df6efbce382c224435e574c29b72a [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/*
2 * Atmel maXTouch Touchscreen Controller Driver
3 *
4 *
5 * Copyright (C) 2010 Atmel Corporation
6 * Copyright (C) 2010 Ulf Samuelsson (ulf@atmel.com)
7 * Copyright (C) 2009 Raphael Derosso Pereira <raphaelpereira@gmail.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; version 2 of the License
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23/*
24 *
25 * Driver for Atmel maXTouch family of touch controllers.
26 *
27 */
28
29#include <linux/i2c.h>
30#include <linux/interrupt.h>
31#include <linux/input.h>
32#include <linux/debugfs.h>
33#include <linux/cdev.h>
34#include <linux/mutex.h>
35#include <linux/slab.h>
36#include <linux/pm_runtime.h>
37
38#include <asm/uaccess.h>
39
40#include <linux/atmel_maxtouch.h>
41
42#if defined(CONFIG_HAS_EARLYSUSPEND)
43#include <linux/earlysuspend.h>
44
45/* Early-suspend level */
46#define MXT_SUSPEND_LEVEL 1
47#endif
48
49
50#define DRIVER_VERSION "0.91a_mod"
51
52static int debug = DEBUG_INFO;
53static int comms = 0;
54module_param(debug, int, 0644);
55module_param(comms, int, 0644);
56
57MODULE_PARM_DESC(debug, "Activate debugging output");
58MODULE_PARM_DESC(comms, "Select communications mode");
59
60#define T7_DATA_SIZE 3
61
62/* Device Info descriptor */
63/* Parsed from maXTouch "Id information" inside device */
64struct mxt_device_info {
65 u8 family_id;
66 u8 variant_id;
67 u8 major;
68 u8 minor;
69 u8 build;
70 u8 num_objs;
71 u8 x_size;
72 u8 y_size;
73 char family_name[16]; /* Family name */
74 char variant_name[16]; /* Variant name */
75 u16 num_nodes; /* Number of sensor nodes */
76};
77
78/* object descriptor table, parsed from maXTouch "object table" */
79struct mxt_object {
80 u16 chip_addr;
81 u8 type;
82 u8 size;
83 u8 instances;
84 u8 num_report_ids;
85};
86
87
88/* Mapping from report id to object type and instance */
89struct report_id_map {
90 u8 object;
91 u8 instance;
92/*
93 * This is the first report ID belonging to object. It enables us to
94 * find out easily the touch number: each touch has different report
95 * ID (which are assigned to touches in increasing order). By
96 * subtracting the first report ID from current, we get the touch
97 * number.
98 */
99 u8 first_rid;
100};
101
102
103/* Driver datastructure */
104struct mxt_data {
105 struct i2c_client *client;
106 struct input_dev *input;
107 char phys_name[32];
108 int irq;
109
110 u16 last_read_addr;
111 bool new_msgs;
112 u8 *last_message;
113
114 int valid_irq_counter;
115 int invalid_irq_counter;
116 int irq_counter;
117 int message_counter;
118 int read_fail_counter;
119
120
121 int bytes_to_read;
122
123 struct delayed_work dwork;
124 u8 xpos_format;
125 u8 ypos_format;
126
127 u8 numtouch;
128
129 struct mxt_device_info device_info;
130
131 u32 info_block_crc;
132 u32 configuration_crc;
133 u16 report_id_count;
134 struct report_id_map *rid_map;
135 struct mxt_object *object_table;
136
137 u16 msg_proc_addr;
138 u8 message_size;
139
140 u16 min_x_val;
141 u16 min_y_val;
142 u16 max_x_val;
143 u16 max_y_val;
144
145 int (*init_hw)(struct i2c_client *client);
146 int (*exit_hw)(struct i2c_client *client);
147 int (*power_on)(bool on);
148 u8 (*valid_interrupt)(void);
149 u8 (*read_chg)(void);
150
151 /* debugfs variables */
152 struct dentry *debug_dir;
153 int current_debug_datap;
154
155 struct mutex debug_mutex;
156 u16 *debug_data;
157
158 /* Character device variables */
159 struct cdev cdev;
160 struct cdev cdev_messages; /* 2nd Char dev for messages */
161 dev_t dev_num;
162 struct class *mxt_class;
163
164
165 u16 address_pointer;
166 bool valid_ap;
167
168 /* Message buffer & pointers */
169 char *messages;
170 int msg_buffer_startp, msg_buffer_endp;
171 /* Put only non-touch messages to buffer if this is set */
172 char nontouch_msg_only;
173 struct mutex msg_mutex;
174#if defined(CONFIG_HAS_EARLYSUSPEND)
175 struct early_suspend early_suspend;
176#endif
177 u8 t7_data[T7_DATA_SIZE];
178 bool is_suspended;
179};
180/*default value, enough to read versioning*/
181#define CONFIG_DATA_SIZE 6
182static u16 t38_size = CONFIG_DATA_SIZE;
183static int mxt_read_block(struct i2c_client *client, u16 addr, u16 length,
184 u8 *value);
185static int mxt_write_byte(struct i2c_client *client, u16 addr, u8 value);
186static int mxt_write_block(struct i2c_client *client, u16 addr, u16 length,
187 u8 *value);
188static u8 mxt_valid_interrupt_dummy(void)
189{
190 return 1;
191}
192
193#define I2C_RETRY_COUNT 5
194#define I2C_PAYLOAD_SIZE 254
195
196/* Returns the start address of object in mXT memory. */
197#define MXT_BASE_ADDR(object_type, mxt) \
198 get_object_address(object_type, 0, mxt->object_table, \
199 mxt->device_info.num_objs)
200
201/* Maps a report ID to an object type (object type number). */
202#define REPORT_ID_TO_OBJECT(rid, mxt) \
203 (((rid) == 0xff) ? 0 : mxt->rid_map[rid].object)
204
205/* Maps a report ID to an object type (string). */
206#define REPORT_ID_TO_OBJECT_NAME(rid, mxt) \
207 object_type_name[REPORT_ID_TO_OBJECT(rid, mxt)]
208
209/* Returns non-zero if given object is a touch object */
210#define IS_TOUCH_OBJECT(object) \
211 ((object == MXT_TOUCH_MULTITOUCHSCREEN_T9) || \
212 (object == MXT_TOUCH_KEYARRAY_T15) || \
213 (object == MXT_TOUCH_PROXIMITY_T23) || \
214 (object == MXT_TOUCH_SINGLETOUCHSCREEN_T10) || \
215 (object == MXT_TOUCH_XSLIDER_T11) || \
216 (object == MXT_TOUCH_YSLIDER_T12) || \
217 (object == MXT_TOUCH_XWHEEL_T13) || \
218 (object == MXT_TOUCH_YWHEEL_T14) || \
219 (object == MXT_TOUCH_KEYSET_T31) || \
220 (object == MXT_TOUCH_XSLIDERSET_T32) ? 1 : 0)
221
222#define mxt_debug(level, ...) \
223 do { \
224 if (debug >= (level)) \
225 pr_debug(__VA_ARGS__); \
226 } while (0)
227
228
229/*
230 * Check whether we have multi-touch enabled kernel; if not, report just the
231 * first touch (on mXT224, the maximum is 10 simultaneous touches).
232 * Because just the 1st one is reported, it might seem that the screen is not
233 * responding to touch if the first touch is removed while the screen is being
234 * touched by another finger, so beware.
235 *
236 */
237
238#ifdef ABS_MT_TRACKING_ID
239static inline void report_mt(int touch_number, int size, int x, int y, struct
240 mxt_data *mxt) {
241 input_report_abs(mxt->input, ABS_MT_TRACKING_ID, touch_number);
242 input_report_abs(mxt->input, ABS_MT_TOUCH_MAJOR, size);
243 input_report_abs(mxt->input, ABS_MT_POSITION_X, x);
244 input_report_abs(mxt->input, ABS_MT_POSITION_Y, y);
245 input_mt_sync(mxt->input);
246}
247#else
248static inline void report_mt(int touch_number, int size, int x, int y, struct
249 mxt_data *mxt) {
250 if (touch_number == 0) {
251 input_report_abs(mxt->input, ABS_TOOL_WIDTH, size);
252 input_report_abs(mxt->input, ABS_X, x);
253 input_report_abs(mxt->input, ABS_Y, y);
254 }
255}
256#endif
257
258
259static inline void report_gesture(int data, struct mxt_data *mxt)
260{
261 input_event(mxt->input, EV_MSC, MSC_GESTURE, data);
262}
263
264
265static const u8 *object_type_name[] = {
266 [0] = "Reserved",
267 [5] = "GEN_MESSAGEPROCESSOR_T5",
268 [6] = "GEN_COMMANDPROCESSOR_T6",
269 [7] = "GEN_POWERCONFIG_T7",
270 [8] = "GEN_ACQUIRECONFIG_T8",
271 [9] = "TOUCH_MULTITOUCHSCREEN_T9",
272 [15] = "TOUCH_KEYARRAY_T15",
273 [17] = "SPT_COMMSCONFIG_T18",
274 [19] = "SPT_GPIOPWM_T19",
275 [20] = "PROCI_GRIPFACESUPPRESSION_T20",
276 [22] = "PROCG_NOISESUPPRESSION_T22",
277 [23] = "TOUCH_PROXIMITY_T23",
278 [24] = "PROCI_ONETOUCHGESTUREPROCESSOR_T24",
279 [25] = "SPT_SELFTEST_T25",
280 [27] = "PROCI_TWOTOUCHGESTUREPROCESSOR_T27",
281 [28] = "SPT_CTECONFIG_T28",
282 [37] = "DEBUG_DIAGNOSTICS_T37",
283 [38] = "SPT_USER_DATA_T38",
284 [40] = "PROCI_GRIPSUPPRESSION_T40",
285 [41] = "PROCI_PALMSUPPRESSION_T41",
286 [42] = "PROCI_FACESUPPRESSION_T42",
287 [43] = "SPT_DIGITIZER_T43",
288 [44] = "SPT_MESSAGECOUNT_T44",
289};
290
291
292static u16 get_object_address(uint8_t object_type,
293 uint8_t instance,
294 struct mxt_object *object_table,
295 int max_objs);
296
297int mxt_write_ap(struct mxt_data *mxt, u16 ap);
298
299static int mxt_read_block_wo_addr(struct i2c_client *client,
300 u16 length,
301 u8 *value);
302
303ssize_t debug_data_read(struct mxt_data *mxt, char *buf, size_t count,
304 loff_t *ppos, u8 debug_command){
305 int i;
306 u16 *data;
307 u16 diagnostics_reg;
308 int offset = 0;
309 int size;
310 int read_size;
311 int error;
312 char *buf_start;
313 u16 debug_data_addr;
314 u16 page_address;
315 u8 page;
316 u8 debug_command_reg;
317
318 data = mxt->debug_data;
319 if (data == NULL)
320 return -EIO;
321
322 /* If first read after open, read all data to buffer. */
323 if (mxt->current_debug_datap == 0){
324
325 diagnostics_reg = MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6,
326 mxt) +
327 MXT_ADR_T6_DIAGNOSTIC;
328 if (count > (mxt->device_info.num_nodes * 2))
329 count = mxt->device_info.num_nodes;
330
331 debug_data_addr = MXT_BASE_ADDR(MXT_DEBUG_DIAGNOSTIC_T37, mxt)+
332 MXT_ADR_T37_DATA;
333 page_address = MXT_BASE_ADDR(MXT_DEBUG_DIAGNOSTIC_T37, mxt) +
334 MXT_ADR_T37_PAGE;
335 error = mxt_read_block(mxt->client, page_address, 1, &page);
336 if (error < 0)
337 return error;
338 mxt_debug(DEBUG_TRACE, "debug data page = %d\n", page);
339 while (page != 0) {
340 error = mxt_write_byte(mxt->client,
341 diagnostics_reg,
342 MXT_CMD_T6_PAGE_DOWN);
343 if (error < 0)
344 return error;
345 /* Wait for command to be handled; when it has, the
346 register will be cleared. */
347 debug_command_reg = 1;
348 while (debug_command_reg != 0) {
349 error = mxt_read_block(mxt->client,
350 diagnostics_reg, 1,
351 &debug_command_reg);
352 if (error < 0)
353 return error;
354 mxt_debug(DEBUG_TRACE,
355 "Waiting for debug diag command "
356 "to propagate...\n");
357
358 }
359 error = mxt_read_block(mxt->client, page_address, 1,
360 &page);
361 if (error < 0)
362 return error;
363 mxt_debug(DEBUG_TRACE, "debug data page = %d\n", page);
364 }
365
366 /*
367 * Lock mutex to prevent writing some unwanted data to debug
368 * command register. User can still write through the char
369 * device interface though. TODO: fix?
370 */
371
372 mutex_lock(&mxt->debug_mutex);
373 /* Configure Debug Diagnostics object to show deltas/refs */
374 error = mxt_write_byte(mxt->client, diagnostics_reg,
375 debug_command);
376
377 /* Wait for command to be handled; when it has, the
378 * register will be cleared. */
379 debug_command_reg = 1;
380 while (debug_command_reg != 0) {
381 error = mxt_read_block(mxt->client,
382 diagnostics_reg, 1,
383 &debug_command_reg);
384 if (error < 0)
385 return error;
386 mxt_debug(DEBUG_TRACE, "Waiting for debug diag command "
387 "to propagate...\n");
388
389 }
390
391 if (error < 0) {
392 printk (KERN_WARNING
393 "Error writing to maXTouch device!\n");
394 return error;
395 }
396
397 size = mxt->device_info.num_nodes * sizeof(u16);
398
399 while (size > 0) {
400 read_size = size > 128 ? 128 : size;
401 mxt_debug(DEBUG_TRACE,
402 "Debug data read loop, reading %d bytes...\n",
403 read_size);
404 error = mxt_read_block(mxt->client,
405 debug_data_addr,
406 read_size,
407 (u8 *) &data[offset]);
408 if (error < 0) {
409 printk(KERN_WARNING
410 "Error reading debug data\n");
411 goto error;
412 }
413 offset += read_size/2;
414 size -= read_size;
415
416 /* Select next page */
417 error = mxt_write_byte(mxt->client, diagnostics_reg,
418 MXT_CMD_T6_PAGE_UP);
419 if (error < 0) {
420 printk(KERN_WARNING
421 "Error writing to maXTouch device!\n");
422 goto error;
423 }
424 }
425 mutex_unlock(&mxt->debug_mutex);
426 }
427
428 buf_start = buf;
429 i = mxt->current_debug_datap;
430
431 while (((buf- buf_start) < (count - 6)) &&
432 (i < mxt->device_info.num_nodes)){
433
434 mxt->current_debug_datap++;
435 if (debug_command == MXT_CMD_T6_REFERENCES_MODE)
436 buf += sprintf(buf, "%d: %5d\n", i,
437 (u16) le16_to_cpu(data[i]));
438 else if (debug_command == MXT_CMD_T6_DELTAS_MODE)
439 buf += sprintf(buf, "%d: %5d\n", i,
440 (s16) le16_to_cpu(data[i]));
441 i++;
442 }
443
444 return (buf - buf_start);
445error:
446 mutex_unlock(&mxt->debug_mutex);
447 return error;
448}
449
450ssize_t deltas_read(struct file *file, char *buf, size_t count, loff_t *ppos)
451{
452 return debug_data_read(file->private_data, buf, count, ppos,
453 MXT_CMD_T6_DELTAS_MODE);
454}
455
456ssize_t refs_read(struct file *file, char *buf, size_t count,
457 loff_t *ppos)
458{
459 return debug_data_read(file->private_data, buf, count, ppos,
460 MXT_CMD_T6_REFERENCES_MODE);
461}
462
463int debug_data_open(struct inode *inode, struct file *file)
464{
465 struct mxt_data *mxt;
466 int i;
467 mxt = inode->i_private;
468 if (mxt == NULL)
469 return -EIO;
470 mxt->current_debug_datap = 0;
471 mxt->debug_data = kmalloc(mxt->device_info.num_nodes * sizeof(u16),
472 GFP_KERNEL);
473 if (mxt->debug_data == NULL)
474 return -ENOMEM;
475
476
477 for (i = 0; i < mxt->device_info.num_nodes; i++)
478 mxt->debug_data[i] = 7777;
479
480
481 file->private_data = mxt;
482 return 0;
483}
484
485int debug_data_release(struct inode *inode, struct file *file)
486{
487 struct mxt_data *mxt;
488 mxt = file->private_data;
489 kfree(mxt->debug_data);
490 return 0;
491}
492
493static struct file_operations delta_fops = {
494 .owner = THIS_MODULE,
495 .open = debug_data_open,
496 .release = debug_data_release,
497 .read = deltas_read,
498};
499
500static struct file_operations refs_fops = {
501 .owner = THIS_MODULE,
502 .open = debug_data_open,
503 .release = debug_data_release,
504 .read = refs_read,
505};
506
507
508int mxt_memory_open(struct inode *inode, struct file *file)
509{
510 struct mxt_data *mxt;
511 mxt = container_of(inode->i_cdev, struct mxt_data, cdev);
512 if (mxt == NULL)
513 return -EIO;
514 file->private_data = mxt;
515 return 0;
516}
517
518int mxt_message_open(struct inode *inode, struct file *file)
519{
520 struct mxt_data *mxt;
521 mxt = container_of(inode->i_cdev, struct mxt_data, cdev_messages);
522 if (mxt == NULL)
523 return -EIO;
524 file->private_data = mxt;
525 return 0;
526}
527
528
529ssize_t mxt_memory_read(struct file *file, char *buf, size_t count,
530 loff_t *ppos)
531{
532 int i;
533 struct mxt_data *mxt;
534
535 mxt = file->private_data;
536 if (mxt->valid_ap){
537 mxt_debug(DEBUG_TRACE, "Reading %d bytes from current ap\n",
538 (int) count);
539 i = mxt_read_block_wo_addr(mxt->client, count, (u8 *) buf);
540 } else {
541 mxt_debug(DEBUG_TRACE, "Address pointer changed since set;"
542 "writing AP (%d) before reading %d bytes",
543 mxt->address_pointer, (int) count);
544 i = mxt_read_block(mxt->client, mxt->address_pointer, count,
545 buf);
546 }
547
548 return i;
549}
550
551ssize_t mxt_memory_write(struct file *file, const char *buf, size_t count,
552 loff_t *ppos)
553{
554 int i;
555 int whole_blocks;
556 int last_block_size;
557 struct mxt_data *mxt;
558 u16 address;
559
560 mxt = file->private_data;
561 address = mxt->address_pointer;
562
563 mxt_debug(DEBUG_TRACE, "mxt_memory_write entered\n");
564 whole_blocks = count / I2C_PAYLOAD_SIZE;
565 last_block_size = count % I2C_PAYLOAD_SIZE;
566
567 for (i = 0; i < whole_blocks; i++) {
568 mxt_debug(DEBUG_TRACE, "About to write to %d...",
569 address);
570 mxt_write_block(mxt->client, address, I2C_PAYLOAD_SIZE,
571 (u8 *) buf);
572 address += I2C_PAYLOAD_SIZE;
573 buf += I2C_PAYLOAD_SIZE;
574 }
575
576 mxt_write_block(mxt->client, address, last_block_size, (u8 *) buf);
577
578 return count;
579}
580
581static long mxt_ioctl(struct file *file,
582 unsigned int cmd, unsigned long arg)
583{
584 int retval;
585 struct mxt_data *mxt;
586
587 retval = 0;
588 mxt = file->private_data;
589
590 switch (cmd) {
591 case MXT_SET_ADDRESS_IOCTL:
592 retval = mxt_write_ap(mxt, (u16) arg);
593 if (retval >= 0) {
594 mxt->address_pointer = (u16) arg;
595 mxt->valid_ap = 1;
596 }
597 break;
598 case MXT_RESET_IOCTL:
599 retval = mxt_write_byte(mxt->client,
600 MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6, mxt) +
601 MXT_ADR_T6_RESET,
602 1);
603 break;
604 case MXT_CALIBRATE_IOCTL:
605 retval = mxt_write_byte(mxt->client,
606 MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6, mxt) +
607 MXT_ADR_T6_CALIBRATE,
608 1);
609
610 break;
611 case MXT_BACKUP_IOCTL:
612 retval = mxt_write_byte(mxt->client,
613 MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6, mxt) +
614 MXT_ADR_T6_BACKUPNV,
615 MXT_CMD_T6_BACKUP);
616 break;
617 case MXT_NONTOUCH_MSG_IOCTL:
618 mxt->nontouch_msg_only = 1;
619 break;
620 case MXT_ALL_MSG_IOCTL:
621 mxt->nontouch_msg_only = 0;
622 break;
623 default:
624 return -EIO;
625 }
626
627 return retval;
628}
629
630/*
631 * Copies messages from buffer to user space.
632 *
633 * NOTE: if less than (mxt->message_size * 5 + 1) bytes requested,
634 * this will return 0!
635 *
636 */
637ssize_t mxt_message_read(struct file *file, char *buf, size_t count,
638 loff_t *ppos)
639{
640 int i;
641 struct mxt_data *mxt;
642 char *buf_start;
643
644 mxt = file->private_data;
645 if (mxt == NULL)
646 return -EIO;
647 buf_start = buf;
648
649 mutex_lock(&mxt->msg_mutex);
650 /* Copy messages until buffer empty, or 'count' bytes written */
651 while ((mxt->msg_buffer_startp != mxt->msg_buffer_endp) &&
652 ((buf - buf_start) < (count - (5 * mxt->message_size) - 1))){
653
654 for (i = 0; i < mxt->message_size; i++){
655 buf += sprintf(buf, "[%2X] ",
656 *(mxt->messages + mxt->msg_buffer_endp *
657 mxt->message_size + i));
658 }
659 buf += sprintf(buf, "\n");
660 if (mxt->msg_buffer_endp < MXT_MESSAGE_BUFFER_SIZE)
661 mxt->msg_buffer_endp++;
662 else
663 mxt->msg_buffer_endp = 0;
664 }
665 mutex_unlock(&mxt->msg_mutex);
666 return (buf - buf_start);
667}
668
669static struct file_operations mxt_message_fops = {
670 .owner = THIS_MODULE,
671 .open = mxt_message_open,
672 .read = mxt_message_read,
673};
674
675static struct file_operations mxt_memory_fops = {
676 .owner = THIS_MODULE,
677 .open = mxt_memory_open,
678 .read = mxt_memory_read,
679 .write = mxt_memory_write,
680 .unlocked_ioctl = mxt_ioctl,
681};
682
683
684/* Writes the address pointer (to set up following reads). */
685
686int mxt_write_ap(struct mxt_data *mxt, u16 ap)
687{
688 struct i2c_client *client;
689 __le16 le_ap = cpu_to_le16(ap);
690 client = mxt->client;
691 if (mxt != NULL)
692 mxt->last_read_addr = -1;
693 if (i2c_master_send(client, (u8 *) &le_ap, 2) == 2) {
694 mxt_debug(DEBUG_TRACE, "Address pointer set to %d\n", ap);
695 return 0;
696 } else {
697 mxt_debug(DEBUG_INFO, "Error writing address pointer!\n");
698 return -EIO;
699 }
700}
701
702
703
704/* Calculates the 24-bit CRC sum. */
705static u32 CRC_24(u32 crc, u8 byte1, u8 byte2)
706{
707 static const u32 crcpoly = 0x80001B;
708 u32 result;
709 u32 data_word;
710
711 data_word = ((((u16) byte2) << 8u) | byte1);
712 result = ((crc << 1u) ^ data_word);
713 if (result & 0x1000000)
714 result ^= crcpoly;
715 return result;
716}
717
718/* Returns object address in mXT chip, or zero if object is not found */
719static u16 get_object_address(uint8_t object_type,
720 uint8_t instance,
721 struct mxt_object *object_table,
722 int max_objs)
723{
724 uint8_t object_table_index = 0;
725 uint8_t address_found = 0;
726 uint16_t address = 0;
727 struct mxt_object *obj;
728
729 while ((object_table_index < max_objs) && !address_found) {
730 obj = &object_table[object_table_index];
731 if (obj->type == object_type) {
732 address_found = 1;
733 /* Are there enough instances defined in the FW? */
734 if (obj->instances >= instance) {
735 address = obj->chip_addr +
736 (obj->size + 1) * instance;
737 } else {
738 return 0;
739 }
740 }
741 object_table_index++;
742 }
743 return address;
744}
745
746
747/*
748 * Reads a block of bytes from given address from mXT chip. If we are
749 * reading from message window, and previous read was from message window,
750 * there's no need to write the address pointer: the mXT chip will
751 * automatically set the address pointer back to message window start.
752 */
753
754static int mxt_read_block(struct i2c_client *client,
755 u16 addr,
756 u16 length,
757 u8 *value)
758{
759 struct i2c_adapter *adapter = client->adapter;
760 struct i2c_msg msg[2];
761 __le16 le_addr;
762 struct mxt_data *mxt;
763
764 mxt = i2c_get_clientdata(client);
765
766 if (mxt != NULL) {
767 if ((mxt->last_read_addr == addr) &&
768 (addr == mxt->msg_proc_addr)) {
769 if (i2c_master_recv(client, value, length) == length)
770 return length;
771 else
772 return -EIO;
773 } else {
774 mxt->last_read_addr = addr;
775 }
776 }
777
778 mxt_debug(DEBUG_TRACE, "Writing address pointer & reading %d bytes "
779 "in on i2c transaction...\n", length);
780
781 le_addr = cpu_to_le16(addr);
782 msg[0].addr = client->addr;
783 msg[0].flags = 0x00;
784 msg[0].len = 2;
785 msg[0].buf = (u8 *) &le_addr;
786
787 msg[1].addr = client->addr;
788 msg[1].flags = I2C_M_RD;
789 msg[1].len = length;
790 msg[1].buf = (u8 *) value;
791 if (i2c_transfer(adapter, msg, 2) == 2)
792 return length;
793 else
794 return -EIO;
795
796}
797
798/* Reads a block of bytes from current address from mXT chip. */
799
800static int mxt_read_block_wo_addr(struct i2c_client *client,
801 u16 length,
802 u8 *value)
803{
804
805
806 if (i2c_master_recv(client, value, length) == length) {
807 mxt_debug(DEBUG_TRACE, "I2C block read ok\n");
808 return length;
809 } else {
810 mxt_debug(DEBUG_INFO, "I2C block read failed\n");
811 return -EIO;
812 }
813
814}
815
816
817/* Writes one byte to given address in mXT chip. */
818
819static int mxt_write_byte(struct i2c_client *client, u16 addr, u8 value)
820{
821 struct {
822 __le16 le_addr;
823 u8 data;
824
825 } i2c_byte_transfer;
826
827 struct mxt_data *mxt;
828
829 mxt = i2c_get_clientdata(client);
830 if (mxt != NULL)
831 mxt->last_read_addr = -1;
832 i2c_byte_transfer.le_addr = cpu_to_le16(addr);
833 i2c_byte_transfer.data = value;
834 if (i2c_master_send(client, (u8 *) &i2c_byte_transfer, 3) == 3)
835 return 0;
836 else
837 return -EIO;
838}
839
840
841/* Writes a block of bytes (max 256) to given address in mXT chip. */
842static int mxt_write_block(struct i2c_client *client,
843 u16 addr,
844 u16 length,
845 u8 *value)
846{
847 int i;
848 struct {
849 __le16 le_addr;
850 u8 data[256];
851
852 } i2c_block_transfer;
853
854 struct mxt_data *mxt;
855
856 mxt_debug(DEBUG_TRACE, "Writing %d bytes to %d...", length, addr);
857 if (length > 256)
858 return -EINVAL;
859 mxt = i2c_get_clientdata(client);
860 if (mxt != NULL)
861 mxt->last_read_addr = -1;
862 for (i = 0; i < length; i++)
863 i2c_block_transfer.data[i] = *value++;
864 i2c_block_transfer.le_addr = cpu_to_le16(addr);
865 i = i2c_master_send(client, (u8 *) &i2c_block_transfer, length + 2);
866 if (i == (length + 2))
867 return length;
868 else
869 return -EIO;
870}
871
872/* Calculates the CRC value for mXT infoblock. */
873int calculate_infoblock_crc(u32 *crc_result, u8 *data, int crc_area_size)
874{
875 u32 crc = 0;
876 int i;
877
878 for (i = 0; i < (crc_area_size - 1); i = i + 2)
879 crc = CRC_24(crc, *(data + i), *(data + i + 1));
880 /* If uneven size, pad with zero */
881 if (crc_area_size & 0x0001)
882 crc = CRC_24(crc, *(data + i), 0);
883 /* Return only 24 bits of CRC. */
884 *crc_result = (crc & 0x00FFFFFF);
885
886 return 0;
887}
888
889/* Processes a touchscreen message. */
890void process_T9_message(u8 *message, struct mxt_data *mxt, int last_touch)
891{
892
893 struct input_dev *input;
894 u8 status;
895 u16 xpos = 0xFFFF;
896 u16 ypos = 0xFFFF;
897 u8 touch_size = 255;
898 u8 touch_number;
899 u8 amplitude;
900 u8 report_id;
901
902 static int stored_size[10];
903 static int stored_x[10];
904 static int stored_y[10];
905 int i;
906 int active_touches = 0;
907 /*
908 * If the 'last_touch' flag is set, we have received all the touch
909 * messages
910 * there are available in this cycle, so send the events for touches
911 * that are
912 * active.
913 */
914 if (last_touch){
915 /* TODO: For compatibility with single-touch systems, send ABS_X &
916 * ABS_Y */
917 /*
918 if (stored_size[0]){
919 input_report_abs(mxt->input, ABS_X, stored_x[0]);
920 input_report_abs(mxt->input, ABS_Y, stored_y[0]);
921 }*/
922
923
924 for (i = 0; i < 10; i++){
925 if (stored_size[i]){
926 active_touches++;
927 input_report_abs(mxt->input,
928 ABS_MT_TRACKING_ID,
929 i);
930 input_report_abs(mxt->input,
931 ABS_MT_TOUCH_MAJOR,
932 stored_size[i]);
933 input_report_abs(mxt->input,
934 ABS_MT_POSITION_X,
935 stored_x[i]);
936 input_report_abs(mxt->input,
937 ABS_MT_POSITION_Y,
938 stored_y[i]);
939 input_mt_sync(mxt->input);
940 }
941 }
942 if (active_touches == 0)
943 input_mt_sync(mxt->input);
944 input_sync(mxt->input);
945
946 }else{
947
948 input = mxt->input;
949 status = message[MXT_MSG_T9_STATUS];
950 report_id = message[0];
951
952 if (status & MXT_MSGB_T9_SUPPRESS) {
953 /* Touch has been suppressed by grip/face */
954 /* detection */
955 mxt_debug(DEBUG_TRACE, "SUPRESS");
956 } else {
957 /* Put together the 10-/12-bit coordinate values. */
958 xpos = message[MXT_MSG_T9_XPOSMSB] * 16 +
959 ((message[MXT_MSG_T9_XYPOSLSB] >> 4) & 0xF);
960 ypos = message[MXT_MSG_T9_YPOSMSB] * 16 +
961 ((message[MXT_MSG_T9_XYPOSLSB] >> 0) & 0xF);
962
963 if (mxt->max_x_val < 1024)
964 xpos >>= 2;
965 if (mxt->max_y_val < 1024)
966 ypos >>= 2;
967
968 touch_number = message[MXT_MSG_REPORTID] -
969 mxt->rid_map[report_id].first_rid;
970
971 stored_x[touch_number] = xpos;
972 stored_y[touch_number] = ypos;
973
974 if (status & MXT_MSGB_T9_DETECT) {
975 /*
976 * mXT224 reports the number of touched nodes,
977 * so the exact value for touch ellipse major
978 * axis length in nodes would be 2*sqrt(touch_size/pi)
979 * (assuming round touch shape), which would then need
980 * to be scaled using information about how many sensor
981 * lines we do have. So this is very much simplified,
982 * but sufficient for most if not all apps?
983 */
984 touch_size = message[MXT_MSG_T9_TCHAREA];
985 touch_size = touch_size >> 2;
986 if (!touch_size)
987 touch_size = 1;
988 /*
989 * report_mt(touch_number, touch_size, xpos, ypos, mxt);
990 */
991
992 stored_size[touch_number] = touch_size;
993
994 if (status & MXT_MSGB_T9_AMP)
995 /* Amplitude of touch has changed */
996 amplitude = message[MXT_MSG_T9_TCHAMPLITUDE];
997 }
998
999 if (status & MXT_MSGB_T9_RELEASE) {
1000 /* The previously reported touch has been removed.*/
1001 /* report_mt(touch_number, 0, xpos, ypos, mxt); */
1002 stored_size[touch_number] = 0;
1003 }
1004
1005 /* input_sync(input); */
1006 }
1007
1008 if (status & MXT_MSGB_T9_SUPPRESS) {
1009 mxt_debug(DEBUG_TRACE, "SUPRESS");
1010 } else {
1011 if (status & MXT_MSGB_T9_DETECT) {
1012 mxt_debug(DEBUG_TRACE, "DETECT:%s%s%s%s",
1013 ((status & MXT_MSGB_T9_PRESS) ? " PRESS" : ""),
1014 ((status & MXT_MSGB_T9_MOVE) ? " MOVE" : ""),
1015 ((status & MXT_MSGB_T9_AMP) ? " AMP" : ""),
1016 ((status & MXT_MSGB_T9_VECTOR) ? " VECT" : ""));
1017
1018 } else if (status & MXT_MSGB_T9_RELEASE) {
1019 mxt_debug(DEBUG_TRACE, "RELEASE");
1020 }
1021 }
1022 mxt_debug(DEBUG_TRACE, "X=%d, Y=%d, TOUCHSIZE=%d",
1023 xpos, ypos, touch_size);
1024 }
1025 return;
1026}
1027
1028
1029int process_message(u8 *message, u8 object, struct mxt_data *mxt)
1030{
1031 struct i2c_client *client;
1032 u8 status;
1033 u16 xpos = 0xFFFF;
1034 u16 ypos = 0xFFFF;
1035 u8 event;
1036 u8 direction;
1037 u16 distance;
1038 u8 length;
1039 u8 report_id;
1040 static u8 error_cond = 0;
1041
1042 client = mxt->client;
1043 length = mxt->message_size;
1044 report_id = message[0];
1045
1046 if ((mxt->nontouch_msg_only == 0) ||
1047 (!IS_TOUCH_OBJECT(object))){
1048 mutex_lock(&mxt->msg_mutex);
1049 /* Copy the message to buffer */
1050 if (mxt->msg_buffer_startp < MXT_MESSAGE_BUFFER_SIZE) {
1051 mxt->msg_buffer_startp++;
1052 } else {
1053 mxt->msg_buffer_startp = 0;
1054 }
1055
1056 if (mxt->msg_buffer_startp == mxt->msg_buffer_endp) {
1057 mxt_debug(DEBUG_TRACE,
1058 "Message buf full, discarding last entry.\n");
1059 if (mxt->msg_buffer_endp < MXT_MESSAGE_BUFFER_SIZE) {
1060 mxt->msg_buffer_endp++;
1061 } else {
1062 mxt->msg_buffer_endp = 0;
1063 }
1064 }
1065 memcpy((mxt->messages + mxt->msg_buffer_startp * length),
1066 message,
1067 length);
1068 mutex_unlock(&mxt->msg_mutex);
1069 }
1070
1071 switch (object) {
1072 case MXT_GEN_COMMANDPROCESSOR_T6:
1073 status = message[1];
1074
1075 if (status & MXT_MSGB_T6_COMSERR) {
1076 if ((!error_cond) & MXT_MSGB_T6_COMSERR){
1077 dev_err(&client->dev,
1078 "maXTouch checksum error\n");
1079 error_cond |= MXT_MSGB_T6_COMSERR;
1080 }
1081 }
1082 if (status & MXT_MSGB_T6_CFGERR) {
1083 /*
1084 * Configuration error. A proper configuration
1085 * needs to be written to chip and backed up.
1086 */
1087 if ((!error_cond) & MXT_MSGB_T6_CFGERR){
1088 dev_err(&client->dev,
1089 "maXTouch configuration error\n");
1090 error_cond |= MXT_MSGB_T6_CFGERR;
1091 }
1092 }
1093 if (status & MXT_MSGB_T6_CAL) {
1094 /* Calibration in action, no need to react */
1095 dev_dbg(&client->dev,
1096 "maXTouch calibration in progress\n");
1097 }
1098 if (status & MXT_MSGB_T6_SIGERR) {
1099 /*
1100 * Signal acquisition error, something is seriously
1101 * wrong, not much we can in the driver to correct
1102 * this
1103 */
1104 if ((!error_cond) & MXT_MSGB_T6_SIGERR){
1105 dev_err(&client->dev,
1106 "maXTouch acquisition error\n");
1107 error_cond |= MXT_MSGB_T6_SIGERR;
1108 }
1109 }
1110 if (status & MXT_MSGB_T6_OFL) {
1111 /*
1112 * Cycle overflow, the acquisition interval is too
1113 * short.
1114 */
1115 dev_err(&client->dev,
1116 "maXTouch cycle overflow\n");
1117 }
1118 if (status & MXT_MSGB_T6_RESET) {
1119 /* Chip has reseted, no need to react. */
1120 dev_dbg(&client->dev,
1121 "maXTouch chip reset\n");
1122 }
1123 if (status == 0) {
1124 /* Chip status back to normal. */
1125 dev_dbg(&client->dev,
1126 "maXTouch status normal\n");
1127 error_cond = 0;
1128 }
1129 break;
1130
1131 case MXT_TOUCH_MULTITOUCHSCREEN_T9:
1132 process_T9_message(message, mxt, 0);
1133 break;
1134
1135 case MXT_SPT_GPIOPWM_T19:
1136 if (debug >= DEBUG_TRACE)
1137 dev_info(&client->dev,
1138 "Receiving GPIO message\n");
1139 break;
1140
1141 case MXT_PROCI_GRIPFACESUPPRESSION_T20:
1142 if (debug >= DEBUG_TRACE)
1143 dev_info(&client->dev,
1144 "Receiving face suppression msg\n");
1145 break;
1146
1147 case MXT_PROCG_NOISESUPPRESSION_T22:
1148 if (debug >= DEBUG_TRACE)
1149 dev_info(&client->dev,
1150 "Receiving noise suppression msg\n");
1151 status = message[MXT_MSG_T22_STATUS];
1152 if (status & MXT_MSGB_T22_FHCHG) {
1153 if (debug >= DEBUG_TRACE)
1154 dev_info(&client->dev,
1155 "maXTouch: Freq changed\n");
1156 }
1157 if (status & MXT_MSGB_T22_GCAFERR) {
1158 if (debug >= DEBUG_TRACE)
1159 dev_info(&client->dev,
1160 "maXTouch: High noise "
1161 "level\n");
1162 }
1163 if (status & MXT_MSGB_T22_FHERR) {
1164 if (debug >= DEBUG_TRACE)
1165 dev_info(&client->dev,
1166 "maXTouch: Freq changed - "
1167 "Noise level too high\n");
1168 }
1169 break;
1170
1171 case MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24:
1172 if (debug >= DEBUG_TRACE)
1173 dev_info(&client->dev,
1174 "Receiving one-touch gesture msg\n");
1175
1176 event = message[MXT_MSG_T24_STATUS] & 0x0F;
1177 xpos = message[MXT_MSG_T24_XPOSMSB] * 16 +
1178 ((message[MXT_MSG_T24_XYPOSLSB] >> 4) & 0x0F);
1179 ypos = message[MXT_MSG_T24_YPOSMSB] * 16 +
1180 ((message[MXT_MSG_T24_XYPOSLSB] >> 0) & 0x0F);
1181 if (mxt->max_x_val < 1024)
1182 xpos >>= 2;
1183 if (mxt->max_y_val < 1024)
1184 ypos >>= 2;
1185 direction = message[MXT_MSG_T24_DIR];
1186 distance = message[MXT_MSG_T24_DIST] +
1187 (message[MXT_MSG_T24_DIST + 1] << 16);
1188
1189 report_gesture((event << 24) | (direction << 16) | distance,
1190 mxt);
1191 report_gesture((xpos << 16) | ypos, mxt);
1192
1193 break;
1194
1195 case MXT_SPT_SELFTEST_T25:
1196 if (debug >= DEBUG_TRACE)
1197 dev_info(&client->dev,
1198 "Receiving Self-Test msg\n");
1199
1200 if (message[MXT_MSG_T25_STATUS] == MXT_MSGR_T25_OK) {
1201 if (debug >= DEBUG_TRACE)
1202 dev_info(&client->dev,
1203 "maXTouch: Self-Test OK\n");
1204
1205 } else {
1206 dev_err(&client->dev,
1207 "maXTouch: Self-Test Failed [%02x]:"
1208 "{%02x,%02x,%02x,%02x,%02x}\n",
1209 message[MXT_MSG_T25_STATUS],
1210 message[MXT_MSG_T25_STATUS + 0],
1211 message[MXT_MSG_T25_STATUS + 1],
1212 message[MXT_MSG_T25_STATUS + 2],
1213 message[MXT_MSG_T25_STATUS + 3],
1214 message[MXT_MSG_T25_STATUS + 4]
1215 );
1216 }
1217 break;
1218
1219 case MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27:
1220 if (debug >= DEBUG_TRACE)
1221 dev_info(&client->dev,
1222 "Receiving 2-touch gesture message\n");
1223
1224 event = message[MXT_MSG_T27_STATUS] & 0xF0;
1225 xpos = message[MXT_MSG_T27_XPOSMSB] * 16 +
1226 ((message[MXT_MSG_T27_XYPOSLSB] >> 4) & 0x0F);
1227 ypos = message[MXT_MSG_T27_YPOSMSB] * 16 +
1228 ((message[MXT_MSG_T27_XYPOSLSB] >> 0) & 0x0F);
1229 if (mxt->max_x_val < 1024)
1230 xpos >>= 2;
1231 if (mxt->max_y_val < 1024)
1232 ypos >>= 2;
1233
1234 direction = message[MXT_MSG_T27_ANGLE];
1235 distance = message[MXT_MSG_T27_SEPARATION] +
1236 (message[MXT_MSG_T27_SEPARATION + 1] << 16);
1237
1238 report_gesture((event << 24) | (direction << 16) | distance,
1239 mxt);
1240 report_gesture((xpos << 16) | ypos, mxt);
1241
1242
1243 break;
1244
1245 case MXT_SPT_CTECONFIG_T28:
1246 if (debug >= DEBUG_TRACE)
1247 dev_info(&client->dev,
1248 "Receiving CTE message...\n");
1249 status = message[MXT_MSG_T28_STATUS];
1250 if (status & MXT_MSGB_T28_CHKERR)
1251 dev_err(&client->dev,
1252 "maXTouch: Power-Up CRC failure\n");
1253
1254 break;
1255 default:
1256 if (debug >= DEBUG_TRACE)
1257 dev_info(&client->dev,
1258 "maXTouch: Unknown message!\n");
1259
1260 break;
1261 }
1262
1263 return 0;
1264}
1265
1266
1267/*
1268 * Processes messages when the interrupt line (CHG) is asserted. Keeps
1269 * reading messages until a message with report ID 0xFF is received,
1270 * which indicates that there is no more new messages.
1271 *
1272 */
1273
1274static void mxt_worker(struct work_struct *work)
1275{
1276 struct mxt_data *mxt;
1277 struct i2c_client *client;
1278
1279 u8 *message;
1280 u16 message_length;
1281 u16 message_addr;
1282 u8 report_id;
1283 u8 object;
1284 int error;
1285 int i;
1286 char *message_string;
1287 char *message_start;
1288
1289 message = NULL;
1290 mxt = container_of(work, struct mxt_data, dwork.work);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001291 client = mxt->client;
1292 message_addr = mxt->msg_proc_addr;
1293 message_length = mxt->message_size;
1294
1295 if (message_length < 256) {
1296 message = kmalloc(message_length, GFP_KERNEL);
1297 if (message == NULL) {
1298 dev_err(&client->dev, "Error allocating memory\n");
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301299 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001300 }
1301 } else {
1302 dev_err(&client->dev,
1303 "Message length larger than 256 bytes not supported\n");
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301304 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001305 }
1306
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301307 mxt_debug(DEBUG_TRACE, "maXTouch worker active:\n");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001308
1309 do {
1310 /* Read next message, reread on failure. */
1311 /* TODO: message length, CRC included? */
1312 mxt->message_counter++;
1313 for (i = 1; i < I2C_RETRY_COUNT; i++) {
1314 error = mxt_read_block(client,
1315 message_addr,
1316 message_length - 1,
1317 message);
1318 if (error >= 0)
1319 break;
1320 mxt->read_fail_counter++;
1321 dev_err(&client->dev,
1322 "Failure reading maxTouch device\n");
1323 }
1324 if (error < 0) {
1325 kfree(message);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301326 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001327 }
1328
1329 if (mxt->address_pointer != message_addr)
1330 mxt->valid_ap = 0;
1331 report_id = message[0];
1332
1333 if (debug >= DEBUG_RAW) {
1334 mxt_debug(DEBUG_RAW, "%s message [msg count: %08x]:",
1335 REPORT_ID_TO_OBJECT_NAME(report_id, mxt),
1336 mxt->message_counter
1337 );
1338 /* 5 characters per one byte */
1339 message_string = kmalloc(message_length * 5,
1340 GFP_KERNEL);
1341 if (message_string == NULL) {
1342 dev_err(&client->dev,
1343 "Error allocating memory\n");
1344 kfree(message);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301345 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001346 }
1347 message_start = message_string;
1348 for (i = 0; i < message_length; i++) {
1349 message_string +=
1350 sprintf(message_string,
1351 "0x%02X ", message[i]);
1352 }
1353 mxt_debug(DEBUG_RAW, "%s", message_start);
1354 kfree(message_start);
1355 }
1356
1357 if ((report_id != MXT_END_OF_MESSAGES) && (report_id != 0)) {
1358 memcpy(mxt->last_message, message, message_length);
1359 mxt->new_msgs = 1;
1360 smp_wmb();
1361 /* Get type of object and process the message */
1362 object = mxt->rid_map[report_id].object;
1363 process_message(message, object, mxt);
1364 }
1365
1366 mxt_debug(DEBUG_TRACE, "chgline: %d\n", mxt->read_chg());
1367 } while (comms ? (mxt->read_chg() == 0) :
1368 ((report_id != MXT_END_OF_MESSAGES) && (report_id != 0)));
1369
1370 /* All messages processed, send the events) */
1371 process_T9_message(NULL, mxt, 1);
1372
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001373 kfree(message);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301374
1375fail_worker:
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001376 /* Make sure we just didn't miss a interrupt. */
1377 if (mxt->read_chg() == 0){
1378 schedule_delayed_work(&mxt->dwork, 0);
Anirudh Ghayal61d88f72011-10-17 11:28:02 +05301379 } else
1380 enable_irq(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001381}
1382
1383
1384/*
1385 * The maXTouch device will signal the host about a new message by asserting
1386 * the CHG line. This ISR schedules a worker routine to read the message when
1387 * that happens.
1388 */
1389
1390static irqreturn_t mxt_irq_handler(int irq, void *_mxt)
1391{
1392 struct mxt_data *mxt = _mxt;
1393
1394 mxt->irq_counter++;
1395 if (mxt->valid_interrupt()) {
1396 /* Send the signal only if falling edge generated the irq. */
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301397 disable_irq_nosync(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001398 schedule_delayed_work(&mxt->dwork, 0);
1399 mxt->valid_irq_counter++;
1400 } else {
1401 mxt->invalid_irq_counter++;
1402 return IRQ_NONE;
1403 }
1404
1405 return IRQ_HANDLED;
1406}
1407
1408
1409
1410/******************************************************************************/
1411/* Initialization of driver */
1412/******************************************************************************/
1413
1414static int __devinit mxt_identify(struct i2c_client *client,
1415 struct mxt_data *mxt,
1416 u8 *id_block_data)
1417{
1418 u8 buf[MXT_ID_BLOCK_SIZE];
1419 int error;
1420 int identified;
1421
1422 identified = 0;
1423
1424 /* Read Device info to check if chip is valid */
1425 error = mxt_read_block(client, MXT_ADDR_INFO_BLOCK, MXT_ID_BLOCK_SIZE,
1426 (u8 *) buf);
1427
1428 if (error < 0) {
1429 mxt->read_fail_counter++;
1430 dev_err(&client->dev, "Failure accessing maXTouch device\n");
1431 return -EIO;
1432 }
1433
1434 memcpy(id_block_data, buf, MXT_ID_BLOCK_SIZE);
1435
1436 mxt->device_info.family_id = buf[0];
1437 mxt->device_info.variant_id = buf[1];
1438 mxt->device_info.major = ((buf[2] >> 4) & 0x0F);
1439 mxt->device_info.minor = (buf[2] & 0x0F);
1440 mxt->device_info.build = buf[3];
1441 mxt->device_info.x_size = buf[4];
1442 mxt->device_info.y_size = buf[5];
1443 mxt->device_info.num_objs = buf[6];
1444 mxt->device_info.num_nodes = mxt->device_info.x_size *
1445 mxt->device_info.y_size;
1446
1447 /*
1448 * Check Family & Variant Info; warn if not recognized but
1449 * still continue.
1450 */
1451
1452 /* MXT224 */
1453 if (mxt->device_info.family_id == MXT224_FAMILYID) {
1454 strcpy(mxt->device_info.family_name, "mXT224");
1455
1456 if (mxt->device_info.variant_id == MXT224_CAL_VARIANTID) {
1457 strcpy(mxt->device_info.variant_name, "Calibrated");
1458 } else if (mxt->device_info.variant_id ==
1459 MXT224_UNCAL_VARIANTID) {
1460 strcpy(mxt->device_info.variant_name, "Uncalibrated");
1461 } else {
1462 dev_err(&client->dev,
1463 "Warning: maXTouch Variant ID [%d] not "
1464 "supported\n",
1465 mxt->device_info.variant_id);
1466 strcpy(mxt->device_info.variant_name, "UNKNOWN");
1467 /* identified = -ENXIO; */
1468 }
1469
1470 /* MXT1386 */
1471 } else if (mxt->device_info.family_id == MXT1386_FAMILYID) {
1472 strcpy(mxt->device_info.family_name, "mXT1386");
1473
1474 if (mxt->device_info.variant_id == MXT1386_CAL_VARIANTID) {
1475 strcpy(mxt->device_info.variant_name, "Calibrated");
1476 } else {
1477 dev_err(&client->dev,
1478 "Warning: maXTouch Variant ID [%d] not "
1479 "supported\n",
1480 mxt->device_info.variant_id);
1481 strcpy(mxt->device_info.variant_name, "UNKNOWN");
1482 /* identified = -ENXIO; */
1483 }
1484 /* Unknown family ID! */
1485 } else {
1486 dev_err(&client->dev,
1487 "Warning: maXTouch Family ID [%d] not supported\n",
1488 mxt->device_info.family_id);
1489 strcpy(mxt->device_info.family_name, "UNKNOWN");
1490 strcpy(mxt->device_info.variant_name, "UNKNOWN");
1491 /* identified = -ENXIO; */
1492 }
1493
1494 dev_info(
1495 &client->dev,
1496 "Atmel maXTouch (Family %s (%X), Variant %s (%X)) Firmware "
1497 "version [%d.%d] Build %d\n",
1498 mxt->device_info.family_name,
1499 mxt->device_info.family_id,
1500 mxt->device_info.variant_name,
1501 mxt->device_info.variant_id,
1502 mxt->device_info.major,
1503 mxt->device_info.minor,
1504 mxt->device_info.build
1505 );
1506 dev_dbg(
1507 &client->dev,
1508 "Atmel maXTouch Configuration "
1509 "[X: %d] x [Y: %d]\n",
1510 mxt->device_info.x_size,
1511 mxt->device_info.y_size
1512 );
1513 return identified;
1514}
1515
1516/*
1517 * Reads the object table from maXTouch chip to get object data like
1518 * address, size, report id. For Info Block CRC calculation, already read
1519 * id data is passed to this function too (Info Block consists of the ID
1520 * block and object table).
1521 *
1522 */
1523static int __devinit mxt_read_object_table(struct i2c_client *client,
1524 struct mxt_data *mxt,
1525 u8 *raw_id_data)
1526{
1527 u16 report_id_count;
1528 u8 buf[MXT_OBJECT_TABLE_ELEMENT_SIZE];
1529 u8 *raw_ib_data;
1530 u8 object_type;
1531 u16 object_address;
1532 u16 object_size;
1533 u8 object_instances;
1534 u8 object_report_ids;
1535 u16 object_info_address;
1536 u32 crc;
1537 u32 calculated_crc;
1538 int i;
1539 int error;
1540
1541 u8 object_instance;
1542 u8 object_report_id;
1543 u8 report_id;
1544 int first_report_id;
1545 int ib_pointer;
1546 struct mxt_object *object_table;
1547
1548 mxt_debug(DEBUG_TRACE, "maXTouch driver reading configuration\n");
1549
1550 object_table = kzalloc(sizeof(struct mxt_object) *
1551 mxt->device_info.num_objs,
1552 GFP_KERNEL);
1553 if (object_table == NULL) {
1554 printk(KERN_WARNING "maXTouch: Memory allocation failed!\n");
1555 error = -ENOMEM;
1556 goto err_object_table_alloc;
1557 }
1558
1559 raw_ib_data = kmalloc(MXT_OBJECT_TABLE_ELEMENT_SIZE *
1560 mxt->device_info.num_objs + MXT_ID_BLOCK_SIZE,
1561 GFP_KERNEL);
1562 if (raw_ib_data == NULL) {
1563 printk(KERN_WARNING "maXTouch: Memory allocation failed!\n");
1564 error = -ENOMEM;
1565 goto err_ib_alloc;
1566 }
1567
1568 /* Copy the ID data for CRC calculation. */
1569 memcpy(raw_ib_data, raw_id_data, MXT_ID_BLOCK_SIZE);
1570 ib_pointer = MXT_ID_BLOCK_SIZE;
1571
1572 mxt->object_table = object_table;
1573
1574 mxt_debug(DEBUG_TRACE, "maXTouch driver Memory allocated\n");
1575
1576 object_info_address = MXT_ADDR_OBJECT_TABLE;
1577
1578 report_id_count = 0;
1579 for (i = 0; i < mxt->device_info.num_objs; i++) {
1580 mxt_debug(DEBUG_TRACE, "Reading maXTouch at [0x%04x]: ",
1581 object_info_address);
1582
1583 error = mxt_read_block(client, object_info_address,
1584 MXT_OBJECT_TABLE_ELEMENT_SIZE, buf);
1585
1586 if (error < 0) {
1587 mxt->read_fail_counter++;
1588 dev_err(&client->dev,
1589 "maXTouch Object %d could not be read\n", i);
1590 error = -EIO;
1591 goto err_object_read;
1592 }
1593
1594 memcpy(raw_ib_data + ib_pointer, buf,
1595 MXT_OBJECT_TABLE_ELEMENT_SIZE);
1596 ib_pointer += MXT_OBJECT_TABLE_ELEMENT_SIZE;
1597
1598 object_type = buf[0];
1599 object_address = (buf[2] << 8) + buf[1];
1600 object_size = buf[3] + 1;
1601 object_instances = buf[4] + 1;
1602 object_report_ids = buf[5];
1603 mxt_debug(DEBUG_TRACE, "Type=%03d, Address=0x%04x, "
1604 "Size=0x%02x, %d instances, %d report id's\n",
1605 object_type,
1606 object_address,
1607 object_size,
1608 object_instances,
1609 object_report_ids
1610 );
1611
1612 if (object_type == 38)
1613 t38_size = object_size;
1614 /* TODO: check whether object is known and supported? */
1615
1616 /* Save frequently needed info. */
1617 if (object_type == MXT_GEN_MESSAGEPROCESSOR_T5) {
1618 mxt->msg_proc_addr = object_address;
1619 mxt->message_size = object_size;
1620 }
1621
1622 object_table[i].type = object_type;
1623 object_table[i].chip_addr = object_address;
1624 object_table[i].size = object_size;
1625 object_table[i].instances = object_instances;
1626 object_table[i].num_report_ids = object_report_ids;
1627 report_id_count += object_instances * object_report_ids;
1628
1629 object_info_address += MXT_OBJECT_TABLE_ELEMENT_SIZE;
1630 }
1631
1632 mxt->rid_map =
1633 kzalloc(sizeof(struct report_id_map) * (report_id_count + 1),
1634 /* allocate for report_id 0, even if not used */
1635 GFP_KERNEL);
1636 if (mxt->rid_map == NULL) {
1637 printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
1638 error = -ENOMEM;
1639 goto err_rid_map_alloc;
1640 }
1641
1642 mxt->messages = kzalloc(mxt->message_size * MXT_MESSAGE_BUFFER_SIZE,
1643 GFP_KERNEL);
1644 if (mxt->messages == NULL) {
1645 printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
1646 error = -ENOMEM;
1647 goto err_msg_alloc;
1648 }
1649
1650 mxt->last_message = kzalloc(mxt->message_size, GFP_KERNEL);
1651 if (mxt->last_message == NULL) {
1652 printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
1653 error = -ENOMEM;
1654 goto err_msg_alloc;
1655 }
1656
1657 mxt->report_id_count = report_id_count;
1658 if (report_id_count > 254) { /* 0 & 255 are reserved */
1659 dev_err(&client->dev,
1660 "Too many maXTouch report id's [%d]\n",
1661 report_id_count);
1662 error = -ENXIO;
1663 goto err_max_rid;
1664 }
1665
1666 /* Create a mapping from report id to object type */
1667 report_id = 1; /* Start from 1, 0 is reserved. */
1668
1669 /* Create table associating report id's with objects & instances */
1670 for (i = 0; i < mxt->device_info.num_objs; i++) {
1671 for (object_instance = 0;
1672 object_instance < object_table[i].instances;
1673 object_instance++){
1674 first_report_id = report_id;
1675 for (object_report_id = 0;
1676 object_report_id < object_table[i].num_report_ids;
1677 object_report_id++) {
1678 mxt->rid_map[report_id].object =
1679 object_table[i].type;
1680 mxt->rid_map[report_id].instance =
1681 object_instance;
1682 mxt->rid_map[report_id].first_rid =
1683 first_report_id;
1684 report_id++;
1685 }
1686 }
1687 }
1688
1689 /* Read 3 byte CRC */
1690 error = mxt_read_block(client, object_info_address, 3, buf);
1691 if (error < 0) {
1692 mxt->read_fail_counter++;
1693 dev_err(&client->dev, "Error reading CRC\n");
1694 }
1695
1696 crc = (buf[2] << 16) | (buf[1] << 8) | buf[0];
1697
1698 if (calculate_infoblock_crc(&calculated_crc, raw_ib_data,
1699 ib_pointer)) {
1700 printk(KERN_WARNING "Error while calculating CRC!\n");
1701 calculated_crc = 0;
1702 }
1703 kfree(raw_ib_data);
1704
1705 mxt_debug(DEBUG_TRACE, "\nReported info block CRC = 0x%6X\n", crc);
1706 mxt_debug(DEBUG_TRACE, "Calculated info block CRC = 0x%6X\n\n",
1707 calculated_crc);
1708
1709 if (crc == calculated_crc) {
1710 mxt->info_block_crc = crc;
1711 } else {
1712 mxt->info_block_crc = 0;
1713 printk(KERN_ALERT "maXTouch: Info block CRC invalid!\n");
1714 }
1715
1716 if (debug >= DEBUG_VERBOSE) {
1717
1718 dev_info(&client->dev, "maXTouch: %d Objects\n",
1719 mxt->device_info.num_objs);
1720
1721 for (i = 0; i < mxt->device_info.num_objs; i++) {
1722 dev_info(&client->dev, "Type:\t\t\t[%d]: %s\n",
1723 object_table[i].type,
1724 object_type_name[object_table[i].type]);
1725 dev_info(&client->dev, "\tAddress:\t0x%04X\n",
1726 object_table[i].chip_addr);
1727 dev_info(&client->dev, "\tSize:\t\t%d Bytes\n",
1728 object_table[i].size);
1729 dev_info(&client->dev, "\tInstances:\t%d\n",
1730 object_table[i].instances);
1731 dev_info(&client->dev, "\tReport Id's:\t%d\n",
1732 object_table[i].num_report_ids);
1733 }
1734 }
1735
1736 return 0;
1737
1738
1739err_max_rid:
1740 kfree(mxt->last_message);
1741err_msg_alloc:
1742 kfree(mxt->rid_map);
1743err_rid_map_alloc:
1744err_object_read:
1745 kfree(raw_ib_data);
1746err_ib_alloc:
1747 kfree(object_table);
1748err_object_table_alloc:
1749 return error;
1750}
1751
1752#if defined(CONFIG_PM)
1753static int mxt_suspend(struct device *dev)
1754{
1755 struct mxt_data *mxt = dev_get_drvdata(dev);
1756 int error, i;
1757 u8 t7_deepsl_data[T7_DATA_SIZE];
1758 u16 t7_addr;
1759
1760 if (device_may_wakeup(dev)) {
1761 enable_irq_wake(mxt->irq);
1762 return 0;
1763 }
1764
1765 disable_irq(mxt->irq);
1766
1767 flush_delayed_work_sync(&mxt->dwork);
1768
1769 for (i = 0; i < T7_DATA_SIZE; i++)
1770 t7_deepsl_data[i] = 0;
1771
1772 t7_addr = MXT_BASE_ADDR(MXT_GEN_POWERCONFIG_T7, mxt);
1773 /* save current power state values */
1774 error = mxt_read_block(mxt->client, t7_addr,
1775 ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
1776 if (error < 0)
1777 goto err_enable_irq;
1778
1779 /* configure deep sleep mode */
1780 error = mxt_write_block(mxt->client, t7_addr,
1781 ARRAY_SIZE(t7_deepsl_data), t7_deepsl_data);
1782 if (error < 0)
1783 goto err_enable_irq;
1784
1785 /* power off the device */
1786 if (mxt->power_on) {
1787 error = mxt->power_on(false);
1788 if (error) {
1789 dev_err(dev, "power off failed");
1790 goto err_write_block;
1791 }
1792 }
1793 mxt->is_suspended = true;
1794 return 0;
1795
1796err_write_block:
1797 mxt_write_block(mxt->client, t7_addr,
1798 ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
1799err_enable_irq:
1800 enable_irq(mxt->irq);
1801 return error;
1802}
1803
1804static int mxt_resume(struct device *dev)
1805{
1806 struct mxt_data *mxt = dev_get_drvdata(dev);
1807 int error;
1808 u16 t7_addr;
1809
1810 if (device_may_wakeup(dev)) {
1811 disable_irq_wake(mxt->irq);
1812 return 0;
1813 }
1814
1815 if (!mxt->is_suspended)
1816 return 0;
1817
1818 /* power on the device */
1819 if (mxt->power_on) {
1820 error = mxt->power_on(true);
1821 if (error) {
1822 dev_err(dev, "power on failed");
1823 return error;
1824 }
1825 }
1826
1827 t7_addr = MXT_BASE_ADDR(MXT_GEN_POWERCONFIG_T7, mxt);
1828 /* restore the old power state values */
1829 error = mxt_write_block(mxt->client, t7_addr,
1830 ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
1831 if (error < 0)
1832 goto err_write_block;
1833
1834 enable_irq(mxt->irq);
1835
1836 mxt->is_suspended = false;
1837
1838 /* Make sure we just didn't miss a interrupt. */
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301839 if (mxt->read_chg() == 0) {
1840 disable_irq(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001841 schedule_delayed_work(&mxt->dwork, 0);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301842 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001843
1844 return 0;
1845
1846err_write_block:
1847 if (mxt->power_on)
1848 mxt->power_on(false);
1849 return error;
1850}
1851
1852#if defined(CONFIG_HAS_EARLYSUSPEND)
1853static void mxt_early_suspend(struct early_suspend *h)
1854{
1855 struct mxt_data *mxt = container_of(h, struct mxt_data, early_suspend);
1856
1857 mxt_suspend(&mxt->client->dev);
1858}
1859
1860static void mxt_late_resume(struct early_suspend *h)
1861{
1862 struct mxt_data *mxt = container_of(h, struct mxt_data, early_suspend);
1863
1864 mxt_resume(&mxt->client->dev);
1865}
1866#endif
1867
1868static const struct dev_pm_ops mxt_pm_ops = {
1869#ifndef CONFIG_HAS_EARLYSUSPEND
1870 .suspend = mxt_suspend,
1871 .resume = mxt_resume,
1872#endif
1873};
1874#endif
1875
1876static int __devinit mxt_probe(struct i2c_client *client,
1877 const struct i2c_device_id *id)
1878{
1879 struct mxt_data *mxt;
1880 struct mxt_platform_data *pdata;
1881 struct input_dev *input;
1882 u8 *id_data;
1883 u8 *t38_data;
1884 u16 t38_addr;
1885 int error;
1886
1887 mxt_debug(DEBUG_INFO, "mXT224: mxt_probe\n");
1888
1889 if (client == NULL) {
1890 pr_debug("maXTouch: client == NULL\n");
1891 return -EINVAL;
1892 } else if (client->adapter == NULL) {
1893 pr_debug("maXTouch: client->adapter == NULL\n");
1894 return -EINVAL;
1895 } else if (&client->dev == NULL) {
1896 pr_debug("maXTouch: client->dev == NULL\n");
1897 return -EINVAL;
1898 } else if (&client->adapter->dev == NULL) {
1899 pr_debug("maXTouch: client->adapter->dev == NULL\n");
1900 return -EINVAL;
1901 } else if (id == NULL) {
1902 pr_debug("maXTouch: id == NULL\n");
1903 return -EINVAL;
1904 }
1905
1906 /* Enable runtime PM ops, start in ACTIVE mode */
1907 error = pm_runtime_set_active(&client->dev);
1908 if (error < 0)
1909 dev_dbg(&client->dev, "unable to set runtime pm state\n");
1910 pm_runtime_enable(&client->dev);
1911
1912 mxt_debug(DEBUG_INFO, "maXTouch driver v. %s\n", DRIVER_VERSION);
1913 mxt_debug(DEBUG_INFO, "\t \"%s\"\n", client->name);
1914 mxt_debug(DEBUG_INFO, "\taddr:\t0x%04x\n", client->addr);
1915 mxt_debug(DEBUG_INFO, "\tirq:\t%d\n", client->irq);
1916 mxt_debug(DEBUG_INFO, "\tflags:\t0x%04x\n", client->flags);
1917 mxt_debug(DEBUG_INFO, "\tadapter:\"%s\"\n", client->adapter->name);
1918 mxt_debug(DEBUG_INFO, "\tdevice:\t\"%s\"\n", client->dev.init_name);
1919
1920 mxt_debug(DEBUG_TRACE, "maXTouch driver functionality OK\n");
1921
1922 /* Allocate structure - we need it to identify device */
1923 mxt = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1924 if (mxt == NULL) {
1925 dev_err(&client->dev, "insufficient memory\n");
1926 error = -ENOMEM;
1927 goto err_mxt_alloc;
1928 }
1929
1930 id_data = kmalloc(MXT_ID_BLOCK_SIZE, GFP_KERNEL);
1931 if (id_data == NULL) {
1932 dev_err(&client->dev, "insufficient memory\n");
1933 error = -ENOMEM;
1934 goto err_id_alloc;
1935 }
1936
1937 input = input_allocate_device();
1938 if (!input) {
1939 dev_err(&client->dev, "error allocating input device\n");
1940 error = -ENOMEM;
1941 goto err_input_dev_alloc;
1942 }
1943
1944 /* Initialize Platform data */
1945
1946 pdata = client->dev.platform_data;
1947 if (pdata == NULL) {
1948 dev_err(&client->dev, "platform data is required!\n");
1949 error = -EINVAL;
1950 goto err_pdata;
1951 }
1952 if (debug >= DEBUG_TRACE)
1953 printk(KERN_INFO "Platform OK: pdata = 0x%08x\n",
1954 (unsigned int) pdata);
1955
1956 mxt->is_suspended = false;
1957 mxt->read_fail_counter = 0;
1958 mxt->message_counter = 0;
1959
1960 if (pdata->min_x)
1961 mxt->min_x_val = pdata->min_x;
1962 else
1963 mxt->min_x_val = 0;
1964
1965 if (pdata->min_y)
1966 mxt->min_y_val = pdata->min_y;
1967 else
1968 mxt->min_y_val = 0;
1969
1970 mxt->max_x_val = pdata->max_x;
1971 mxt->max_y_val = pdata->max_y;
1972
1973 /* Get data that is defined in board specific code. */
1974 mxt->init_hw = pdata->init_platform_hw;
1975 mxt->exit_hw = pdata->exit_platform_hw;
1976 mxt->power_on = pdata->power_on;
1977 mxt->read_chg = pdata->read_chg;
1978
1979 if (pdata->valid_interrupt != NULL)
1980 mxt->valid_interrupt = pdata->valid_interrupt;
1981 else
1982 mxt->valid_interrupt = mxt_valid_interrupt_dummy;
1983
1984 if (mxt->init_hw) {
1985 error = mxt->init_hw(client);
1986 if (error) {
1987 dev_err(&client->dev, "hw init failed");
1988 goto err_init_hw;
1989 }
1990 }
1991
1992 /* power on the device */
1993 if (mxt->power_on) {
1994 error = mxt->power_on(true);
1995 if (error) {
1996 dev_err(&client->dev, "power on failed");
1997 goto err_pwr_on;
1998 }
1999 }
2000
2001 if (debug >= DEBUG_TRACE)
2002 printk(KERN_INFO "maXTouch driver identifying chip\n");
2003
2004 if (mxt_identify(client, mxt, id_data) < 0) {
2005 dev_err(&client->dev, "Chip could not be identified\n");
2006 error = -ENODEV;
2007 goto err_identify;
2008 }
2009 /* Chip is valid and active. */
2010 if (debug >= DEBUG_TRACE)
2011 printk(KERN_INFO "maXTouch driver allocating input device\n");
2012
2013 mxt->client = client;
2014 mxt->input = input;
2015
2016 INIT_DELAYED_WORK(&mxt->dwork, mxt_worker);
2017 mutex_init(&mxt->debug_mutex);
2018 mutex_init(&mxt->msg_mutex);
2019 mxt_debug(DEBUG_TRACE, "maXTouch driver creating device name\n");
2020
2021 snprintf(
2022 mxt->phys_name,
2023 sizeof(mxt->phys_name),
2024 "%s/input0",
2025 dev_name(&client->dev)
2026 );
2027 input->name = "Atmel maXTouch Touchscreen controller";
2028 input->phys = mxt->phys_name;
2029 input->id.bustype = BUS_I2C;
2030 input->dev.parent = &client->dev;
2031
2032 mxt_debug(DEBUG_INFO, "maXTouch name: \"%s\"\n", input->name);
2033 mxt_debug(DEBUG_INFO, "maXTouch phys: \"%s\"\n", input->phys);
2034 mxt_debug(DEBUG_INFO, "maXTouch driver setting abs parameters\n");
2035
2036 set_bit(BTN_TOUCH, input->keybit);
2037
2038 /* Single touch */
2039 input_set_abs_params(input, ABS_X, mxt->min_x_val,
2040 mxt->max_x_val, 0, 0);
2041 input_set_abs_params(input, ABS_Y, mxt->min_y_val,
2042 mxt->max_y_val, 0, 0);
2043 input_set_abs_params(input, ABS_PRESSURE, 0, MXT_MAX_REPORTED_PRESSURE,
2044 0, 0);
2045 input_set_abs_params(input, ABS_TOOL_WIDTH, 0, MXT_MAX_REPORTED_WIDTH,
2046 0, 0);
2047
2048 /* Multitouch */
2049 input_set_abs_params(input, ABS_MT_POSITION_X, mxt->min_x_val,
2050 mxt->max_x_val, 0, 0);
2051 input_set_abs_params(input, ABS_MT_POSITION_Y, mxt->min_y_val,
2052 mxt->max_y_val, 0, 0);
2053 input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, MXT_MAX_TOUCH_SIZE,
2054 0, 0);
2055 input_set_abs_params(input, ABS_MT_TRACKING_ID, 0, MXT_MAX_NUM_TOUCHES,
2056 0, 0);
2057
2058 __set_bit(EV_ABS, input->evbit);
2059 __set_bit(EV_SYN, input->evbit);
2060 __set_bit(EV_KEY, input->evbit);
2061 __set_bit(EV_MSC, input->evbit);
2062 input->mscbit[0] = BIT_MASK(MSC_GESTURE);
2063
2064 mxt_debug(DEBUG_TRACE, "maXTouch driver setting client data\n");
2065 i2c_set_clientdata(client, mxt);
2066 mxt_debug(DEBUG_TRACE, "maXTouch driver setting drv data\n");
2067 input_set_drvdata(input, mxt);
2068 mxt_debug(DEBUG_TRACE, "maXTouch driver input register device\n");
2069 error = input_register_device(mxt->input);
2070 if (error < 0) {
2071 dev_err(&client->dev,
2072 "Failed to register input device\n");
2073 goto err_register_device;
2074 }
2075
2076 error = mxt_read_object_table(client, mxt, id_data);
2077 if (error < 0)
2078 goto err_read_ot;
2079
2080
2081 /* Create debugfs entries. */
2082 mxt->debug_dir = debugfs_create_dir("maXTouch", NULL);
2083 if (mxt->debug_dir == ERR_PTR(-ENODEV)) {
2084 /* debugfs is not enabled. */
2085 printk(KERN_WARNING "debugfs not enabled in kernel\n");
2086 } else if (mxt->debug_dir == NULL) {
2087 printk(KERN_WARNING "error creating debugfs dir\n");
2088 } else {
2089 mxt_debug(DEBUG_TRACE, "created \"maXTouch\" debugfs dir\n");
2090
2091 debugfs_create_file("deltas", S_IRUSR, mxt->debug_dir, mxt,
2092 &delta_fops);
2093 debugfs_create_file("refs", S_IRUSR, mxt->debug_dir, mxt,
2094 &refs_fops);
2095 }
2096
2097 /* Create character device nodes for reading & writing registers */
2098 mxt->mxt_class = class_create(THIS_MODULE, "maXTouch_memory");
2099 if (IS_ERR(mxt->mxt_class)){
2100 printk(KERN_WARNING "class create failed! exiting...");
2101 goto err_class_create;
2102
2103 }
2104 /* 2 numbers; one for memory and one for messages */
2105 error = alloc_chrdev_region(&mxt->dev_num, 0, 2,
2106 "maXTouch_memory");
2107 mxt_debug(DEBUG_VERBOSE,
2108 "device number %d allocated!\n", MAJOR(mxt->dev_num));
2109 if (error){
2110 printk(KERN_WARNING "Error registering device\n");
2111 }
2112 cdev_init(&mxt->cdev, &mxt_memory_fops);
2113 cdev_init(&mxt->cdev_messages, &mxt_message_fops);
2114
2115 mxt_debug(DEBUG_VERBOSE, "cdev initialized\n");
2116 mxt->cdev.owner = THIS_MODULE;
2117 mxt->cdev_messages.owner = THIS_MODULE;
2118
2119 error = cdev_add(&mxt->cdev, mxt->dev_num, 1);
2120 if (error){
2121 printk(KERN_WARNING "Bad cdev\n");
2122 }
2123
2124 error = cdev_add(&mxt->cdev_messages, mxt->dev_num + 1, 1);
2125 if (error){
2126 printk(KERN_WARNING "Bad cdev\n");
2127 }
2128
2129 mxt_debug(DEBUG_VERBOSE, "cdev added\n");
2130
2131 device_create(mxt->mxt_class, NULL, MKDEV(MAJOR(mxt->dev_num), 0), NULL,
2132 "maXTouch");
2133
2134 device_create(mxt->mxt_class, NULL, MKDEV(MAJOR(mxt->dev_num), 1), NULL,
2135 "maXTouch_messages");
2136
2137 mxt->msg_buffer_startp = 0;
2138 mxt->msg_buffer_endp = 0;
2139
2140 /* Allocate the interrupt */
2141 mxt_debug(DEBUG_TRACE, "maXTouch driver allocating interrupt...\n");
2142 mxt->irq = client->irq;
2143 mxt->valid_irq_counter = 0;
2144 mxt->invalid_irq_counter = 0;
2145 mxt->irq_counter = 0;
2146 if (mxt->irq) {
2147 /* Try to request IRQ with falling edge first. This is
2148 * not always supported. If it fails, try with any edge. */
2149 error = request_irq(mxt->irq,
2150 mxt_irq_handler,
2151 IRQF_TRIGGER_FALLING,
2152 client->dev.driver->name,
2153 mxt);
2154 if (error < 0) {
2155 /* TODO: why only 0 works on STK1000? */
2156 error = request_irq(mxt->irq,
2157 mxt_irq_handler,
2158 0,
2159 client->dev.driver->name,
2160 mxt);
2161 }
2162
2163 if (error < 0) {
2164 dev_err(&client->dev,
2165 "failed to allocate irq %d\n", mxt->irq);
2166 goto err_irq;
2167 }
2168 }
2169
2170 if (debug > DEBUG_INFO)
2171 dev_info(&client->dev, "touchscreen, irq %d\n", mxt->irq);
2172
2173 t38_data = kmalloc(t38_size*sizeof(u8), GFP_KERNEL);
2174
2175 if (t38_data == NULL) {
2176 dev_err(&client->dev, "insufficient memory\n");
2177 error = -ENOMEM;
2178 goto err_t38;
2179 }
2180
2181 t38_addr = MXT_BASE_ADDR(MXT_USER_INFO_T38, mxt);
2182 mxt_read_block(client, t38_addr, t38_size, t38_data);
2183 dev_info(&client->dev, "VERSION:%02x.%02x.%02x, DATE: %d/%d/%d\n",
2184 t38_data[0], t38_data[1], t38_data[2],
2185 t38_data[3], t38_data[4], t38_data[5]);
2186
2187 /* Schedule a worker routine to read any messages that might have
2188 * been sent before interrupts were enabled. */
2189 cancel_delayed_work(&mxt->dwork);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05302190 disable_irq(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002191 schedule_delayed_work(&mxt->dwork, 0);
2192 kfree(t38_data);
2193 kfree(id_data);
2194
2195 device_init_wakeup(&client->dev, pdata->wakeup);
2196#if defined(CONFIG_HAS_EARLYSUSPEND)
2197 mxt->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN +
2198 MXT_SUSPEND_LEVEL;
2199 mxt->early_suspend.suspend = mxt_early_suspend;
2200 mxt->early_suspend.resume = mxt_late_resume;
2201 register_early_suspend(&mxt->early_suspend);
2202#endif
2203
2204 return 0;
2205
2206err_t38:
2207 free_irq(mxt->irq, mxt);
2208err_irq:
2209 kfree(mxt->rid_map);
2210 kfree(mxt->object_table);
2211 kfree(mxt->last_message);
2212err_class_create:
2213 if (mxt->debug_dir)
2214 debugfs_remove(mxt->debug_dir);
2215 kfree(mxt->last_message);
2216 kfree(mxt->rid_map);
2217 kfree(mxt->object_table);
2218err_read_ot:
2219 input_unregister_device(mxt->input);
2220 mxt->input = NULL;
2221err_register_device:
2222 mutex_destroy(&mxt->debug_mutex);
2223 mutex_destroy(&mxt->msg_mutex);
2224err_identify:
2225 if (mxt->power_on)
2226 mxt->power_on(false);
2227err_pwr_on:
2228 if (mxt->exit_hw != NULL)
2229 mxt->exit_hw(client);
2230err_init_hw:
2231err_pdata:
2232 input_free_device(input);
2233err_input_dev_alloc:
2234 kfree(id_data);
2235err_id_alloc:
2236 kfree(mxt);
2237err_mxt_alloc:
2238 pm_runtime_set_suspended(&client->dev);
2239 pm_runtime_disable(&client->dev);
2240 return error;
2241}
2242
2243static int __devexit mxt_remove(struct i2c_client *client)
2244{
2245 struct mxt_data *mxt;
2246
2247 pm_runtime_set_suspended(&client->dev);
2248 pm_runtime_disable(&client->dev);
2249
2250 mxt = i2c_get_clientdata(client);
2251
2252 /* Remove debug dir entries */
2253 debugfs_remove_recursive(mxt->debug_dir);
2254
2255 device_init_wakeup(&client->dev, 0);
2256#if defined(CONFIG_HAS_EARLYSUSPEND)
2257 unregister_early_suspend(&mxt->early_suspend);
2258#endif
2259
2260 if (mxt != NULL) {
2261 if (mxt->power_on)
2262 mxt->power_on(false);
2263
2264 if (mxt->exit_hw != NULL)
2265 mxt->exit_hw(client);
2266
2267 if (mxt->irq) {
2268 free_irq(mxt->irq, mxt);
2269 }
2270
2271 unregister_chrdev_region(mxt->dev_num, 2);
2272 device_destroy(mxt->mxt_class, MKDEV(MAJOR(mxt->dev_num), 0));
2273 device_destroy(mxt->mxt_class, MKDEV(MAJOR(mxt->dev_num), 1));
2274 cdev_del(&mxt->cdev);
2275 cdev_del(&mxt->cdev_messages);
2276 cancel_delayed_work_sync(&mxt->dwork);
2277 input_unregister_device(mxt->input);
2278 class_destroy(mxt->mxt_class);
2279 debugfs_remove(mxt->debug_dir);
2280
2281 kfree(mxt->rid_map);
2282 kfree(mxt->object_table);
2283 kfree(mxt->last_message);
2284 }
2285 kfree(mxt);
2286
2287 i2c_set_clientdata(client, NULL);
2288 if (debug >= DEBUG_TRACE)
2289 dev_info(&client->dev, "Touchscreen unregistered\n");
2290
2291 return 0;
2292}
2293
2294static const struct i2c_device_id mxt_idtable[] = {
2295 {"maXTouch", 0,},
2296 { }
2297};
2298
2299MODULE_DEVICE_TABLE(i2c, mxt_idtable);
2300
2301static struct i2c_driver mxt_driver = {
2302 .driver = {
2303 .name = "maXTouch",
2304 .owner = THIS_MODULE,
2305#if defined(CONFIG_PM)
2306 .pm = &mxt_pm_ops,
2307#endif
2308 },
2309
2310 .id_table = mxt_idtable,
2311 .probe = mxt_probe,
2312 .remove = __devexit_p(mxt_remove),
2313};
2314
2315static int __init mxt_init(void)
2316{
2317 int err;
2318 err = i2c_add_driver(&mxt_driver);
2319 if (err) {
2320 printk(KERN_WARNING "Adding maXTouch driver failed "
2321 "(errno = %d)\n", err);
2322 } else {
2323 mxt_debug(DEBUG_TRACE, "Successfully added driver %s\n",
2324 mxt_driver.driver.name);
2325 }
2326 return err;
2327}
2328
2329static void __exit mxt_cleanup(void)
2330{
2331 i2c_del_driver(&mxt_driver);
2332}
2333
2334
2335module_init(mxt_init);
2336module_exit(mxt_cleanup);
2337
2338MODULE_AUTHOR("Iiro Valkonen");
2339MODULE_DESCRIPTION("Driver for Atmel maXTouch Touchscreen Controller");
2340MODULE_LICENSE("GPL");