blob: e3977748b7c55803fa27983ee2df582fae0399e5 [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 }
Mohan Pallakaa9df12a2011-11-18 16:34:24 +0530942 input_report_key(mxt->input, BTN_TOUCH, !!active_touches);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700943 if (active_touches == 0)
944 input_mt_sync(mxt->input);
945 input_sync(mxt->input);
946
947 }else{
948
949 input = mxt->input;
950 status = message[MXT_MSG_T9_STATUS];
951 report_id = message[0];
952
953 if (status & MXT_MSGB_T9_SUPPRESS) {
954 /* Touch has been suppressed by grip/face */
955 /* detection */
956 mxt_debug(DEBUG_TRACE, "SUPRESS");
957 } else {
958 /* Put together the 10-/12-bit coordinate values. */
959 xpos = message[MXT_MSG_T9_XPOSMSB] * 16 +
960 ((message[MXT_MSG_T9_XYPOSLSB] >> 4) & 0xF);
961 ypos = message[MXT_MSG_T9_YPOSMSB] * 16 +
962 ((message[MXT_MSG_T9_XYPOSLSB] >> 0) & 0xF);
963
964 if (mxt->max_x_val < 1024)
965 xpos >>= 2;
966 if (mxt->max_y_val < 1024)
967 ypos >>= 2;
968
969 touch_number = message[MXT_MSG_REPORTID] -
970 mxt->rid_map[report_id].first_rid;
971
972 stored_x[touch_number] = xpos;
973 stored_y[touch_number] = ypos;
974
975 if (status & MXT_MSGB_T9_DETECT) {
976 /*
977 * mXT224 reports the number of touched nodes,
978 * so the exact value for touch ellipse major
979 * axis length in nodes would be 2*sqrt(touch_size/pi)
980 * (assuming round touch shape), which would then need
981 * to be scaled using information about how many sensor
982 * lines we do have. So this is very much simplified,
983 * but sufficient for most if not all apps?
984 */
985 touch_size = message[MXT_MSG_T9_TCHAREA];
986 touch_size = touch_size >> 2;
987 if (!touch_size)
988 touch_size = 1;
989 /*
990 * report_mt(touch_number, touch_size, xpos, ypos, mxt);
991 */
992
993 stored_size[touch_number] = touch_size;
994
995 if (status & MXT_MSGB_T9_AMP)
996 /* Amplitude of touch has changed */
997 amplitude = message[MXT_MSG_T9_TCHAMPLITUDE];
998 }
999
1000 if (status & MXT_MSGB_T9_RELEASE) {
1001 /* The previously reported touch has been removed.*/
1002 /* report_mt(touch_number, 0, xpos, ypos, mxt); */
1003 stored_size[touch_number] = 0;
1004 }
1005
1006 /* input_sync(input); */
1007 }
1008
1009 if (status & MXT_MSGB_T9_SUPPRESS) {
1010 mxt_debug(DEBUG_TRACE, "SUPRESS");
1011 } else {
1012 if (status & MXT_MSGB_T9_DETECT) {
1013 mxt_debug(DEBUG_TRACE, "DETECT:%s%s%s%s",
1014 ((status & MXT_MSGB_T9_PRESS) ? " PRESS" : ""),
1015 ((status & MXT_MSGB_T9_MOVE) ? " MOVE" : ""),
1016 ((status & MXT_MSGB_T9_AMP) ? " AMP" : ""),
1017 ((status & MXT_MSGB_T9_VECTOR) ? " VECT" : ""));
1018
1019 } else if (status & MXT_MSGB_T9_RELEASE) {
1020 mxt_debug(DEBUG_TRACE, "RELEASE");
1021 }
1022 }
1023 mxt_debug(DEBUG_TRACE, "X=%d, Y=%d, TOUCHSIZE=%d",
1024 xpos, ypos, touch_size);
1025 }
1026 return;
1027}
1028
1029
1030int process_message(u8 *message, u8 object, struct mxt_data *mxt)
1031{
1032 struct i2c_client *client;
1033 u8 status;
1034 u16 xpos = 0xFFFF;
1035 u16 ypos = 0xFFFF;
1036 u8 event;
1037 u8 direction;
1038 u16 distance;
1039 u8 length;
1040 u8 report_id;
1041 static u8 error_cond = 0;
1042
1043 client = mxt->client;
1044 length = mxt->message_size;
1045 report_id = message[0];
1046
1047 if ((mxt->nontouch_msg_only == 0) ||
1048 (!IS_TOUCH_OBJECT(object))){
1049 mutex_lock(&mxt->msg_mutex);
1050 /* Copy the message to buffer */
1051 if (mxt->msg_buffer_startp < MXT_MESSAGE_BUFFER_SIZE) {
1052 mxt->msg_buffer_startp++;
1053 } else {
1054 mxt->msg_buffer_startp = 0;
1055 }
1056
1057 if (mxt->msg_buffer_startp == mxt->msg_buffer_endp) {
1058 mxt_debug(DEBUG_TRACE,
1059 "Message buf full, discarding last entry.\n");
1060 if (mxt->msg_buffer_endp < MXT_MESSAGE_BUFFER_SIZE) {
1061 mxt->msg_buffer_endp++;
1062 } else {
1063 mxt->msg_buffer_endp = 0;
1064 }
1065 }
1066 memcpy((mxt->messages + mxt->msg_buffer_startp * length),
1067 message,
1068 length);
1069 mutex_unlock(&mxt->msg_mutex);
1070 }
1071
1072 switch (object) {
1073 case MXT_GEN_COMMANDPROCESSOR_T6:
1074 status = message[1];
1075
1076 if (status & MXT_MSGB_T6_COMSERR) {
1077 if ((!error_cond) & MXT_MSGB_T6_COMSERR){
1078 dev_err(&client->dev,
1079 "maXTouch checksum error\n");
1080 error_cond |= MXT_MSGB_T6_COMSERR;
1081 }
1082 }
1083 if (status & MXT_MSGB_T6_CFGERR) {
1084 /*
1085 * Configuration error. A proper configuration
1086 * needs to be written to chip and backed up.
1087 */
1088 if ((!error_cond) & MXT_MSGB_T6_CFGERR){
1089 dev_err(&client->dev,
1090 "maXTouch configuration error\n");
1091 error_cond |= MXT_MSGB_T6_CFGERR;
1092 }
1093 }
1094 if (status & MXT_MSGB_T6_CAL) {
1095 /* Calibration in action, no need to react */
1096 dev_dbg(&client->dev,
1097 "maXTouch calibration in progress\n");
1098 }
1099 if (status & MXT_MSGB_T6_SIGERR) {
1100 /*
1101 * Signal acquisition error, something is seriously
1102 * wrong, not much we can in the driver to correct
1103 * this
1104 */
1105 if ((!error_cond) & MXT_MSGB_T6_SIGERR){
1106 dev_err(&client->dev,
1107 "maXTouch acquisition error\n");
1108 error_cond |= MXT_MSGB_T6_SIGERR;
1109 }
1110 }
1111 if (status & MXT_MSGB_T6_OFL) {
1112 /*
1113 * Cycle overflow, the acquisition interval is too
1114 * short.
1115 */
1116 dev_err(&client->dev,
1117 "maXTouch cycle overflow\n");
1118 }
1119 if (status & MXT_MSGB_T6_RESET) {
1120 /* Chip has reseted, no need to react. */
1121 dev_dbg(&client->dev,
1122 "maXTouch chip reset\n");
1123 }
1124 if (status == 0) {
1125 /* Chip status back to normal. */
1126 dev_dbg(&client->dev,
1127 "maXTouch status normal\n");
1128 error_cond = 0;
1129 }
1130 break;
1131
1132 case MXT_TOUCH_MULTITOUCHSCREEN_T9:
1133 process_T9_message(message, mxt, 0);
1134 break;
1135
1136 case MXT_SPT_GPIOPWM_T19:
1137 if (debug >= DEBUG_TRACE)
1138 dev_info(&client->dev,
1139 "Receiving GPIO message\n");
1140 break;
1141
1142 case MXT_PROCI_GRIPFACESUPPRESSION_T20:
1143 if (debug >= DEBUG_TRACE)
1144 dev_info(&client->dev,
1145 "Receiving face suppression msg\n");
1146 break;
1147
1148 case MXT_PROCG_NOISESUPPRESSION_T22:
1149 if (debug >= DEBUG_TRACE)
1150 dev_info(&client->dev,
1151 "Receiving noise suppression msg\n");
1152 status = message[MXT_MSG_T22_STATUS];
1153 if (status & MXT_MSGB_T22_FHCHG) {
1154 if (debug >= DEBUG_TRACE)
1155 dev_info(&client->dev,
1156 "maXTouch: Freq changed\n");
1157 }
1158 if (status & MXT_MSGB_T22_GCAFERR) {
1159 if (debug >= DEBUG_TRACE)
1160 dev_info(&client->dev,
1161 "maXTouch: High noise "
1162 "level\n");
1163 }
1164 if (status & MXT_MSGB_T22_FHERR) {
1165 if (debug >= DEBUG_TRACE)
1166 dev_info(&client->dev,
1167 "maXTouch: Freq changed - "
1168 "Noise level too high\n");
1169 }
1170 break;
1171
1172 case MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24:
1173 if (debug >= DEBUG_TRACE)
1174 dev_info(&client->dev,
1175 "Receiving one-touch gesture msg\n");
1176
1177 event = message[MXT_MSG_T24_STATUS] & 0x0F;
1178 xpos = message[MXT_MSG_T24_XPOSMSB] * 16 +
1179 ((message[MXT_MSG_T24_XYPOSLSB] >> 4) & 0x0F);
1180 ypos = message[MXT_MSG_T24_YPOSMSB] * 16 +
1181 ((message[MXT_MSG_T24_XYPOSLSB] >> 0) & 0x0F);
1182 if (mxt->max_x_val < 1024)
1183 xpos >>= 2;
1184 if (mxt->max_y_val < 1024)
1185 ypos >>= 2;
1186 direction = message[MXT_MSG_T24_DIR];
1187 distance = message[MXT_MSG_T24_DIST] +
1188 (message[MXT_MSG_T24_DIST + 1] << 16);
1189
1190 report_gesture((event << 24) | (direction << 16) | distance,
1191 mxt);
1192 report_gesture((xpos << 16) | ypos, mxt);
1193
1194 break;
1195
1196 case MXT_SPT_SELFTEST_T25:
1197 if (debug >= DEBUG_TRACE)
1198 dev_info(&client->dev,
1199 "Receiving Self-Test msg\n");
1200
1201 if (message[MXT_MSG_T25_STATUS] == MXT_MSGR_T25_OK) {
1202 if (debug >= DEBUG_TRACE)
1203 dev_info(&client->dev,
1204 "maXTouch: Self-Test OK\n");
1205
1206 } else {
1207 dev_err(&client->dev,
1208 "maXTouch: Self-Test Failed [%02x]:"
1209 "{%02x,%02x,%02x,%02x,%02x}\n",
1210 message[MXT_MSG_T25_STATUS],
1211 message[MXT_MSG_T25_STATUS + 0],
1212 message[MXT_MSG_T25_STATUS + 1],
1213 message[MXT_MSG_T25_STATUS + 2],
1214 message[MXT_MSG_T25_STATUS + 3],
1215 message[MXT_MSG_T25_STATUS + 4]
1216 );
1217 }
1218 break;
1219
1220 case MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27:
1221 if (debug >= DEBUG_TRACE)
1222 dev_info(&client->dev,
1223 "Receiving 2-touch gesture message\n");
1224
1225 event = message[MXT_MSG_T27_STATUS] & 0xF0;
1226 xpos = message[MXT_MSG_T27_XPOSMSB] * 16 +
1227 ((message[MXT_MSG_T27_XYPOSLSB] >> 4) & 0x0F);
1228 ypos = message[MXT_MSG_T27_YPOSMSB] * 16 +
1229 ((message[MXT_MSG_T27_XYPOSLSB] >> 0) & 0x0F);
1230 if (mxt->max_x_val < 1024)
1231 xpos >>= 2;
1232 if (mxt->max_y_val < 1024)
1233 ypos >>= 2;
1234
1235 direction = message[MXT_MSG_T27_ANGLE];
1236 distance = message[MXT_MSG_T27_SEPARATION] +
1237 (message[MXT_MSG_T27_SEPARATION + 1] << 16);
1238
1239 report_gesture((event << 24) | (direction << 16) | distance,
1240 mxt);
1241 report_gesture((xpos << 16) | ypos, mxt);
1242
1243
1244 break;
1245
1246 case MXT_SPT_CTECONFIG_T28:
1247 if (debug >= DEBUG_TRACE)
1248 dev_info(&client->dev,
1249 "Receiving CTE message...\n");
1250 status = message[MXT_MSG_T28_STATUS];
1251 if (status & MXT_MSGB_T28_CHKERR)
1252 dev_err(&client->dev,
1253 "maXTouch: Power-Up CRC failure\n");
1254
1255 break;
1256 default:
1257 if (debug >= DEBUG_TRACE)
1258 dev_info(&client->dev,
1259 "maXTouch: Unknown message!\n");
1260
1261 break;
1262 }
1263
1264 return 0;
1265}
1266
1267
1268/*
1269 * Processes messages when the interrupt line (CHG) is asserted. Keeps
1270 * reading messages until a message with report ID 0xFF is received,
1271 * which indicates that there is no more new messages.
1272 *
1273 */
1274
1275static void mxt_worker(struct work_struct *work)
1276{
1277 struct mxt_data *mxt;
1278 struct i2c_client *client;
1279
1280 u8 *message;
1281 u16 message_length;
1282 u16 message_addr;
1283 u8 report_id;
1284 u8 object;
1285 int error;
1286 int i;
1287 char *message_string;
1288 char *message_start;
1289
1290 message = NULL;
1291 mxt = container_of(work, struct mxt_data, dwork.work);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001292 client = mxt->client;
1293 message_addr = mxt->msg_proc_addr;
1294 message_length = mxt->message_size;
1295
1296 if (message_length < 256) {
1297 message = kmalloc(message_length, GFP_KERNEL);
1298 if (message == NULL) {
1299 dev_err(&client->dev, "Error allocating memory\n");
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301300 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001301 }
1302 } else {
1303 dev_err(&client->dev,
1304 "Message length larger than 256 bytes not supported\n");
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301305 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001306 }
1307
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301308 mxt_debug(DEBUG_TRACE, "maXTouch worker active:\n");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001309
1310 do {
1311 /* Read next message, reread on failure. */
1312 /* TODO: message length, CRC included? */
1313 mxt->message_counter++;
1314 for (i = 1; i < I2C_RETRY_COUNT; i++) {
1315 error = mxt_read_block(client,
1316 message_addr,
1317 message_length - 1,
1318 message);
1319 if (error >= 0)
1320 break;
1321 mxt->read_fail_counter++;
1322 dev_err(&client->dev,
1323 "Failure reading maxTouch device\n");
1324 }
1325 if (error < 0) {
1326 kfree(message);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301327 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001328 }
1329
1330 if (mxt->address_pointer != message_addr)
1331 mxt->valid_ap = 0;
1332 report_id = message[0];
1333
1334 if (debug >= DEBUG_RAW) {
1335 mxt_debug(DEBUG_RAW, "%s message [msg count: %08x]:",
1336 REPORT_ID_TO_OBJECT_NAME(report_id, mxt),
1337 mxt->message_counter
1338 );
1339 /* 5 characters per one byte */
1340 message_string = kmalloc(message_length * 5,
1341 GFP_KERNEL);
1342 if (message_string == NULL) {
1343 dev_err(&client->dev,
1344 "Error allocating memory\n");
1345 kfree(message);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301346 goto fail_worker;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001347 }
1348 message_start = message_string;
1349 for (i = 0; i < message_length; i++) {
1350 message_string +=
1351 sprintf(message_string,
1352 "0x%02X ", message[i]);
1353 }
1354 mxt_debug(DEBUG_RAW, "%s", message_start);
1355 kfree(message_start);
1356 }
1357
1358 if ((report_id != MXT_END_OF_MESSAGES) && (report_id != 0)) {
1359 memcpy(mxt->last_message, message, message_length);
1360 mxt->new_msgs = 1;
1361 smp_wmb();
1362 /* Get type of object and process the message */
1363 object = mxt->rid_map[report_id].object;
1364 process_message(message, object, mxt);
1365 }
1366
1367 mxt_debug(DEBUG_TRACE, "chgline: %d\n", mxt->read_chg());
1368 } while (comms ? (mxt->read_chg() == 0) :
1369 ((report_id != MXT_END_OF_MESSAGES) && (report_id != 0)));
1370
1371 /* All messages processed, send the events) */
1372 process_T9_message(NULL, mxt, 1);
1373
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001374 kfree(message);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301375
1376fail_worker:
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001377 /* Make sure we just didn't miss a interrupt. */
1378 if (mxt->read_chg() == 0){
1379 schedule_delayed_work(&mxt->dwork, 0);
Anirudh Ghayal61d88f72011-10-17 11:28:02 +05301380 } else
1381 enable_irq(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001382}
1383
1384
1385/*
1386 * The maXTouch device will signal the host about a new message by asserting
1387 * the CHG line. This ISR schedules a worker routine to read the message when
1388 * that happens.
1389 */
1390
1391static irqreturn_t mxt_irq_handler(int irq, void *_mxt)
1392{
1393 struct mxt_data *mxt = _mxt;
1394
1395 mxt->irq_counter++;
1396 if (mxt->valid_interrupt()) {
1397 /* Send the signal only if falling edge generated the irq. */
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301398 disable_irq_nosync(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001399 schedule_delayed_work(&mxt->dwork, 0);
1400 mxt->valid_irq_counter++;
1401 } else {
1402 mxt->invalid_irq_counter++;
1403 return IRQ_NONE;
1404 }
1405
1406 return IRQ_HANDLED;
1407}
1408
1409
1410
1411/******************************************************************************/
1412/* Initialization of driver */
1413/******************************************************************************/
1414
1415static int __devinit mxt_identify(struct i2c_client *client,
1416 struct mxt_data *mxt,
1417 u8 *id_block_data)
1418{
1419 u8 buf[MXT_ID_BLOCK_SIZE];
1420 int error;
1421 int identified;
1422
1423 identified = 0;
1424
1425 /* Read Device info to check if chip is valid */
1426 error = mxt_read_block(client, MXT_ADDR_INFO_BLOCK, MXT_ID_BLOCK_SIZE,
1427 (u8 *) buf);
1428
1429 if (error < 0) {
1430 mxt->read_fail_counter++;
1431 dev_err(&client->dev, "Failure accessing maXTouch device\n");
1432 return -EIO;
1433 }
1434
1435 memcpy(id_block_data, buf, MXT_ID_BLOCK_SIZE);
1436
1437 mxt->device_info.family_id = buf[0];
1438 mxt->device_info.variant_id = buf[1];
1439 mxt->device_info.major = ((buf[2] >> 4) & 0x0F);
1440 mxt->device_info.minor = (buf[2] & 0x0F);
1441 mxt->device_info.build = buf[3];
1442 mxt->device_info.x_size = buf[4];
1443 mxt->device_info.y_size = buf[5];
1444 mxt->device_info.num_objs = buf[6];
1445 mxt->device_info.num_nodes = mxt->device_info.x_size *
1446 mxt->device_info.y_size;
1447
1448 /*
1449 * Check Family & Variant Info; warn if not recognized but
1450 * still continue.
1451 */
1452
1453 /* MXT224 */
1454 if (mxt->device_info.family_id == MXT224_FAMILYID) {
1455 strcpy(mxt->device_info.family_name, "mXT224");
1456
1457 if (mxt->device_info.variant_id == MXT224_CAL_VARIANTID) {
1458 strcpy(mxt->device_info.variant_name, "Calibrated");
1459 } else if (mxt->device_info.variant_id ==
1460 MXT224_UNCAL_VARIANTID) {
1461 strcpy(mxt->device_info.variant_name, "Uncalibrated");
1462 } else {
1463 dev_err(&client->dev,
1464 "Warning: maXTouch Variant ID [%d] not "
1465 "supported\n",
1466 mxt->device_info.variant_id);
1467 strcpy(mxt->device_info.variant_name, "UNKNOWN");
1468 /* identified = -ENXIO; */
1469 }
1470
1471 /* MXT1386 */
1472 } else if (mxt->device_info.family_id == MXT1386_FAMILYID) {
1473 strcpy(mxt->device_info.family_name, "mXT1386");
1474
1475 if (mxt->device_info.variant_id == MXT1386_CAL_VARIANTID) {
1476 strcpy(mxt->device_info.variant_name, "Calibrated");
1477 } else {
1478 dev_err(&client->dev,
1479 "Warning: maXTouch Variant ID [%d] not "
1480 "supported\n",
1481 mxt->device_info.variant_id);
1482 strcpy(mxt->device_info.variant_name, "UNKNOWN");
1483 /* identified = -ENXIO; */
1484 }
1485 /* Unknown family ID! */
1486 } else {
1487 dev_err(&client->dev,
1488 "Warning: maXTouch Family ID [%d] not supported\n",
1489 mxt->device_info.family_id);
1490 strcpy(mxt->device_info.family_name, "UNKNOWN");
1491 strcpy(mxt->device_info.variant_name, "UNKNOWN");
1492 /* identified = -ENXIO; */
1493 }
1494
1495 dev_info(
1496 &client->dev,
1497 "Atmel maXTouch (Family %s (%X), Variant %s (%X)) Firmware "
1498 "version [%d.%d] Build %d\n",
1499 mxt->device_info.family_name,
1500 mxt->device_info.family_id,
1501 mxt->device_info.variant_name,
1502 mxt->device_info.variant_id,
1503 mxt->device_info.major,
1504 mxt->device_info.minor,
1505 mxt->device_info.build
1506 );
1507 dev_dbg(
1508 &client->dev,
1509 "Atmel maXTouch Configuration "
1510 "[X: %d] x [Y: %d]\n",
1511 mxt->device_info.x_size,
1512 mxt->device_info.y_size
1513 );
1514 return identified;
1515}
1516
1517/*
1518 * Reads the object table from maXTouch chip to get object data like
1519 * address, size, report id. For Info Block CRC calculation, already read
1520 * id data is passed to this function too (Info Block consists of the ID
1521 * block and object table).
1522 *
1523 */
1524static int __devinit mxt_read_object_table(struct i2c_client *client,
1525 struct mxt_data *mxt,
1526 u8 *raw_id_data)
1527{
1528 u16 report_id_count;
1529 u8 buf[MXT_OBJECT_TABLE_ELEMENT_SIZE];
1530 u8 *raw_ib_data;
1531 u8 object_type;
1532 u16 object_address;
1533 u16 object_size;
1534 u8 object_instances;
1535 u8 object_report_ids;
1536 u16 object_info_address;
1537 u32 crc;
1538 u32 calculated_crc;
1539 int i;
1540 int error;
1541
1542 u8 object_instance;
1543 u8 object_report_id;
1544 u8 report_id;
1545 int first_report_id;
1546 int ib_pointer;
1547 struct mxt_object *object_table;
1548
1549 mxt_debug(DEBUG_TRACE, "maXTouch driver reading configuration\n");
1550
1551 object_table = kzalloc(sizeof(struct mxt_object) *
1552 mxt->device_info.num_objs,
1553 GFP_KERNEL);
1554 if (object_table == NULL) {
1555 printk(KERN_WARNING "maXTouch: Memory allocation failed!\n");
1556 error = -ENOMEM;
1557 goto err_object_table_alloc;
1558 }
1559
1560 raw_ib_data = kmalloc(MXT_OBJECT_TABLE_ELEMENT_SIZE *
1561 mxt->device_info.num_objs + MXT_ID_BLOCK_SIZE,
1562 GFP_KERNEL);
1563 if (raw_ib_data == NULL) {
1564 printk(KERN_WARNING "maXTouch: Memory allocation failed!\n");
1565 error = -ENOMEM;
1566 goto err_ib_alloc;
1567 }
1568
1569 /* Copy the ID data for CRC calculation. */
1570 memcpy(raw_ib_data, raw_id_data, MXT_ID_BLOCK_SIZE);
1571 ib_pointer = MXT_ID_BLOCK_SIZE;
1572
1573 mxt->object_table = object_table;
1574
1575 mxt_debug(DEBUG_TRACE, "maXTouch driver Memory allocated\n");
1576
1577 object_info_address = MXT_ADDR_OBJECT_TABLE;
1578
1579 report_id_count = 0;
1580 for (i = 0; i < mxt->device_info.num_objs; i++) {
1581 mxt_debug(DEBUG_TRACE, "Reading maXTouch at [0x%04x]: ",
1582 object_info_address);
1583
1584 error = mxt_read_block(client, object_info_address,
1585 MXT_OBJECT_TABLE_ELEMENT_SIZE, buf);
1586
1587 if (error < 0) {
1588 mxt->read_fail_counter++;
1589 dev_err(&client->dev,
1590 "maXTouch Object %d could not be read\n", i);
1591 error = -EIO;
1592 goto err_object_read;
1593 }
1594
1595 memcpy(raw_ib_data + ib_pointer, buf,
1596 MXT_OBJECT_TABLE_ELEMENT_SIZE);
1597 ib_pointer += MXT_OBJECT_TABLE_ELEMENT_SIZE;
1598
1599 object_type = buf[0];
1600 object_address = (buf[2] << 8) + buf[1];
1601 object_size = buf[3] + 1;
1602 object_instances = buf[4] + 1;
1603 object_report_ids = buf[5];
1604 mxt_debug(DEBUG_TRACE, "Type=%03d, Address=0x%04x, "
1605 "Size=0x%02x, %d instances, %d report id's\n",
1606 object_type,
1607 object_address,
1608 object_size,
1609 object_instances,
1610 object_report_ids
1611 );
1612
1613 if (object_type == 38)
1614 t38_size = object_size;
1615 /* TODO: check whether object is known and supported? */
1616
1617 /* Save frequently needed info. */
1618 if (object_type == MXT_GEN_MESSAGEPROCESSOR_T5) {
1619 mxt->msg_proc_addr = object_address;
1620 mxt->message_size = object_size;
1621 }
1622
1623 object_table[i].type = object_type;
1624 object_table[i].chip_addr = object_address;
1625 object_table[i].size = object_size;
1626 object_table[i].instances = object_instances;
1627 object_table[i].num_report_ids = object_report_ids;
1628 report_id_count += object_instances * object_report_ids;
1629
1630 object_info_address += MXT_OBJECT_TABLE_ELEMENT_SIZE;
1631 }
1632
1633 mxt->rid_map =
1634 kzalloc(sizeof(struct report_id_map) * (report_id_count + 1),
1635 /* allocate for report_id 0, even if not used */
1636 GFP_KERNEL);
1637 if (mxt->rid_map == NULL) {
1638 printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
1639 error = -ENOMEM;
1640 goto err_rid_map_alloc;
1641 }
1642
1643 mxt->messages = kzalloc(mxt->message_size * MXT_MESSAGE_BUFFER_SIZE,
1644 GFP_KERNEL);
1645 if (mxt->messages == NULL) {
1646 printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
1647 error = -ENOMEM;
1648 goto err_msg_alloc;
1649 }
1650
1651 mxt->last_message = kzalloc(mxt->message_size, GFP_KERNEL);
1652 if (mxt->last_message == NULL) {
1653 printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
1654 error = -ENOMEM;
1655 goto err_msg_alloc;
1656 }
1657
1658 mxt->report_id_count = report_id_count;
1659 if (report_id_count > 254) { /* 0 & 255 are reserved */
1660 dev_err(&client->dev,
1661 "Too many maXTouch report id's [%d]\n",
1662 report_id_count);
1663 error = -ENXIO;
1664 goto err_max_rid;
1665 }
1666
1667 /* Create a mapping from report id to object type */
1668 report_id = 1; /* Start from 1, 0 is reserved. */
1669
1670 /* Create table associating report id's with objects & instances */
1671 for (i = 0; i < mxt->device_info.num_objs; i++) {
1672 for (object_instance = 0;
1673 object_instance < object_table[i].instances;
1674 object_instance++){
1675 first_report_id = report_id;
1676 for (object_report_id = 0;
1677 object_report_id < object_table[i].num_report_ids;
1678 object_report_id++) {
1679 mxt->rid_map[report_id].object =
1680 object_table[i].type;
1681 mxt->rid_map[report_id].instance =
1682 object_instance;
1683 mxt->rid_map[report_id].first_rid =
1684 first_report_id;
1685 report_id++;
1686 }
1687 }
1688 }
1689
1690 /* Read 3 byte CRC */
1691 error = mxt_read_block(client, object_info_address, 3, buf);
1692 if (error < 0) {
1693 mxt->read_fail_counter++;
1694 dev_err(&client->dev, "Error reading CRC\n");
1695 }
1696
1697 crc = (buf[2] << 16) | (buf[1] << 8) | buf[0];
1698
1699 if (calculate_infoblock_crc(&calculated_crc, raw_ib_data,
1700 ib_pointer)) {
1701 printk(KERN_WARNING "Error while calculating CRC!\n");
1702 calculated_crc = 0;
1703 }
1704 kfree(raw_ib_data);
1705
1706 mxt_debug(DEBUG_TRACE, "\nReported info block CRC = 0x%6X\n", crc);
1707 mxt_debug(DEBUG_TRACE, "Calculated info block CRC = 0x%6X\n\n",
1708 calculated_crc);
1709
1710 if (crc == calculated_crc) {
1711 mxt->info_block_crc = crc;
1712 } else {
1713 mxt->info_block_crc = 0;
1714 printk(KERN_ALERT "maXTouch: Info block CRC invalid!\n");
1715 }
1716
1717 if (debug >= DEBUG_VERBOSE) {
1718
1719 dev_info(&client->dev, "maXTouch: %d Objects\n",
1720 mxt->device_info.num_objs);
1721
1722 for (i = 0; i < mxt->device_info.num_objs; i++) {
1723 dev_info(&client->dev, "Type:\t\t\t[%d]: %s\n",
1724 object_table[i].type,
1725 object_type_name[object_table[i].type]);
1726 dev_info(&client->dev, "\tAddress:\t0x%04X\n",
1727 object_table[i].chip_addr);
1728 dev_info(&client->dev, "\tSize:\t\t%d Bytes\n",
1729 object_table[i].size);
1730 dev_info(&client->dev, "\tInstances:\t%d\n",
1731 object_table[i].instances);
1732 dev_info(&client->dev, "\tReport Id's:\t%d\n",
1733 object_table[i].num_report_ids);
1734 }
1735 }
1736
1737 return 0;
1738
1739
1740err_max_rid:
1741 kfree(mxt->last_message);
1742err_msg_alloc:
1743 kfree(mxt->rid_map);
1744err_rid_map_alloc:
1745err_object_read:
1746 kfree(raw_ib_data);
1747err_ib_alloc:
1748 kfree(object_table);
1749err_object_table_alloc:
1750 return error;
1751}
1752
1753#if defined(CONFIG_PM)
1754static int mxt_suspend(struct device *dev)
1755{
1756 struct mxt_data *mxt = dev_get_drvdata(dev);
1757 int error, i;
1758 u8 t7_deepsl_data[T7_DATA_SIZE];
1759 u16 t7_addr;
1760
1761 if (device_may_wakeup(dev)) {
1762 enable_irq_wake(mxt->irq);
1763 return 0;
1764 }
1765
1766 disable_irq(mxt->irq);
1767
1768 flush_delayed_work_sync(&mxt->dwork);
1769
1770 for (i = 0; i < T7_DATA_SIZE; i++)
1771 t7_deepsl_data[i] = 0;
1772
1773 t7_addr = MXT_BASE_ADDR(MXT_GEN_POWERCONFIG_T7, mxt);
1774 /* save current power state values */
1775 error = mxt_read_block(mxt->client, t7_addr,
1776 ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
1777 if (error < 0)
1778 goto err_enable_irq;
1779
1780 /* configure deep sleep mode */
1781 error = mxt_write_block(mxt->client, t7_addr,
1782 ARRAY_SIZE(t7_deepsl_data), t7_deepsl_data);
1783 if (error < 0)
1784 goto err_enable_irq;
1785
1786 /* power off the device */
1787 if (mxt->power_on) {
1788 error = mxt->power_on(false);
1789 if (error) {
1790 dev_err(dev, "power off failed");
1791 goto err_write_block;
1792 }
1793 }
1794 mxt->is_suspended = true;
1795 return 0;
1796
1797err_write_block:
1798 mxt_write_block(mxt->client, t7_addr,
1799 ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
1800err_enable_irq:
1801 enable_irq(mxt->irq);
1802 return error;
1803}
1804
1805static int mxt_resume(struct device *dev)
1806{
1807 struct mxt_data *mxt = dev_get_drvdata(dev);
1808 int error;
1809 u16 t7_addr;
1810
1811 if (device_may_wakeup(dev)) {
1812 disable_irq_wake(mxt->irq);
1813 return 0;
1814 }
1815
1816 if (!mxt->is_suspended)
1817 return 0;
1818
1819 /* power on the device */
1820 if (mxt->power_on) {
1821 error = mxt->power_on(true);
1822 if (error) {
1823 dev_err(dev, "power on failed");
1824 return error;
1825 }
1826 }
1827
1828 t7_addr = MXT_BASE_ADDR(MXT_GEN_POWERCONFIG_T7, mxt);
1829 /* restore the old power state values */
1830 error = mxt_write_block(mxt->client, t7_addr,
1831 ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
1832 if (error < 0)
1833 goto err_write_block;
1834
1835 enable_irq(mxt->irq);
1836
1837 mxt->is_suspended = false;
1838
1839 /* Make sure we just didn't miss a interrupt. */
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301840 if (mxt->read_chg() == 0) {
1841 disable_irq(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001842 schedule_delayed_work(&mxt->dwork, 0);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05301843 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001844
1845 return 0;
1846
1847err_write_block:
1848 if (mxt->power_on)
1849 mxt->power_on(false);
1850 return error;
1851}
1852
1853#if defined(CONFIG_HAS_EARLYSUSPEND)
1854static void mxt_early_suspend(struct early_suspend *h)
1855{
1856 struct mxt_data *mxt = container_of(h, struct mxt_data, early_suspend);
1857
1858 mxt_suspend(&mxt->client->dev);
1859}
1860
1861static void mxt_late_resume(struct early_suspend *h)
1862{
1863 struct mxt_data *mxt = container_of(h, struct mxt_data, early_suspend);
1864
1865 mxt_resume(&mxt->client->dev);
1866}
1867#endif
1868
1869static const struct dev_pm_ops mxt_pm_ops = {
1870#ifndef CONFIG_HAS_EARLYSUSPEND
1871 .suspend = mxt_suspend,
1872 .resume = mxt_resume,
1873#endif
1874};
1875#endif
1876
1877static int __devinit mxt_probe(struct i2c_client *client,
1878 const struct i2c_device_id *id)
1879{
1880 struct mxt_data *mxt;
Mohan Pallaka4e9a94e2011-11-23 16:34:21 +05301881 struct maxtouch_platform_data *pdata;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001882 struct input_dev *input;
1883 u8 *id_data;
1884 u8 *t38_data;
1885 u16 t38_addr;
1886 int error;
1887
1888 mxt_debug(DEBUG_INFO, "mXT224: mxt_probe\n");
1889
1890 if (client == NULL) {
1891 pr_debug("maXTouch: client == NULL\n");
1892 return -EINVAL;
1893 } else if (client->adapter == NULL) {
1894 pr_debug("maXTouch: client->adapter == NULL\n");
1895 return -EINVAL;
1896 } else if (&client->dev == NULL) {
1897 pr_debug("maXTouch: client->dev == NULL\n");
1898 return -EINVAL;
1899 } else if (&client->adapter->dev == NULL) {
1900 pr_debug("maXTouch: client->adapter->dev == NULL\n");
1901 return -EINVAL;
1902 } else if (id == NULL) {
1903 pr_debug("maXTouch: id == NULL\n");
1904 return -EINVAL;
1905 }
1906
1907 /* Enable runtime PM ops, start in ACTIVE mode */
1908 error = pm_runtime_set_active(&client->dev);
1909 if (error < 0)
1910 dev_dbg(&client->dev, "unable to set runtime pm state\n");
1911 pm_runtime_enable(&client->dev);
1912
1913 mxt_debug(DEBUG_INFO, "maXTouch driver v. %s\n", DRIVER_VERSION);
1914 mxt_debug(DEBUG_INFO, "\t \"%s\"\n", client->name);
1915 mxt_debug(DEBUG_INFO, "\taddr:\t0x%04x\n", client->addr);
1916 mxt_debug(DEBUG_INFO, "\tirq:\t%d\n", client->irq);
1917 mxt_debug(DEBUG_INFO, "\tflags:\t0x%04x\n", client->flags);
1918 mxt_debug(DEBUG_INFO, "\tadapter:\"%s\"\n", client->adapter->name);
1919 mxt_debug(DEBUG_INFO, "\tdevice:\t\"%s\"\n", client->dev.init_name);
1920
1921 mxt_debug(DEBUG_TRACE, "maXTouch driver functionality OK\n");
1922
1923 /* Allocate structure - we need it to identify device */
1924 mxt = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1925 if (mxt == NULL) {
1926 dev_err(&client->dev, "insufficient memory\n");
1927 error = -ENOMEM;
1928 goto err_mxt_alloc;
1929 }
1930
1931 id_data = kmalloc(MXT_ID_BLOCK_SIZE, GFP_KERNEL);
1932 if (id_data == NULL) {
1933 dev_err(&client->dev, "insufficient memory\n");
1934 error = -ENOMEM;
1935 goto err_id_alloc;
1936 }
1937
1938 input = input_allocate_device();
1939 if (!input) {
1940 dev_err(&client->dev, "error allocating input device\n");
1941 error = -ENOMEM;
1942 goto err_input_dev_alloc;
1943 }
1944
1945 /* Initialize Platform data */
1946
1947 pdata = client->dev.platform_data;
1948 if (pdata == NULL) {
1949 dev_err(&client->dev, "platform data is required!\n");
1950 error = -EINVAL;
1951 goto err_pdata;
1952 }
1953 if (debug >= DEBUG_TRACE)
1954 printk(KERN_INFO "Platform OK: pdata = 0x%08x\n",
1955 (unsigned int) pdata);
1956
1957 mxt->is_suspended = false;
1958 mxt->read_fail_counter = 0;
1959 mxt->message_counter = 0;
1960
1961 if (pdata->min_x)
1962 mxt->min_x_val = pdata->min_x;
1963 else
1964 mxt->min_x_val = 0;
1965
1966 if (pdata->min_y)
1967 mxt->min_y_val = pdata->min_y;
1968 else
1969 mxt->min_y_val = 0;
1970
1971 mxt->max_x_val = pdata->max_x;
1972 mxt->max_y_val = pdata->max_y;
1973
1974 /* Get data that is defined in board specific code. */
1975 mxt->init_hw = pdata->init_platform_hw;
1976 mxt->exit_hw = pdata->exit_platform_hw;
1977 mxt->power_on = pdata->power_on;
1978 mxt->read_chg = pdata->read_chg;
1979
1980 if (pdata->valid_interrupt != NULL)
1981 mxt->valid_interrupt = pdata->valid_interrupt;
1982 else
1983 mxt->valid_interrupt = mxt_valid_interrupt_dummy;
1984
1985 if (mxt->init_hw) {
1986 error = mxt->init_hw(client);
1987 if (error) {
1988 dev_err(&client->dev, "hw init failed");
1989 goto err_init_hw;
1990 }
1991 }
1992
1993 /* power on the device */
1994 if (mxt->power_on) {
1995 error = mxt->power_on(true);
1996 if (error) {
1997 dev_err(&client->dev, "power on failed");
1998 goto err_pwr_on;
1999 }
2000 }
2001
2002 if (debug >= DEBUG_TRACE)
2003 printk(KERN_INFO "maXTouch driver identifying chip\n");
2004
2005 if (mxt_identify(client, mxt, id_data) < 0) {
2006 dev_err(&client->dev, "Chip could not be identified\n");
2007 error = -ENODEV;
2008 goto err_identify;
2009 }
2010 /* Chip is valid and active. */
2011 if (debug >= DEBUG_TRACE)
2012 printk(KERN_INFO "maXTouch driver allocating input device\n");
2013
2014 mxt->client = client;
2015 mxt->input = input;
2016
2017 INIT_DELAYED_WORK(&mxt->dwork, mxt_worker);
2018 mutex_init(&mxt->debug_mutex);
2019 mutex_init(&mxt->msg_mutex);
2020 mxt_debug(DEBUG_TRACE, "maXTouch driver creating device name\n");
2021
2022 snprintf(
2023 mxt->phys_name,
2024 sizeof(mxt->phys_name),
2025 "%s/input0",
2026 dev_name(&client->dev)
2027 );
2028 input->name = "Atmel maXTouch Touchscreen controller";
2029 input->phys = mxt->phys_name;
2030 input->id.bustype = BUS_I2C;
2031 input->dev.parent = &client->dev;
2032
2033 mxt_debug(DEBUG_INFO, "maXTouch name: \"%s\"\n", input->name);
2034 mxt_debug(DEBUG_INFO, "maXTouch phys: \"%s\"\n", input->phys);
2035 mxt_debug(DEBUG_INFO, "maXTouch driver setting abs parameters\n");
2036
2037 set_bit(BTN_TOUCH, input->keybit);
2038
2039 /* Single touch */
2040 input_set_abs_params(input, ABS_X, mxt->min_x_val,
2041 mxt->max_x_val, 0, 0);
2042 input_set_abs_params(input, ABS_Y, mxt->min_y_val,
2043 mxt->max_y_val, 0, 0);
2044 input_set_abs_params(input, ABS_PRESSURE, 0, MXT_MAX_REPORTED_PRESSURE,
2045 0, 0);
2046 input_set_abs_params(input, ABS_TOOL_WIDTH, 0, MXT_MAX_REPORTED_WIDTH,
2047 0, 0);
2048
2049 /* Multitouch */
2050 input_set_abs_params(input, ABS_MT_POSITION_X, mxt->min_x_val,
2051 mxt->max_x_val, 0, 0);
2052 input_set_abs_params(input, ABS_MT_POSITION_Y, mxt->min_y_val,
2053 mxt->max_y_val, 0, 0);
2054 input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, MXT_MAX_TOUCH_SIZE,
2055 0, 0);
2056 input_set_abs_params(input, ABS_MT_TRACKING_ID, 0, MXT_MAX_NUM_TOUCHES,
2057 0, 0);
2058
2059 __set_bit(EV_ABS, input->evbit);
2060 __set_bit(EV_SYN, input->evbit);
2061 __set_bit(EV_KEY, input->evbit);
2062 __set_bit(EV_MSC, input->evbit);
2063 input->mscbit[0] = BIT_MASK(MSC_GESTURE);
2064
2065 mxt_debug(DEBUG_TRACE, "maXTouch driver setting client data\n");
2066 i2c_set_clientdata(client, mxt);
2067 mxt_debug(DEBUG_TRACE, "maXTouch driver setting drv data\n");
2068 input_set_drvdata(input, mxt);
2069 mxt_debug(DEBUG_TRACE, "maXTouch driver input register device\n");
2070 error = input_register_device(mxt->input);
2071 if (error < 0) {
2072 dev_err(&client->dev,
2073 "Failed to register input device\n");
2074 goto err_register_device;
2075 }
2076
2077 error = mxt_read_object_table(client, mxt, id_data);
2078 if (error < 0)
2079 goto err_read_ot;
2080
2081
2082 /* Create debugfs entries. */
2083 mxt->debug_dir = debugfs_create_dir("maXTouch", NULL);
2084 if (mxt->debug_dir == ERR_PTR(-ENODEV)) {
2085 /* debugfs is not enabled. */
2086 printk(KERN_WARNING "debugfs not enabled in kernel\n");
2087 } else if (mxt->debug_dir == NULL) {
2088 printk(KERN_WARNING "error creating debugfs dir\n");
2089 } else {
2090 mxt_debug(DEBUG_TRACE, "created \"maXTouch\" debugfs dir\n");
2091
2092 debugfs_create_file("deltas", S_IRUSR, mxt->debug_dir, mxt,
2093 &delta_fops);
2094 debugfs_create_file("refs", S_IRUSR, mxt->debug_dir, mxt,
2095 &refs_fops);
2096 }
2097
2098 /* Create character device nodes for reading & writing registers */
2099 mxt->mxt_class = class_create(THIS_MODULE, "maXTouch_memory");
2100 if (IS_ERR(mxt->mxt_class)){
2101 printk(KERN_WARNING "class create failed! exiting...");
2102 goto err_class_create;
2103
2104 }
2105 /* 2 numbers; one for memory and one for messages */
2106 error = alloc_chrdev_region(&mxt->dev_num, 0, 2,
2107 "maXTouch_memory");
2108 mxt_debug(DEBUG_VERBOSE,
2109 "device number %d allocated!\n", MAJOR(mxt->dev_num));
2110 if (error){
2111 printk(KERN_WARNING "Error registering device\n");
2112 }
2113 cdev_init(&mxt->cdev, &mxt_memory_fops);
2114 cdev_init(&mxt->cdev_messages, &mxt_message_fops);
2115
2116 mxt_debug(DEBUG_VERBOSE, "cdev initialized\n");
2117 mxt->cdev.owner = THIS_MODULE;
2118 mxt->cdev_messages.owner = THIS_MODULE;
2119
2120 error = cdev_add(&mxt->cdev, mxt->dev_num, 1);
2121 if (error){
2122 printk(KERN_WARNING "Bad cdev\n");
2123 }
2124
2125 error = cdev_add(&mxt->cdev_messages, mxt->dev_num + 1, 1);
2126 if (error){
2127 printk(KERN_WARNING "Bad cdev\n");
2128 }
2129
2130 mxt_debug(DEBUG_VERBOSE, "cdev added\n");
2131
2132 device_create(mxt->mxt_class, NULL, MKDEV(MAJOR(mxt->dev_num), 0), NULL,
2133 "maXTouch");
2134
2135 device_create(mxt->mxt_class, NULL, MKDEV(MAJOR(mxt->dev_num), 1), NULL,
2136 "maXTouch_messages");
2137
2138 mxt->msg_buffer_startp = 0;
2139 mxt->msg_buffer_endp = 0;
2140
2141 /* Allocate the interrupt */
2142 mxt_debug(DEBUG_TRACE, "maXTouch driver allocating interrupt...\n");
2143 mxt->irq = client->irq;
2144 mxt->valid_irq_counter = 0;
2145 mxt->invalid_irq_counter = 0;
2146 mxt->irq_counter = 0;
2147 if (mxt->irq) {
2148 /* Try to request IRQ with falling edge first. This is
2149 * not always supported. If it fails, try with any edge. */
2150 error = request_irq(mxt->irq,
2151 mxt_irq_handler,
2152 IRQF_TRIGGER_FALLING,
2153 client->dev.driver->name,
2154 mxt);
2155 if (error < 0) {
2156 /* TODO: why only 0 works on STK1000? */
2157 error = request_irq(mxt->irq,
2158 mxt_irq_handler,
2159 0,
2160 client->dev.driver->name,
2161 mxt);
2162 }
2163
2164 if (error < 0) {
2165 dev_err(&client->dev,
2166 "failed to allocate irq %d\n", mxt->irq);
2167 goto err_irq;
2168 }
2169 }
2170
2171 if (debug > DEBUG_INFO)
2172 dev_info(&client->dev, "touchscreen, irq %d\n", mxt->irq);
2173
2174 t38_data = kmalloc(t38_size*sizeof(u8), GFP_KERNEL);
2175
2176 if (t38_data == NULL) {
2177 dev_err(&client->dev, "insufficient memory\n");
2178 error = -ENOMEM;
2179 goto err_t38;
2180 }
2181
2182 t38_addr = MXT_BASE_ADDR(MXT_USER_INFO_T38, mxt);
2183 mxt_read_block(client, t38_addr, t38_size, t38_data);
2184 dev_info(&client->dev, "VERSION:%02x.%02x.%02x, DATE: %d/%d/%d\n",
2185 t38_data[0], t38_data[1], t38_data[2],
2186 t38_data[3], t38_data[4], t38_data[5]);
2187
2188 /* Schedule a worker routine to read any messages that might have
2189 * been sent before interrupts were enabled. */
2190 cancel_delayed_work(&mxt->dwork);
Anirudh Ghayal9ffded22011-09-20 09:00:00 +05302191 disable_irq(mxt->irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002192 schedule_delayed_work(&mxt->dwork, 0);
2193 kfree(t38_data);
2194 kfree(id_data);
2195
2196 device_init_wakeup(&client->dev, pdata->wakeup);
2197#if defined(CONFIG_HAS_EARLYSUSPEND)
2198 mxt->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN +
2199 MXT_SUSPEND_LEVEL;
2200 mxt->early_suspend.suspend = mxt_early_suspend;
2201 mxt->early_suspend.resume = mxt_late_resume;
2202 register_early_suspend(&mxt->early_suspend);
2203#endif
2204
2205 return 0;
2206
2207err_t38:
2208 free_irq(mxt->irq, mxt);
2209err_irq:
2210 kfree(mxt->rid_map);
2211 kfree(mxt->object_table);
2212 kfree(mxt->last_message);
2213err_class_create:
2214 if (mxt->debug_dir)
2215 debugfs_remove(mxt->debug_dir);
2216 kfree(mxt->last_message);
2217 kfree(mxt->rid_map);
2218 kfree(mxt->object_table);
2219err_read_ot:
2220 input_unregister_device(mxt->input);
2221 mxt->input = NULL;
2222err_register_device:
2223 mutex_destroy(&mxt->debug_mutex);
2224 mutex_destroy(&mxt->msg_mutex);
2225err_identify:
2226 if (mxt->power_on)
2227 mxt->power_on(false);
2228err_pwr_on:
2229 if (mxt->exit_hw != NULL)
2230 mxt->exit_hw(client);
2231err_init_hw:
2232err_pdata:
2233 input_free_device(input);
2234err_input_dev_alloc:
2235 kfree(id_data);
2236err_id_alloc:
2237 kfree(mxt);
2238err_mxt_alloc:
2239 pm_runtime_set_suspended(&client->dev);
2240 pm_runtime_disable(&client->dev);
2241 return error;
2242}
2243
2244static int __devexit mxt_remove(struct i2c_client *client)
2245{
2246 struct mxt_data *mxt;
2247
2248 pm_runtime_set_suspended(&client->dev);
2249 pm_runtime_disable(&client->dev);
2250
2251 mxt = i2c_get_clientdata(client);
2252
2253 /* Remove debug dir entries */
2254 debugfs_remove_recursive(mxt->debug_dir);
2255
2256 device_init_wakeup(&client->dev, 0);
2257#if defined(CONFIG_HAS_EARLYSUSPEND)
2258 unregister_early_suspend(&mxt->early_suspend);
2259#endif
2260
2261 if (mxt != NULL) {
2262 if (mxt->power_on)
2263 mxt->power_on(false);
2264
2265 if (mxt->exit_hw != NULL)
2266 mxt->exit_hw(client);
2267
2268 if (mxt->irq) {
2269 free_irq(mxt->irq, mxt);
2270 }
2271
2272 unregister_chrdev_region(mxt->dev_num, 2);
2273 device_destroy(mxt->mxt_class, MKDEV(MAJOR(mxt->dev_num), 0));
2274 device_destroy(mxt->mxt_class, MKDEV(MAJOR(mxt->dev_num), 1));
2275 cdev_del(&mxt->cdev);
2276 cdev_del(&mxt->cdev_messages);
2277 cancel_delayed_work_sync(&mxt->dwork);
2278 input_unregister_device(mxt->input);
2279 class_destroy(mxt->mxt_class);
2280 debugfs_remove(mxt->debug_dir);
2281
2282 kfree(mxt->rid_map);
2283 kfree(mxt->object_table);
2284 kfree(mxt->last_message);
2285 }
2286 kfree(mxt);
2287
2288 i2c_set_clientdata(client, NULL);
2289 if (debug >= DEBUG_TRACE)
2290 dev_info(&client->dev, "Touchscreen unregistered\n");
2291
2292 return 0;
2293}
2294
2295static const struct i2c_device_id mxt_idtable[] = {
2296 {"maXTouch", 0,},
2297 { }
2298};
2299
2300MODULE_DEVICE_TABLE(i2c, mxt_idtable);
2301
2302static struct i2c_driver mxt_driver = {
2303 .driver = {
2304 .name = "maXTouch",
2305 .owner = THIS_MODULE,
2306#if defined(CONFIG_PM)
2307 .pm = &mxt_pm_ops,
2308#endif
2309 },
2310
2311 .id_table = mxt_idtable,
2312 .probe = mxt_probe,
2313 .remove = __devexit_p(mxt_remove),
2314};
2315
2316static int __init mxt_init(void)
2317{
2318 int err;
2319 err = i2c_add_driver(&mxt_driver);
2320 if (err) {
2321 printk(KERN_WARNING "Adding maXTouch driver failed "
2322 "(errno = %d)\n", err);
2323 } else {
2324 mxt_debug(DEBUG_TRACE, "Successfully added driver %s\n",
2325 mxt_driver.driver.name);
2326 }
2327 return err;
2328}
2329
2330static void __exit mxt_cleanup(void)
2331{
2332 i2c_del_driver(&mxt_driver);
2333}
2334
2335
2336module_init(mxt_init);
2337module_exit(mxt_cleanup);
2338
2339MODULE_AUTHOR("Iiro Valkonen");
2340MODULE_DESCRIPTION("Driver for Atmel maXTouch Touchscreen Controller");
2341MODULE_LICENSE("GPL");