1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include <linux/input.h>
29#include <linux/slab.h>
30#include <linux/i2c.h>
31#include <linux/interrupt.h>
32#include <linux/regulator/consumer.h>
33#include <linux/module.h>
34#include <linux/input/mt.h>
35#include "synaptics_i2c_rmi4.h"
36
37
38#define DRIVER_NAME "synaptics_rmi4_i2c"
39
40#define MAX_ERROR_REPORT 6
41#define MAX_TOUCH_MAJOR 15
42#define MAX_RETRY_COUNT 5
43#define STD_QUERY_LEN 21
44#define PAGE_LEN 2
45#define DATA_BUF_LEN 32
46#define BUF_LEN 37
47#define QUERY_LEN 9
48#define DATA_LEN 12
49#define HAS_TAP 0x01
50#define HAS_PALMDETECT 0x01
51#define HAS_ROTATE 0x02
52#define HAS_TAPANDHOLD 0x02
53#define HAS_DOUBLETAP 0x04
54#define HAS_EARLYTAP 0x08
55#define HAS_RELEASE 0x08
56#define HAS_FLICK 0x10
57#define HAS_PRESS 0x20
58#define HAS_PINCH 0x40
59
60#define MASK_16BIT 0xFFFF
61#define MASK_8BIT 0xFF
62#define MASK_7BIT 0x7F
63#define MASK_5BIT 0x1F
64#define MASK_4BIT 0x0F
65#define MASK_3BIT 0x07
66#define MASK_2BIT 0x03
67#define TOUCHPAD_CTRL_INTR 0x8
68#define PDT_START_SCAN_LOCATION (0x00E9)
69#define PDT_END_SCAN_LOCATION (0x000A)
70#define PDT_ENTRY_SIZE (0x0006)
71#define SYNAPTICS_RMI4_TOUCHPAD_FUNC_NUM (0x11)
72#define SYNAPTICS_RMI4_DEVICE_CONTROL_FUNC_NUM (0x01)
73
74
75
76
77
78
79
80
81
82
83
84
85
86struct synaptics_rmi4_fn_desc {
87 unsigned char query_base_addr;
88 unsigned char cmd_base_addr;
89 unsigned char ctrl_base_addr;
90 unsigned char data_base_addr;
91 unsigned char intr_src_count;
92 unsigned char fn_number;
93};
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109struct synaptics_rmi4_fn {
110 unsigned char fn_number;
111 unsigned char num_of_data_sources;
112 unsigned char num_of_data_points;
113 unsigned char size_of_data_register_block;
114 unsigned char index_to_intr_reg;
115 unsigned char intr_mask;
116 struct synaptics_rmi4_fn_desc fn_desc;
117 struct list_head link;
118};
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136struct synaptics_rmi4_device_info {
137 unsigned int version_major;
138 unsigned int version_minor;
139 unsigned char manufacturer_id;
140 unsigned char product_props;
141 unsigned char product_info[2];
142 unsigned char date_code[3];
143 unsigned short tester_id;
144 unsigned short serial_number;
145 unsigned char product_id_string[11];
146 struct list_head support_fn_list;
147};
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171struct synaptics_rmi4_data {
172 struct synaptics_rmi4_device_info rmi4_mod_info;
173 struct input_dev *input_dev;
174 struct i2c_client *i2c_client;
175 const struct synaptics_rmi4_platform_data *board;
176 struct mutex fn_list_mutex;
177 struct mutex rmi4_page_mutex;
178 int current_page;
179 unsigned int number_of_interrupt_register;
180 unsigned short fn01_ctrl_base_addr;
181 unsigned short fn01_query_base_addr;
182 unsigned short fn01_data_base_addr;
183 int sensor_max_x;
184 int sensor_max_y;
185 struct regulator *regulator;
186 wait_queue_head_t wait;
187 bool touch_stopped;
188 unsigned char fingers_supported;
189};
190
191
192
193
194
195
196
197
198static int synaptics_rmi4_set_page(struct synaptics_rmi4_data *pdata,
199 unsigned int address)
200{
201 unsigned char txbuf[PAGE_LEN];
202 int retval;
203 unsigned int page;
204 struct i2c_client *i2c = pdata->i2c_client;
205
206 page = ((address >> 8) & MASK_8BIT);
207 if (page != pdata->current_page) {
208 txbuf[0] = MASK_8BIT;
209 txbuf[1] = page;
210 retval = i2c_master_send(i2c, txbuf, PAGE_LEN);
211 if (retval != PAGE_LEN)
212 dev_err(&i2c->dev, "failed:%d\n", retval);
213 else
214 pdata->current_page = page;
215 } else
216 retval = PAGE_LEN;
217 return retval;
218}
219
220
221
222
223
224
225
226
227
228static int synaptics_rmi4_i2c_block_read(struct synaptics_rmi4_data *pdata,
229 unsigned short address,
230 unsigned char *valp, int size)
231{
232 int retval = 0;
233 int retry_count = 0;
234 int index;
235 struct i2c_client *i2c = pdata->i2c_client;
236
237 mutex_lock(&(pdata->rmi4_page_mutex));
238 retval = synaptics_rmi4_set_page(pdata, address);
239 if (retval != PAGE_LEN)
240 goto exit;
241 index = address & MASK_8BIT;
242retry:
243 retval = i2c_smbus_read_i2c_block_data(i2c, index, size, valp);
244 if (retval != size) {
245 if (++retry_count == MAX_RETRY_COUNT)
246 dev_err(&i2c->dev,
247 "%s:address 0x%04x size %d failed:%d\n",
248 __func__, address, size, retval);
249 else {
250 synaptics_rmi4_set_page(pdata, address);
251 goto retry;
252 }
253 }
254exit:
255 mutex_unlock(&(pdata->rmi4_page_mutex));
256 return retval;
257}
258
259
260
261
262
263
264
265
266
267static int synaptics_rmi4_i2c_byte_write(struct synaptics_rmi4_data *pdata,
268 unsigned short address,
269 unsigned char data)
270{
271 unsigned char txbuf[2];
272 int retval = 0;
273 struct i2c_client *i2c = pdata->i2c_client;
274
275
276 mutex_lock(&(pdata->rmi4_page_mutex));
277
278 retval = synaptics_rmi4_set_page(pdata, address);
279 if (retval != PAGE_LEN)
280 goto exit;
281 txbuf[0] = address & MASK_8BIT;
282 txbuf[1] = data;
283 retval = i2c_master_send(pdata->i2c_client, txbuf, 2);
284
285 if (retval != 2) {
286 dev_err(&i2c->dev, "failed:%d\n", retval);
287 retval = -EIO;
288 } else
289 retval = 1;
290exit:
291 mutex_unlock(&(pdata->rmi4_page_mutex));
292 return retval;
293}
294
295
296
297
298
299
300
301
302static int synpatics_rmi4_touchpad_report(struct synaptics_rmi4_data *pdata,
303 struct synaptics_rmi4_fn *rfi)
304{
305
306 int touch_count = 0;
307 int finger;
308 int finger_registers;
309 int reg;
310 int finger_shift;
311 int finger_status;
312 int retval;
313 int x, y;
314 int wx, wy;
315 unsigned short data_base_addr;
316 unsigned short data_offset;
317 unsigned char data_reg_blk_size;
318 unsigned char values[2];
319 unsigned char data[DATA_LEN];
320 unsigned char fingers_supported = pdata->fingers_supported;
321 struct i2c_client *client = pdata->i2c_client;
322 struct input_dev *input_dev = pdata->input_dev;
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337 finger_registers = (fingers_supported + 3)/4;
338 data_base_addr = rfi->fn_desc.data_base_addr;
339 retval = synaptics_rmi4_i2c_block_read(pdata, data_base_addr, values,
340 finger_registers);
341 if (retval != finger_registers) {
342 dev_err(&client->dev, "%s:read status registers failed\n",
343 __func__);
344 return 0;
345 }
346
347
348
349
350 data_reg_blk_size = rfi->size_of_data_register_block;
351 for (finger = 0; finger < fingers_supported; finger++) {
352
353 reg = finger/4;
354
355 finger_shift = (finger % 4) * 2;
356 finger_status = (values[reg] >> finger_shift) & 3;
357
358
359
360
361 input_mt_slot(input_dev, finger);
362 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER,
363 finger_status != 0);
364
365 if (finger_status) {
366
367 data_offset = data_base_addr +
368 ((finger * data_reg_blk_size) +
369 finger_registers);
370 retval = synaptics_rmi4_i2c_block_read(pdata,
371 data_offset, data,
372 data_reg_blk_size);
373 if (retval != data_reg_blk_size) {
374 dev_err(&client->dev, "%s:read data failed\n",
375 __func__);
376 return 0;
377 }
378 x = (data[0] << 4) | (data[2] & MASK_4BIT);
379 y = (data[1] << 4) | ((data[2] >> 4) & MASK_4BIT);
380 wy = (data[3] >> 4) & MASK_4BIT;
381 wx = (data[3] & MASK_4BIT);
382
383 if (pdata->board->x_flip)
384 x = pdata->sensor_max_x - x;
385 if (pdata->board->y_flip)
386 y = pdata->sensor_max_y - y;
387
388 input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR,
389 max(wx, wy));
390 input_report_abs(input_dev, ABS_MT_POSITION_X, x);
391 input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
392
393
394 touch_count++;
395 }
396 }
397
398
399 input_mt_sync_frame(input_dev);
400 input_sync(input_dev);
401
402 return touch_count;
403}
404
405
406
407
408
409
410
411
412static int synaptics_rmi4_report_device(struct synaptics_rmi4_data *pdata,
413 struct synaptics_rmi4_fn *rfi)
414{
415 int touch = 0;
416 struct i2c_client *client = pdata->i2c_client;
417 static int num_error_reports;
418
419 if (rfi->fn_number != SYNAPTICS_RMI4_TOUCHPAD_FUNC_NUM) {
420 num_error_reports++;
421 if (num_error_reports < MAX_ERROR_REPORT)
422 dev_err(&client->dev, "%s:report not supported\n",
423 __func__);
424 } else
425 touch = synpatics_rmi4_touchpad_report(pdata, rfi);
426 return touch;
427}
428
429
430
431
432
433
434
435static int synaptics_rmi4_sensor_report(struct synaptics_rmi4_data *pdata)
436{
437 unsigned char intr_status[4];
438
439 int touch = 0;
440 unsigned int retval;
441 struct synaptics_rmi4_fn *rfi;
442 struct synaptics_rmi4_device_info *rmi;
443 struct i2c_client *client = pdata->i2c_client;
444
445
446
447
448
449
450 retval = synaptics_rmi4_i2c_block_read(pdata,
451 pdata->fn01_data_base_addr + 1,
452 intr_status,
453 pdata->number_of_interrupt_register);
454 if (retval != pdata->number_of_interrupt_register) {
455 dev_err(&client->dev,
456 "could not read interrupt status registers\n");
457 return 0;
458 }
459
460
461
462
463
464 rmi = &(pdata->rmi4_mod_info);
465 list_for_each_entry(rfi, &rmi->support_fn_list, link) {
466 if (rfi->num_of_data_sources) {
467 if (intr_status[rfi->index_to_intr_reg] &
468 rfi->intr_mask)
469 touch = synaptics_rmi4_report_device(pdata,
470 rfi);
471 }
472 }
473
474 return touch;
475}
476
477
478
479
480
481
482
483
484
485static irqreturn_t synaptics_rmi4_irq(int irq, void *data)
486{
487 struct synaptics_rmi4_data *pdata = data;
488 int touch_count;
489
490 do {
491 touch_count = synaptics_rmi4_sensor_report(pdata);
492 if (touch_count)
493 wait_event_timeout(pdata->wait, pdata->touch_stopped,
494 msecs_to_jiffies(1));
495 else
496 break;
497 } while (!pdata->touch_stopped);
498 return IRQ_HANDLED;
499}
500
501
502
503
504
505
506
507
508
509
510static int synpatics_rmi4_touchpad_detect(struct synaptics_rmi4_data *pdata,
511 struct synaptics_rmi4_fn *rfi,
512 struct synaptics_rmi4_fn_desc *fd,
513 unsigned int interruptcount)
514{
515 unsigned char queries[QUERY_LEN];
516 unsigned short intr_offset;
517 unsigned char abs_data_size;
518 unsigned char abs_data_blk_size;
519 unsigned char egr_0, egr_1;
520 unsigned int all_data_blk_size;
521 int has_pinch, has_flick, has_tap;
522 int has_tapandhold, has_doubletap;
523 int has_earlytap, has_press;
524 int has_palmdetect, has_rotate;
525 int has_rel;
526 int i;
527 int retval;
528 struct i2c_client *client = pdata->i2c_client;
529
530 rfi->fn_desc.query_base_addr = fd->query_base_addr;
531 rfi->fn_desc.data_base_addr = fd->data_base_addr;
532 rfi->fn_desc.intr_src_count = fd->intr_src_count;
533 rfi->fn_desc.fn_number = fd->fn_number;
534 rfi->fn_number = fd->fn_number;
535 rfi->num_of_data_sources = fd->intr_src_count;
536 rfi->fn_desc.ctrl_base_addr = fd->ctrl_base_addr;
537 rfi->fn_desc.cmd_base_addr = fd->cmd_base_addr;
538
539
540
541
542
543
544 retval = synaptics_rmi4_i2c_block_read(pdata, fd->query_base_addr,
545 queries,
546 sizeof(queries));
547 if (retval != sizeof(queries)) {
548 dev_err(&client->dev, "%s:read function query registers\n",
549 __func__);
550 return retval;
551 }
552
553
554
555
556 if ((queries[1] & MASK_3BIT) <= 4)
557
558 rfi->num_of_data_points = (queries[1] & MASK_3BIT) + 1;
559 else {
560
561
562
563
564 if ((queries[1] & MASK_3BIT) == 5)
565 rfi->num_of_data_points = 10;
566 }
567 pdata->fingers_supported = rfi->num_of_data_points;
568
569 rfi->index_to_intr_reg = (interruptcount + 7)/8;
570 if (rfi->index_to_intr_reg != 0)
571 rfi->index_to_intr_reg -= 1;
572
573
574
575
576 intr_offset = interruptcount % 8;
577 rfi->intr_mask = 0;
578 for (i = intr_offset;
579 i < ((fd->intr_src_count & MASK_3BIT) + intr_offset); i++)
580 rfi->intr_mask |= 1 << i;
581
582
583 abs_data_size = queries[5] & MASK_2BIT;
584
585 abs_data_blk_size = 3 + (2 * (abs_data_size == 0 ? 1 : 0));
586 rfi->size_of_data_register_block = abs_data_blk_size;
587
588
589
590
591
592
593 egr_0 = queries[7];
594 egr_1 = queries[8];
595
596
597
598
599
600 has_pinch = egr_0 & HAS_PINCH;
601 has_flick = egr_0 & HAS_FLICK;
602 has_tap = egr_0 & HAS_TAP;
603 has_earlytap = egr_0 & HAS_EARLYTAP;
604 has_press = egr_0 & HAS_PRESS;
605 has_rotate = egr_1 & HAS_ROTATE;
606 has_rel = queries[1] & HAS_RELEASE;
607 has_tapandhold = egr_0 & HAS_TAPANDHOLD;
608 has_doubletap = egr_0 & HAS_DOUBLETAP;
609 has_palmdetect = egr_1 & HAS_PALMDETECT;
610
611
612
613
614
615 all_data_blk_size =
616
617 ((rfi->num_of_data_points + 3) / 4) +
618
619 (abs_data_blk_size * rfi->num_of_data_points) +
620
621
622
623 2 * has_rel +
624
625
626
627
628 !!(egr_0) +
629
630
631
632
633 (egr_0 || egr_1) +
634
635
636
637
638 !!(has_pinch | has_flick) +
639
640
641
642
643 2 * !!(has_flick);
644 return retval;
645}
646
647
648
649
650
651
652
653
654static int synaptics_rmi4_touchpad_config(struct synaptics_rmi4_data *pdata,
655 struct synaptics_rmi4_fn *rfi)
656{
657
658
659
660
661 unsigned char data[BUF_LEN];
662 int retval = 0;
663 struct i2c_client *client = pdata->i2c_client;
664
665
666
667
668
669 retval = synaptics_rmi4_i2c_block_read(pdata,
670 rfi->fn_desc.query_base_addr,
671 data, QUERY_LEN);
672 if (retval != QUERY_LEN)
673 dev_err(&client->dev, "%s:read query registers failed\n",
674 __func__);
675 else {
676 retval = synaptics_rmi4_i2c_block_read(pdata,
677 rfi->fn_desc.ctrl_base_addr,
678 data, DATA_BUF_LEN);
679 if (retval != DATA_BUF_LEN) {
680 dev_err(&client->dev,
681 "%s:read control registers failed\n",
682 __func__);
683 return retval;
684 }
685
686 pdata->sensor_max_x = ((data[6] & MASK_8BIT) << 0) |
687 ((data[7] & MASK_4BIT) << 8);
688 pdata->sensor_max_y = ((data[8] & MASK_5BIT) << 0) |
689 ((data[9] & MASK_4BIT) << 8);
690 }
691 return retval;
692}
693
694
695
696
697
698
699
700static int synaptics_rmi4_i2c_query_device(struct synaptics_rmi4_data *pdata)
701{
702 int i;
703 int retval;
704 unsigned char std_queries[STD_QUERY_LEN];
705 unsigned char intr_count = 0;
706 int data_sources = 0;
707 unsigned int ctrl_offset;
708 struct synaptics_rmi4_fn *rfi;
709 struct synaptics_rmi4_fn_desc rmi_fd;
710 struct synaptics_rmi4_device_info *rmi;
711 struct i2c_client *client = pdata->i2c_client;
712
713
714
715
716
717 INIT_LIST_HEAD(&pdata->rmi4_mod_info.support_fn_list);
718
719
720
721
722
723 for (i = PDT_START_SCAN_LOCATION; i > PDT_END_SCAN_LOCATION;
724 i -= PDT_ENTRY_SIZE) {
725 retval = synaptics_rmi4_i2c_block_read(pdata, i,
726 (unsigned char *)&rmi_fd,
727 sizeof(rmi_fd));
728 if (retval != sizeof(rmi_fd)) {
729
730 dev_err(&client->dev, "%s: read error\n", __func__);
731 return -EIO;
732 }
733 rfi = NULL;
734 if (rmi_fd.fn_number) {
735 switch (rmi_fd.fn_number & MASK_8BIT) {
736 case SYNAPTICS_RMI4_DEVICE_CONTROL_FUNC_NUM:
737 pdata->fn01_query_base_addr =
738 rmi_fd.query_base_addr;
739 pdata->fn01_ctrl_base_addr =
740 rmi_fd.ctrl_base_addr;
741 pdata->fn01_data_base_addr =
742 rmi_fd.data_base_addr;
743 break;
744 case SYNAPTICS_RMI4_TOUCHPAD_FUNC_NUM:
745 if (rmi_fd.intr_src_count) {
746 rfi = kmalloc(sizeof(*rfi),
747 GFP_KERNEL);
748 if (!rfi)
749 return -ENOMEM;
750 retval = synpatics_rmi4_touchpad_detect
751 (pdata, rfi,
752 &rmi_fd,
753 intr_count);
754 if (retval < 0) {
755 kfree(rfi);
756 return retval;
757 }
758 }
759 break;
760 }
761
762 intr_count += (rmi_fd.intr_src_count & MASK_3BIT);
763
764
765
766
767 if (rfi && rmi_fd.intr_src_count) {
768
769 mutex_lock(&(pdata->fn_list_mutex));
770 list_add_tail(&rfi->link,
771 &pdata->rmi4_mod_info.support_fn_list);
772 mutex_unlock(&(pdata->fn_list_mutex));
773 }
774 } else {
775
776
777
778
779 dev_dbg(&client->dev,
780 "%s:end of PDT\n", __func__);
781 break;
782 }
783 }
784
785
786
787
788 pdata->number_of_interrupt_register = (intr_count + 7) / 8;
789
790
791
792
793
794
795
796
797 retval = synaptics_rmi4_i2c_block_read(pdata,
798 pdata->fn01_query_base_addr,
799 std_queries,
800 sizeof(std_queries));
801 if (retval != sizeof(std_queries)) {
802 dev_err(&client->dev, "%s:Failed reading queries\n",
803 __func__);
804 return -EIO;
805 }
806
807
808 pdata->rmi4_mod_info.version_major = 4;
809 pdata->rmi4_mod_info.version_minor = 0;
810
811
812
813
814 pdata->rmi4_mod_info.manufacturer_id = std_queries[0];
815 pdata->rmi4_mod_info.product_props = std_queries[1];
816 pdata->rmi4_mod_info.product_info[0] = std_queries[2];
817 pdata->rmi4_mod_info.product_info[1] = std_queries[3];
818
819 pdata->rmi4_mod_info.date_code[0] = std_queries[4] & MASK_5BIT;
820
821 pdata->rmi4_mod_info.date_code[1] = std_queries[5] & MASK_4BIT;
822
823 pdata->rmi4_mod_info.date_code[2] = std_queries[6] & MASK_5BIT;
824 pdata->rmi4_mod_info.tester_id = ((std_queries[7] & MASK_7BIT) << 8) |
825 (std_queries[8] & MASK_7BIT);
826 pdata->rmi4_mod_info.serial_number =
827 ((std_queries[9] & MASK_7BIT) << 8) |
828 (std_queries[10] & MASK_7BIT);
829 memcpy(pdata->rmi4_mod_info.product_id_string, &std_queries[11], 10);
830
831
832 if (pdata->rmi4_mod_info.manufacturer_id != 1)
833 dev_err(&client->dev, "non-Synaptics mfg id:%d\n",
834 pdata->rmi4_mod_info.manufacturer_id);
835
836 list_for_each_entry(rfi, &pdata->rmi4_mod_info.support_fn_list, link)
837 data_sources += rfi->num_of_data_sources;
838 if (data_sources) {
839 rmi = &(pdata->rmi4_mod_info);
840 list_for_each_entry(rfi, &rmi->support_fn_list, link) {
841 if (rfi->num_of_data_sources) {
842 if (rfi->fn_number ==
843 SYNAPTICS_RMI4_TOUCHPAD_FUNC_NUM) {
844 retval = synaptics_rmi4_touchpad_config
845 (pdata, rfi);
846 if (retval < 0)
847 return retval;
848 } else
849 dev_err(&client->dev,
850 "%s:fn_number not supported\n",
851 __func__);
852
853
854
855
856 ctrl_offset = pdata->fn01_ctrl_base_addr + 1 +
857 rfi->index_to_intr_reg;
858 retval = synaptics_rmi4_i2c_byte_write(pdata,
859 ctrl_offset,
860 rfi->intr_mask);
861 if (retval < 0)
862 return retval;
863 }
864 }
865 }
866 return 0;
867}
868
869
870
871
872
873static struct synaptics_rmi4_platform_data synaptics_rmi4_platformdata = {
874 .irq_type = (IRQF_TRIGGER_FALLING | IRQF_SHARED),
875 .x_flip = false,
876 .y_flip = true,
877};
878
879
880
881
882
883
884
885
886
887
888
889
890static int synaptics_rmi4_probe
891 (struct i2c_client *client, const struct i2c_device_id *dev_id)
892{
893 int retval;
894 unsigned char intr_status[4];
895 struct synaptics_rmi4_data *rmi4_data;
896 const struct synaptics_rmi4_platform_data *platformdata =
897 client->dev.platform_data;
898
899 if (!i2c_check_functionality(client->adapter,
900 I2C_FUNC_SMBUS_BYTE_DATA)) {
901 dev_err(&client->dev, "i2c smbus byte data not supported\n");
902 return -EIO;
903 }
904
905 if (!platformdata)
906 platformdata = &synaptics_rmi4_platformdata;
907
908
909 rmi4_data = kcalloc(2, sizeof(struct synaptics_rmi4_data),
910 GFP_KERNEL);
911 if (!rmi4_data)
912 return -ENOMEM;
913
914 rmi4_data->input_dev = input_allocate_device();
915 if (rmi4_data->input_dev == NULL) {
916 retval = -ENOMEM;
917 goto err_input;
918 }
919
920 rmi4_data->regulator = regulator_get(&client->dev, "vdd");
921 if (IS_ERR(rmi4_data->regulator)) {
922 dev_err(&client->dev, "%s:get regulator failed\n",
923 __func__);
924 retval = PTR_ERR(rmi4_data->regulator);
925 goto err_get_regulator;
926 }
927 retval = regulator_enable(rmi4_data->regulator);
928 if (retval < 0) {
929 dev_err(&client->dev, "%s:regulator enable failed\n",
930 __func__);
931 goto err_regulator_enable;
932 }
933 init_waitqueue_head(&rmi4_data->wait);
934
935
936
937
938 rmi4_data->i2c_client = client;
939
940 rmi4_data->current_page = MASK_16BIT;
941 rmi4_data->board = platformdata;
942 rmi4_data->touch_stopped = false;
943
944
945 mutex_init(&(rmi4_data->fn_list_mutex));
946 mutex_init(&(rmi4_data->rmi4_page_mutex));
947
948
949
950
951
952
953 retval = synaptics_rmi4_i2c_query_device(rmi4_data);
954 if (retval) {
955 dev_err(&client->dev, "%s: rmi4 query device failed\n",
956 __func__);
957 goto err_query_dev;
958 }
959
960
961 i2c_set_clientdata(client, rmi4_data);
962
963
964 rmi4_data->input_dev->name = DRIVER_NAME;
965 rmi4_data->input_dev->phys = "Synaptics_Clearpad";
966 rmi4_data->input_dev->id.bustype = BUS_I2C;
967 rmi4_data->input_dev->dev.parent = &client->dev;
968 input_set_drvdata(rmi4_data->input_dev, rmi4_data);
969
970
971 set_bit(EV_SYN, rmi4_data->input_dev->evbit);
972 set_bit(EV_KEY, rmi4_data->input_dev->evbit);
973 set_bit(EV_ABS, rmi4_data->input_dev->evbit);
974
975 input_set_abs_params(rmi4_data->input_dev, ABS_MT_POSITION_X, 0,
976 rmi4_data->sensor_max_x, 0, 0);
977 input_set_abs_params(rmi4_data->input_dev, ABS_MT_POSITION_Y, 0,
978 rmi4_data->sensor_max_y, 0, 0);
979 input_set_abs_params(rmi4_data->input_dev, ABS_MT_TOUCH_MAJOR, 0,
980 MAX_TOUCH_MAJOR, 0, 0);
981 input_mt_init_slots(rmi4_data->input_dev,
982 rmi4_data->fingers_supported, 0);
983
984
985 synaptics_rmi4_i2c_block_read(rmi4_data,
986 rmi4_data->fn01_data_base_addr + 1, intr_status,
987 rmi4_data->number_of_interrupt_register);
988 retval = request_threaded_irq(client->irq, NULL,
989 synaptics_rmi4_irq,
990 platformdata->irq_type,
991 DRIVER_NAME, rmi4_data);
992 if (retval) {
993 dev_err(&client->dev, "Unable to get attn irq %d\n",
994 client->irq);
995 goto err_query_dev;
996 }
997
998 retval = input_register_device(rmi4_data->input_dev);
999 if (retval) {
1000 dev_err(&client->dev, "%s:input register failed\n", __func__);
1001 goto err_free_irq;
1002 }
1003
1004 return retval;
1005
1006err_free_irq:
1007 free_irq(client->irq, rmi4_data);
1008err_query_dev:
1009 regulator_disable(rmi4_data->regulator);
1010err_regulator_enable:
1011 regulator_put(rmi4_data->regulator);
1012err_get_regulator:
1013 input_free_device(rmi4_data->input_dev);
1014 rmi4_data->input_dev = NULL;
1015err_input:
1016 kfree(rmi4_data);
1017
1018 return retval;
1019}
1020
1021
1022
1023
1024
1025
1026
1027static int synaptics_rmi4_remove(struct i2c_client *client)
1028{
1029 struct synaptics_rmi4_data *rmi4_data = i2c_get_clientdata(client);
1030
1031 rmi4_data->touch_stopped = true;
1032 wake_up(&rmi4_data->wait);
1033 free_irq(client->irq, rmi4_data);
1034 input_unregister_device(rmi4_data->input_dev);
1035 regulator_disable(rmi4_data->regulator);
1036 regulator_put(rmi4_data->regulator);
1037 kfree(rmi4_data);
1038
1039 return 0;
1040}
1041
1042#ifdef CONFIG_PM
1043
1044
1045
1046
1047
1048
1049
1050static int synaptics_rmi4_suspend(struct device *dev)
1051{
1052
1053 int retval;
1054 unsigned char intr_status;
1055 struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev);
1056
1057 rmi4_data->touch_stopped = true;
1058 disable_irq(rmi4_data->i2c_client->irq);
1059
1060 retval = synaptics_rmi4_i2c_block_read(rmi4_data,
1061 rmi4_data->fn01_data_base_addr + 1,
1062 &intr_status,
1063 rmi4_data->number_of_interrupt_register);
1064 if (retval < 0)
1065 return retval;
1066
1067 retval = synaptics_rmi4_i2c_byte_write(rmi4_data,
1068 rmi4_data->fn01_ctrl_base_addr + 1,
1069 (intr_status & ~TOUCHPAD_CTRL_INTR));
1070 if (retval < 0)
1071 return retval;
1072
1073 regulator_disable(rmi4_data->regulator);
1074
1075 return 0;
1076}
1077
1078
1079
1080
1081
1082
1083
1084static int synaptics_rmi4_resume(struct device *dev)
1085{
1086 int retval;
1087 unsigned char intr_status;
1088 struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev);
1089
1090 retval = regulator_enable(rmi4_data->regulator);
1091 if (retval) {
1092 dev_err(dev, "Regulator enable failed (%d)\n", retval);
1093 return retval;
1094 }
1095
1096 enable_irq(rmi4_data->i2c_client->irq);
1097 rmi4_data->touch_stopped = false;
1098
1099 retval = synaptics_rmi4_i2c_block_read(rmi4_data,
1100 rmi4_data->fn01_data_base_addr + 1,
1101 &intr_status,
1102 rmi4_data->number_of_interrupt_register);
1103 if (retval < 0)
1104 return retval;
1105
1106 retval = synaptics_rmi4_i2c_byte_write(rmi4_data,
1107 rmi4_data->fn01_ctrl_base_addr + 1,
1108 (intr_status | TOUCHPAD_CTRL_INTR));
1109 if (retval < 0)
1110 return retval;
1111
1112 return 0;
1113}
1114
1115#endif
1116
1117static SIMPLE_DEV_PM_OPS(synaptics_rmi4_dev_pm_ops, synaptics_rmi4_suspend,
1118 synaptics_rmi4_resume);
1119
1120static const struct i2c_device_id synaptics_rmi4_id_table[] = {
1121 { DRIVER_NAME, 0 },
1122 { },
1123};
1124MODULE_DEVICE_TABLE(i2c, synaptics_rmi4_id_table);
1125
1126static struct i2c_driver synaptics_rmi4_driver = {
1127 .driver = {
1128 .name = DRIVER_NAME,
1129 .owner = THIS_MODULE,
1130 .pm = &synaptics_rmi4_dev_pm_ops,
1131 },
1132 .probe = synaptics_rmi4_probe,
1133 .remove = synaptics_rmi4_remove,
1134 .id_table = synaptics_rmi4_id_table,
1135};
1136
1137module_i2c_driver(synaptics_rmi4_driver);
1138
1139MODULE_LICENSE("GPL v2");
1140MODULE_AUTHOR("naveen.gaddipati@stericsson.com, js.ha@stericsson.com");
1141MODULE_DESCRIPTION("synaptics rmi4 i2c touch Driver");
1142MODULE_ALIAS("i2c:synaptics_rmi4_ts");
1143