2 * CORERIVER TOUCHCORE touchkey driver
4 * Copyright (C) 2012 Samsung Electronics Co.Ltd
5 * Author: Taeyoon Yoon <tyoony.yoon@samsung.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
13 #include <linux/delay.h>
14 #include <linux/firmware.h>
15 #include <linux/of_gpio.h>
16 #include <linux/gpio.h>
17 #include <linux/i2c.h>
18 #include <linux/init.h>
19 #include <linux/input.h>
20 #include <linux/interrupt.h>
21 #include <linux/irq.h>
22 #include <linux/kernel.h>
23 #include <linux/leds.h>
24 #include <linux/module.h>
25 #include <linux/mutex.h>
26 #include <linux/slab.h>
27 #include <linux/wakelock.h>
28 #include <linux/workqueue.h>
29 #include <linux/uaccess.h>
30 #include <linux/regulator/consumer.h>
31 #include "tc350-touchkey.h"
32 #ifdef CONFIG_SLEEP_MONITOR
33 #include <linux/power/sleep_monitor.h>
36 #define TC300K_FW_BUILTIN_PATH "coreriver"
37 #define TC300K_FW_IN_SDCARD_PATH "/opt/usr/media/"
39 #define TC300K_POWERON_DELAY 300
40 #define TC300K_KEY_INDEX_MASK 0x07
41 #define TC300K_KEY_PRESS_MASK 0x08
43 #define TC300K_KEYCODE 0x00
44 #define TC300K_FWVER 0x01
45 #define TC300K_MDVER 0x02
46 #define TC300K_MODE 0x03
47 #define TC300K_CHECKS_H 0x04
48 #define TC300K_CHECKS_L 0x05
50 #define TC300K_1KEY_DATA 0x10
51 #define TC300K_2KEY_DATA 0x18
52 #define TC300K_3KEY_DATA 0x20
53 #define TC300K_4KEY_DATA 0x28
55 #define TC300K_THRES_H_OFFSET 0x00
56 #define TC300K_THRES_L_OFFSET 0x01
57 #define TC300K_CH_PCK_H_OFFSET 0x02
58 #define TC300K_CH_PCK_L_OFFSET 0x03
59 #define TC300K_DIFF_H_OFFSET 0x04
60 #define TC300K_DIFF_L_OFFSET 0x05
61 #define TC300K_RAW_H_OFFSET 0x06
62 #define TC300K_RAW_L_OFFSET 0x07
65 #define TC300K_CMD_ADDR 0x00
66 #define TC300K_CMD_LED_ON 0x10
67 #define TC300K_CMD_LED_OFF 0x20
68 #define TC300K_CMD_GLOVE_ON 0x30
69 #define TC300K_CMD_GLOVE_OFF 0x40
70 #define TC300K_CMD_FAC_ON 0x50
71 #define TC300K_CMD_FAC_OFF 0x60
72 #define TC300K_CMD_CAL_CHECKSUM 0x70
73 #define TC300K_CMD_DELAY 50
76 #define TC300K_CSYNC1 0xA3
77 #define TC300K_CSYNC2 0xAC
78 #define TC300K_CSYNC3 0xA5
79 #define TC300K_CCFG 0x92
80 #define TC300K_PRDATA 0x81
81 #define TC300K_PEDATA 0x82
82 #define TC300K_PWDATA 0x83
83 #define TC300K_PECHIP 0x8A
84 #define TC300K_PEDISC 0xB0
85 #define TC300K_LDDATA 0xB2
86 #define TC300K_LDMODE 0xB8
87 #define TC300K_RDDATA 0xB9
88 #define TC300K_PCRST 0xB4
89 #define TC300K_PCRED 0xB5
90 #define TC300K_PCINC 0xB6
91 #define TC300K_RDPCH 0xBD
94 #define TC300K_TSYNC1 300 /* us */
95 #define TC300K_TSYNC2 50 /* 1ms~50ms */
96 #define TC300K_TSYNC3 100 /* us */
97 #define TC300K_TDLY1 1 /* us */
98 #define TC300K_TDLY2 2 /* us */
99 #define TC300K_TFERASE 10 /* ms */
100 #define TC300K_TPROG 20 /* us */
102 #define TC300K_CHECKSUM_DELAY 500
103 #define TO_STRING(x) #x
105 #define TC300K_RETRY_CNT 3
107 #define TC300K_KEY_PRESS 1
108 #define TC300K_KEY_RELEASE 0
110 #define TC300K_INVALID_VER 0xff
112 #define SEC_DEV_TOUCHKEY_MAJOR 1
113 #define SEC_DEV_TOUCHKEY_MINOR 0
131 struct fdata_struct {
132 struct device *dummy_dev;
147 } __attribute__ ((packed));
149 struct tsk_event_val {
157 struct i2c_client *client;
158 struct input_dev *input_dev;
159 struct tc300k_platform_data *pdata;
161 struct fw_image *fw_img;
162 struct pinctrl *pinctrl;
163 struct fdata_struct *fdata;
164 struct wake_lock fw_wake_lock;
165 struct regulator *vcc_en;
166 struct regulator *vdd_led;
167 struct tsk_event_val *tsk_ev_val;
168 const struct firmware *fw;
187 struct tsk_event_val tsk_ev[TC300K_MAX_KEY*2] =
189 {0x01, TC300K_KEY_PRESS, KEY_PHONE, "MENU_KEY"},
190 {0x02, TC300K_KEY_PRESS, KEY_BACK, "BACK_KEY"},
191 {0x10, TC300K_KEY_RELEASE, KEY_PHONE, "MENU_KEY"},
192 {0x20, TC300K_KEY_RELEASE, KEY_BACK, "BACK_KEY"},
195 #ifdef CONFIG_PM_SLEEP
196 static int tc300k_input_open(struct input_dev *dev);
197 static void tc300k_input_close(struct input_dev *dev);
199 extern struct class *sec_class;
201 static int tkey_pinctrl_configure(struct tc300k_data *data, bool active)
204 struct pinctrl_state *set_state_i2c;
207 dev_info(&data->client->dev, "%s: %s\n", __func__, active ? "ACTIVE" : "SUSPEND");
211 pinctrl_lookup_state(data->pinctrl,
213 if (IS_ERR(set_state_i2c)) {
214 dev_err(&data->client->dev, "%s: cannot get pinctrl(i2c) active state\n", __func__);
215 return PTR_ERR(set_state_i2c);
219 pinctrl_lookup_state(data->pinctrl,
220 "tkey_gpio_suspend");
221 if (IS_ERR(set_state_i2c)) {
222 dev_err(&data->client->dev, "%s: cannot get pinctrl(i2c) sleep state\n", __func__);
223 return PTR_ERR(set_state_i2c);
227 retval = pinctrl_select_state(data->pinctrl, set_state_i2c);
229 dev_err(&data->client->dev, "%s: cannot set pinctrl(i2c) %s state\n",
230 __func__, active ? "active" : "suspend");
235 gpio_direction_input(data->pdata->gpio_sda);
236 gpio_direction_input(data->pdata->gpio_scl);
237 gpio_direction_input(data->pdata->gpio_int);
244 static void tc300k_gpio_request(struct tc300k_data *data)
246 struct tc300k_platform_data *pdata = data->pdata;
247 struct i2c_client *client = data->client;
250 ret = gpio_request(pdata->gpio_en, "touchkey_en_gpio");
252 dev_err(&client->dev, "%s: unable to request touchkey_en_gpio[%d]\n",
253 __func__, pdata->gpio_en);
255 dev_dbg(&client->dev, "%s: request touchkey_en_gpio[%d]\n",
256 __func__, pdata->gpio_en);
259 ret = gpio_request(pdata->gpio_int, "touchkey_irq");
261 dev_err(&client->dev, "%s: unable to request touchkey_irq [%d]\n",
262 __func__, pdata->gpio_int);
264 dev_dbg(&client->dev, "%s: request touchkey_irq [%d]\n",
265 __func__, pdata->gpio_int);
267 ret = gpio_request(pdata->gpio_sda, "touchkey_sda");
269 dev_err(&client->dev, "%s: unable to request touchkey_sda [%d]\n",
270 __func__, pdata->gpio_sda);
272 dev_dbg(&client->dev, "%s: request touchkey_sda [%d]\n",
273 __func__, pdata->gpio_sda);
275 ret = gpio_request(pdata->gpio_sda, "touchkey_scl");
277 dev_err(&client->dev, "%s: unable to request touchkey_scl [%d]\n",
278 __func__, pdata->gpio_scl);
280 dev_dbg(&client->dev, "%s: request touchkey_scl [%d]\n",
281 __func__, pdata->gpio_scl);
283 if ((int)(pdata->gpio_2p8_en) > 0) {
284 ret = gpio_request(pdata->gpio_2p8_en, "touchkey_en_gpio2p8");
286 dev_err(&client->dev, "%s: unable to request touchkey_en_gpio2p8[%d]\n",
287 __func__, pdata->gpio_2p8_en);
289 dev_dbg(&client->dev, "%s: request touchkey_en_gpio2p8[%d]\n",
290 __func__, pdata->gpio_2p8_en);
293 ret = gpio_direction_input(pdata->gpio_sda);
295 dev_err(&client->dev, "%s: unable to change direction touchkey_sda [%d]\n",
296 __func__, pdata->gpio_sda);
298 dev_dbg(&client->dev, "%s: change direction touchkey_sda [%d]\n",
299 __func__, pdata->gpio_sda);
301 ret = gpio_direction_input(pdata->gpio_scl);
303 dev_err(&client->dev, "%s: unable to change direction touchkey_scl [%d]\n",
304 __func__, pdata->gpio_sda);
306 dev_dbg(&client->dev, "%s: change direction touchkey_scl [%d]\n",
307 __func__, pdata->gpio_scl);
309 ret = gpio_direction_input(pdata->gpio_int);
311 dev_err(&client->dev, "%s: unable to change direction touchkey_int [%d]\n",
312 __func__, pdata->gpio_int);
314 dev_dbg(&client->dev, "%s: change direction touchkey_int [%d]\n",
315 __func__, pdata->gpio_int);
317 ret = gpio_direction_output(pdata->gpio_en, 0);
319 dev_err(&client->dev, "%s: unable to change direction touchkey_en [%d]\n",
320 __func__, pdata->gpio_en);
322 dev_dbg(&client->dev, "%s: change direction touchkey_en [%d]\n",
323 __func__, pdata->gpio_en);
325 if ((int)(pdata->gpio_2p8_en) > 0 ) {
326 ret = gpio_direction_output(pdata->gpio_2p8_en, 0);
328 dev_err(&client->dev, "%s: unable to change direction touchkey_2p8_en [%d]\n",
329 __func__, pdata->gpio_2p8_en);
331 dev_dbg(&client->dev, "%s: change direction touchkey_2p8_en [%d]\n",
332 __func__, pdata->gpio_2p8_en);
336 void tc300k_power(struct tc300k_data *data, int onoff)
338 struct i2c_client *client = data->client;
341 gpio_direction_output(data->pdata->gpio_en, 1);
343 gpio_direction_output(data->pdata->gpio_en, 0);
345 if ((int)(data->pdata->gpio_2p8_en) > 0 )
346 gpio_direction_output(data->pdata->gpio_2p8_en, onoff);
348 dev_info(&client->dev, "%s: [%s]\n",__func__, onoff ? "ON" : "OFF");
351 void tc300k_led_power(struct tc300k_data *data, bool onoff)
356 pr_info("%sTKEY_LED 3.3V[vdd_led] on is finished.\n",__func__);
358 pr_info("%sTKEY_LED 3.3V[vdd_led] off is finished\n",__func__);
361 static int tc300k_get_module_ver(struct tc300k_data *data)
363 struct i2c_client *client = data->client;
368 module_ver = i2c_smbus_read_byte_data(client, TC300K_MDVER);
369 if (module_ver < 0) {
370 dev_err(&client->dev,
371 "%s: failed to read IC module ver [%d][%d]\n", __func__,
372 module_ver, retries);
374 tc300k_power(data,0);
375 msleep(TC300K_POWERON_DELAY);
376 tc300k_power(data,1);
377 msleep(TC300K_POWERON_DELAY);
378 goto read_module_version;
385 static int tc300k_get_fw_ver(struct tc300k_data *data)
387 struct i2c_client *client = data->client;
392 ver = i2c_smbus_read_byte_data(client, TC300K_FWVER);
394 dev_err(&client->dev,
395 "%s : failed to read IC fw ver. [%d][%d]\n",
396 __func__, ver, retries);
398 tc300k_power(data,0);
399 msleep(TC300K_POWERON_DELAY);
400 tc300k_power(data,1);
401 msleep(TC300K_POWERON_DELAY);
407 data->ic_fw_ver= ver;
409 dev_err(&client->dev, "%s : failed to get IC fw ver.\n", __func__);
414 static inline void setsda(struct tc300k_data *data, int state)
417 gpio_direction_output(data->pdata->gpio_sda, 1);
419 gpio_direction_output(data->pdata->gpio_sda, 0);
422 static inline void setscl(struct tc300k_data *data, int state)
425 gpio_direction_output(data->pdata->gpio_scl, 1);
427 gpio_direction_output(data->pdata->gpio_scl, 0);
430 static inline int getsda(struct tc300k_data *data)
432 gpio_direction_input(data->pdata->gpio_sda);
434 return gpio_get_value(data->pdata->gpio_sda);
437 static inline int getscl(struct tc300k_data *data)
439 return gpio_get_value(data->pdata->gpio_scl);
442 static void send_9bit(struct tc300k_data *data, u8 buff)
450 for (i = 0; i < 8; i++) {
452 setsda(data, (buff >> i) & 0x01);
459 static u8 wait_9bit(struct tc300k_data *data)
469 for (i = 0; i < 8; i++) {
473 send_buf |= (buf & 0x01) << i;
480 static void tc300k_reset_for_isp(struct tc300k_data *data, bool start)
483 tc300k_led_power(data,0);
484 gpio_direction_input(data->pdata->gpio_int);
485 gpio_direction_output(data->pdata->gpio_scl, 0);
486 gpio_direction_output(data->pdata->gpio_sda, 0);
487 gpio_direction_output(data->pdata->gpio_int, 0);
488 tc300k_power(data,0);
490 tc300k_power(data,1);
491 usleep_range(5000, 6000);
493 tc300k_led_power(data,0);
494 tc300k_power(data,0);
496 gpio_direction_output(data->pdata->gpio_scl, 1);
497 gpio_direction_output(data->pdata->gpio_sda, 1);
498 gpio_direction_output(data->pdata->gpio_int, 1);
500 tc300k_power(data,1);
502 tc300k_led_power(data,1);
503 gpio_direction_input(data->pdata->gpio_sda);
504 gpio_direction_input(data->pdata->gpio_scl);
505 gpio_direction_input(data->pdata->gpio_int);
510 static void load(struct tc300k_data *data, u8 buff)
512 send_9bit(data, TC300K_LDDATA);
514 send_9bit(data, buff);
518 static void step(struct tc300k_data *data, u8 buff)
520 send_9bit(data, TC300K_CCFG);
522 send_9bit(data, buff);
526 static void setpc(struct tc300k_data *data, u16 addr)
533 buf[2] = addr & 0xff;
536 for (i = 0; i < 4; i++)
540 static void configure_isp(struct tc300k_data *data)
545 buf[0] = 0x75; buf[1] = 0xFC; buf[2] = 0xAC;
546 buf[3] = 0x75; buf[4] = 0xFC; buf[5] = 0x35;
550 for (i = 0; i < 7; i++)
554 static int tc300k_erase_fw(struct tc300k_data *data)
556 struct i2c_client *client = data->client;
560 dev_info(&client->dev, "%s\n", __func__);
562 tc300k_reset_for_isp(data, true);
566 /* isp_enable_condition */
567 send_9bit(data, TC300K_CSYNC1);
569 send_9bit(data, TC300K_CSYNC2);
571 send_9bit(data, TC300K_CSYNC3);
572 usleep_range(150, 160);
574 state = wait_9bit(data);
576 dev_err(&client->dev, "%s isp enable error %d\n",
583 /* Full Chip Erase */
584 send_9bit(data, TC300K_PCRST);
586 send_9bit(data, TC300K_PECHIP);
587 usleep_range(15000, 15500);
590 for (i = 0; i < 100; i++) {
592 send_9bit(data, TC300K_CSYNC1);
594 send_9bit(data, TC300K_CSYNC2);
596 send_9bit(data, TC300K_CSYNC3);
597 usleep_range(150, 160);
599 state = wait_9bit(data);
600 if ((state & 0x04) == 0x00)
605 dev_err(&client->dev, "%s fail\n", __func__);
608 dev_info(&client->dev, "%s success\n", __func__);
613 static int tc300k_write_fw(struct tc300k_data *data)
615 struct input_dev *input_dev = data->input_dev;
619 dev_info(&input_dev->dev, "%s\n", __func__);
622 load(data, TC300K_PWDATA);
623 send_9bit(data, TC300K_LDMODE);
626 while (addr < data->fw_img->fw_len) {
627 code_data = data->fw_img->data[addr++];
628 load(data, code_data);
629 usleep_range(20, 21);
632 send_9bit(data, TC300K_PEDISC);
639 static int tc300k_verify_fw(struct tc300k_data *data)
641 struct i2c_client *client = data->client;
645 dev_info(&client->dev, "%s\n", __func__);
649 while (addr < data->fw_img->fw_len) {
650 send_9bit(data, TC300K_PRDATA);
652 code_data = wait_9bit(data);
655 if (code_data != data->fw_img->data[addr++]) {
656 dev_err(&client->dev,
657 "%s addr : %#x data error (0x%2x)\n",
658 __func__, addr - 1, code_data );
666 static int tc300k_crc_check(struct tc300k_data *data)
668 struct i2c_client *client = data->client;
671 u8 checksum_h, checksum_l, cmd;
673 dev_info(&client->dev, "%s\n", __func__);
675 cmd = TC300K_CMD_CAL_CHECKSUM;
676 ret = i2c_smbus_write_byte_data(client, TC300K_CMD_ADDR, cmd);
678 dev_err(&client->dev, "%s command fail (%d)\n", __func__, ret);
682 msleep(TC300K_CHECKSUM_DELAY);
684 ret = i2c_smbus_read_byte_data(client, TC300K_CHECKS_H);
686 dev_err(&client->dev, "%s: failed to read checksum_h (%d)\n",
692 ret = i2c_smbus_read_byte_data(client, TC300K_CHECKS_L);
694 dev_err(&client->dev, "%s: failed to read checksum_l (%d)\n",
700 checksum = (checksum_h << 8) | checksum_l;
702 if (data->fw_img->checksum != checksum) {
703 dev_err(&client->dev,
704 "%s checksum fail - firm checksum(%d),"
705 " compute checksum(%d)\n", __func__,
706 data->fw_img->checksum, checksum);
710 dev_info(&client->dev, "%s success (0x%04x)\n", __func__, checksum);
715 static int tc300k_fw_update(struct tc300k_data *data)
717 struct i2c_client *client = data->client;
718 int verify_retries= TC300K_RETRY_CNT;
719 int retries = TC300K_RETRY_CNT;
722 dev_info(&client->dev, "%s\n", __func__);
723 disable_irq(client->irq);
726 ret = tc300k_erase_fw(data);
729 dev_err(&client->dev, "%s: retry erasing fw (%d)\n",
733 dev_err(&client->dev, "%s: failed erasing fw\n",
735 goto end_tc300k_flash_fw;
739 dev_info(&client->dev, "succeed in erasing fw\n");
740 retries = TC300K_RETRY_CNT;
744 ret = tc300k_write_fw(data);
747 dev_err(&client->dev, "%s: retry writing fw (%d)\n",
751 dev_err(&client->dev, "%s: failed writing fw\n",
753 goto end_tc300k_flash_fw;
757 dev_info(&client->dev, "succeed in writing fw\n");
760 ret = tc300k_verify_fw(data);
762 if (verify_retries-- > 0) {
763 dev_err(&client->dev, "%s: retry verifing fw (%d)\n",
764 __func__, verify_retries);
765 retries = TC300K_RETRY_CNT;
768 dev_err(&client->dev, "%s: failed verifing fw\n",
770 goto end_tc300k_flash_fw;
774 dev_info(&client->dev, "succeed in verifing fw\n");
776 tc300k_reset_for_isp(data, false);
778 dev_info(&client->dev, "%s: fw_ver(%#x)\n",
779 __func__, tc300k_get_fw_ver(data));
781 ret = tc300k_crc_check(data);
783 dev_err(&client->dev, "%s: crc check fail (%d)\n",
785 goto end_tc300k_flash_fw;
788 data->fdata->fw_flash_status = PASS;
792 enable_irq(client->irq);
793 data->enabled = true;
797 static int load_fw_built_in(struct tc300k_data *data)
799 struct i2c_client *client = data->client;
803 fw_name = kasprintf(GFP_KERNEL, "%s/%s.fw",
804 TC300K_FW_BUILTIN_PATH, data->pdata->fw_name);
806 // dev_info(&client->dev, "built in fw file name: [%s]\n",fw_name);
807 ret = request_firmware(&data->fw, fw_name, &client->dev);
809 dev_err(&client->dev,
810 "%s: error requesting built-in firmware (%d)\n"
815 data->fw_img = (struct fw_image *)data->fw->data;
817 dev_info(&client->dev, "%s: BIN fw version=[0x%02x] size=[%d byte]\n",
818 __func__, data->fw_img->first_fw_ver,
819 data->fw_img->fw_len);
826 static int load_fw_in_sdcard(struct tc300k_data *data)
828 struct i2c_client *client = data->client;
829 struct tc300k_platform_data *pdata = data->pdata;
835 char *fw_name = kasprintf(GFP_KERNEL, "%s%s.in.fw",
836 TC300K_FW_IN_SDCARD_PATH, pdata->fw_name);
841 fp = filp_open(fw_name, O_RDONLY, S_IRUSR);
843 dev_err(&client->dev, "%s: fail to open fw in %s\n",
848 len = fp->f_path.dentry->d_inode->i_size;
850 data->fw_img = kzalloc(len, GFP_KERNEL);
852 dev_err(&client->dev, "%s: fail to alloc mem for fw\n",
857 nread = vfs_read(fp, (char __user *)data->fw_img, len, &fp->f_pos);
859 dev_info(&client->dev, "%s: load fw in internal sd (%ld)\n",
865 filp_close(fp, NULL);
872 static int tc300k_load_fw(struct tc300k_data *data, u8 fw_path)
874 struct i2c_client *client = data->client;
879 ret = load_fw_built_in(data);
883 ret = load_fw_in_sdcard(data);
887 dev_err(&client->dev, "%s: invalid fw path [%d]\n",
893 dev_err(&client->dev, "%s: fail to load fw in [%d][%d]\n",
894 __func__, fw_path, ret);
901 static int tc300k_unload_fw(struct tc300k_data *data, u8 fw_path)
903 struct i2c_client *client = data->client;
907 release_firmware(data->fw);
915 dev_err(&client->dev, "%s: invalid fw path (%d)\n",
923 static int tc300k_flash_fw(struct tc300k_data *data, u8 fw_path, bool force)
925 struct i2c_client *client = data->client;
926 int ret, fw_ver, module_ver;
928 dev_info(&client->dev, "%s\n", __func__);
930 ret = tc300k_load_fw(data, fw_path);
932 dev_err(&client->dev, "fail to load fw (%d)\n", ret);
936 data->cur_fw_path = fw_path;
937 fw_ver = tc300k_get_fw_ver(data);
938 module_ver = tc300k_get_module_ver(data);
940 dev_info(&client->dev, "%s: IC fw version=[0x%02x], module_ver=[0x%02x]\n",
941 __func__, fw_ver,module_ver);
943 if (!data->pdata->firmup) {
944 dev_err(&client->dev, "%s: pass firmup, h/w rev not support\n", __func__);
945 ret = HAVE_LATEST_FW;
949 if (fw_ver == TC300K_INVALID_VER) {
951 dev_info(&client->dev,
952 "%s: Enable force_update by invalid version.\n",
956 if ((fw_ver >= data->fw_img->first_fw_ver) && !force) {
957 ret = HAVE_LATEST_FW;
958 data->fdata->fw_update_skip = true;
959 dev_info(&client->dev,
960 "%s: IC aleady have latest firmware.\n", __func__);
964 dev_info(&client->dev, "%s: fw update to %#x (from %#x) (%s)\n",
965 __func__, data->fw_img->first_fw_ver,
966 fw_ver, force ? "force":"version mismatch");
968 data->fdata->fw_update_skip = false;
970 ret = tc300k_fw_update(data);
974 ret = HAVE_LATEST_FW;
977 tc300k_unload_fw(data, fw_path);
982 static int tc300k_load_firmware(struct tc300k_data *data)
984 struct i2c_client *client = data->client;
987 ret = tc300k_flash_fw(data, FW_BUILT_IN, false);
989 dev_info(&client->dev, "success to flash fw (%d)\n", ret);
991 dev_err(&client->dev, "fail to flash fw (%d)\n", ret);
996 static ssize_t tc300k_fw_ver_ic_show(struct device *dev,
997 struct device_attribute *attr, char *buf)
999 struct tc300k_data *data = dev_get_drvdata(dev);
1000 struct i2c_client *client = data->client;
1004 if (data->enabled) {
1005 data->fdata->fw_update_skip = 0;
1006 ver = tc300k_get_fw_ver(data);
1009 ver = data->ic_fw_ver;
1011 dev_err(&client->dev, "%s: fail to read fw ver (%d)\n.",
1013 ret = sprintf(buf, "%s\n", "error");
1017 dev_info(&client->dev, "%s: 0x%02x\n", __func__, (u8)ver);
1018 ret = sprintf(buf, "0x%02x\n", (u8)ver);
1023 static ssize_t tc300k_fw_ver_src_show(struct device *dev,
1024 struct device_attribute *attr, char *buf)
1026 struct tc300k_data *data = dev_get_drvdata(dev);
1027 struct i2c_client *client = data->client;
1031 if (data->enabled) {
1032 ret = tc300k_load_fw(data, FW_BUILT_IN);
1034 dev_err(&client->dev,
1035 "%s: fail to load fw (%d)\n.",
1042 ver = data->fw_img->first_fw_ver;
1044 if (data->enabled) {
1045 ret = tc300k_unload_fw(data, FW_BUILT_IN);
1047 dev_err(&client->dev,
1048 "%s: fail to unload fw (%d)\n.",
1056 ret = sprintf(buf, "0x%02x\n", ver);
1057 dev_info(&client->dev, "%s: 0x%02x\n", __func__, ver);
1061 static ssize_t tc300k_fw_update_store(struct device *dev,
1062 struct device_attribute *devattr,
1063 const char *buf, size_t count)
1065 struct tc300k_data *data = dev_get_drvdata(dev);
1066 struct i2c_client *client = data->client;
1070 if (!data->enabled) {
1071 dev_err(&client->dev,
1072 "%s: device is disabled (fw_update_skip =% d)\n.",
1073 __func__, data->fdata->fw_update_skip);
1080 fw_path = FW_BUILT_IN;
1084 fw_path = FW_IN_SDCARD;
1087 dev_err(&client->dev, "%s: invalid parameter %c\n.", __func__,
1092 data->fdata->fw_flash_status = DOWNLOADING;
1093 data->enabled = false;
1095 ret = tc300k_flash_fw(data, fw_path, true);
1096 data->enabled = true;
1098 data->fdata->fw_flash_status = FAIL;
1099 dev_err(&client->dev,
1100 "%s: fail to flash fw (%d)\n.", __func__,
1105 data->fdata->fw_flash_status = PASS;
1110 static ssize_t tc300k_fw_update_status_show(struct device *dev,
1111 struct device_attribute *attr,
1114 struct tc300k_data *data = dev_get_drvdata(dev);
1115 struct i2c_client *client = data->client;
1118 switch (data->fdata->fw_flash_status) {
1120 ret = sprintf(buf, "%s\n", TO_STRING(DOWNLOADING));
1123 ret = sprintf(buf, "%s\n", TO_STRING(FAIL));
1126 ret = sprintf(buf, "%s\n", TO_STRING(PASS));
1129 dev_err(&client->dev, "%s: invalid status\n", __func__);
1134 dev_info(&client->dev, "%s: %#x\n", __func__,
1135 data->fdata->fw_flash_status);
1136 data->fdata->fw_update_skip = 0;
1142 static int tc300k_factory_mode_enable(struct i2c_client *client, u8 cmd)
1146 ret = i2c_smbus_write_byte_data(client, TC300K_CMD_ADDR, cmd);
1147 msleep(TC300K_CMD_DELAY);
1152 static ssize_t tc300k_factory_mode(struct device *dev,
1153 struct device_attribute *attr, const char *buf, size_t count)
1155 struct tc300k_data *data = dev_get_drvdata(dev);
1156 struct i2c_client *client = data->client;
1161 ret = sscanf(buf, "%d", &scan_buffer);
1163 dev_err(&client->dev, "%s: cmd read err\n", __func__);
1167 if (!(scan_buffer == 0 || scan_buffer == 1)) {
1168 dev_err(&client->dev, "%s: wrong command(%d)\n",
1169 __func__, scan_buffer);
1173 if (data->factory_mode == (bool)scan_buffer) {
1174 dev_info(&client->dev, "%s same command(%d)\n",
1175 __func__, scan_buffer);
1179 if (scan_buffer == 1) {
1180 dev_notice(&client->dev, "factory mode\n");
1181 cmd = TC300K_CMD_FAC_ON;
1183 dev_notice(&client->dev, "normale mode\n");
1184 cmd = TC300K_CMD_FAC_OFF;
1187 if ((!data->enabled)) {
1188 dev_err(&client->dev, "can't excute %s\n", __func__);
1189 data->factory_mode = (bool)scan_buffer;
1193 ret = tc300k_factory_mode_enable(client, cmd);
1195 dev_err(&client->dev, "%s fail(%d)\n", __func__, ret);
1197 data->factory_mode = (bool)scan_buffer;
1202 static ssize_t tc300k_factory_mode_show(struct device *dev,
1203 struct device_attribute *attr, char *buf)
1205 struct tc300k_data *data = dev_get_drvdata(dev);
1207 return sprintf(buf, "%d\n", data->factory_mode);
1210 static ssize_t recent_key_show(struct device *dev,
1211 struct device_attribute *attr,
1214 struct tc300k_data *data = dev_get_drvdata(dev);
1215 struct i2c_client *client = data->client;
1220 if (!data->enabled) {
1221 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1225 ret = i2c_smbus_read_i2c_block_data(client, TC300K_1KEY_DATA, 8, buff);
1227 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1231 value = (buff[TC300K_CH_PCK_H_OFFSET] << 8) |
1232 buff[TC300K_CH_PCK_L_OFFSET];
1234 return sprintf(buf, "%d\n", value);
1237 static ssize_t back_key_show(struct device *dev,
1238 struct device_attribute *attr, char *buf)
1240 struct tc300k_data *data = dev_get_drvdata(dev);
1241 struct i2c_client *client = data->client;
1246 if (!data->enabled) {
1247 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1251 ret = i2c_smbus_read_i2c_block_data(client, TC300K_2KEY_DATA, 8, buff);
1253 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1257 value = (buff[TC300K_CH_PCK_H_OFFSET] << 8) |
1258 buff[TC300K_CH_PCK_L_OFFSET];
1260 return sprintf(buf, "%d\n", value);
1263 static ssize_t tc300k_recent_inner_show(struct device *dev,
1264 struct device_attribute *attr,
1267 struct tc300k_data *data = dev_get_drvdata(dev);
1268 struct i2c_client *client = data->client;
1272 if (!data->enabled) {
1273 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1277 ret = i2c_smbus_read_i2c_block_data(client, TC300K_1KEY_DATA, 8, buff);
1279 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1283 value = (buff[TC300K_CH_PCK_H_OFFSET] << 8) |
1284 buff[TC300K_CH_PCK_L_OFFSET];
1286 return sprintf(buf, "%d\n", value);
1289 static ssize_t tc300k_recent_outer_show(struct device *dev,
1290 struct device_attribute *attr,
1293 struct tc300k_data *data = dev_get_drvdata(dev);
1294 struct i2c_client *client = data->client;
1299 if (!data->enabled) {
1300 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1304 ret = i2c_smbus_read_i2c_block_data(client, TC300K_3KEY_DATA, 8, buff);
1306 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1310 value = (buff[TC300K_CH_PCK_H_OFFSET] << 8) |
1311 buff[TC300K_CH_PCK_L_OFFSET];
1313 return sprintf(buf, "%d\n", value);
1316 static ssize_t tc300k_back_inner_show(struct device *dev,
1317 struct device_attribute *attr, char *buf)
1319 struct tc300k_data *data = dev_get_drvdata(dev);
1320 struct i2c_client *client = data->client;
1325 if (!data->enabled) {
1326 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1330 ret = i2c_smbus_read_i2c_block_data(client, TC300K_2KEY_DATA, 8, buff);
1332 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1336 value = (buff[TC300K_CH_PCK_H_OFFSET] << 8) |
1337 buff[TC300K_CH_PCK_L_OFFSET];
1339 return sprintf(buf, "%d\n", value);
1342 static ssize_t tc300k_back_outer_show(struct device *dev,
1343 struct device_attribute *attr, char *buf)
1345 struct tc300k_data *data = dev_get_drvdata(dev);
1346 struct i2c_client *client = data->client;
1351 if (!data->enabled) {
1352 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1356 ret = i2c_smbus_read_i2c_block_data(client, TC300K_4KEY_DATA, 8, buff);
1358 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1362 value = (buff[TC300K_CH_PCK_H_OFFSET] << 8) |
1363 buff[TC300K_CH_PCK_L_OFFSET];
1365 return sprintf(buf, "%d\n", value);
1369 static ssize_t recent_key_raw(struct device *dev,
1370 struct device_attribute *attr, char *buf)
1372 struct tc300k_data *data = dev_get_drvdata(dev);
1373 struct i2c_client *client = data->client;
1378 if (!data->enabled) {
1379 dev_err(&client->dev, "can't excute %s\n", __func__);
1383 ret = i2c_smbus_read_i2c_block_data(client, TC300K_1KEY_DATA, 8, buff);
1385 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1389 value = (buff[TC300K_RAW_H_OFFSET] << 8) |
1390 buff[TC300K_RAW_L_OFFSET];
1392 return sprintf(buf, "%d\n", value);
1395 static ssize_t back_key_raw(struct device *dev,
1396 struct device_attribute *attr, char *buf)
1398 struct tc300k_data *data = dev_get_drvdata(dev);
1399 struct i2c_client *client = data->client;
1404 if ((!data->enabled)) {
1405 dev_err(&client->dev, "can't excute %s\n", __func__);
1409 ret = i2c_smbus_read_i2c_block_data(client, TC300K_2KEY_DATA, 8, buff);
1411 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1415 value = (buff[TC300K_RAW_H_OFFSET] << 8) |
1416 buff[TC300K_RAW_L_OFFSET];
1418 return sprintf(buf, "%d\n", value);
1421 static ssize_t tc300k_recent_raw_inner_show(struct device *dev,
1422 struct device_attribute *attr, char *buf)
1424 struct tc300k_data *data = dev_get_drvdata(dev);
1425 struct i2c_client *client = data->client;
1430 if (!data->enabled) {
1431 dev_err(&client->dev, "can't excute %s\n", __func__);
1435 ret = i2c_smbus_read_i2c_block_data(client, TC300K_1KEY_DATA, 8, buff);
1437 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1441 value = (buff[TC300K_RAW_H_OFFSET] << 8) |
1442 buff[TC300K_RAW_L_OFFSET];
1444 return sprintf(buf, "%d\n", value);
1447 static ssize_t tc300k_recent_raw_outer_show(struct device *dev,
1448 struct device_attribute *attr, char *buf)
1450 struct tc300k_data *data = dev_get_drvdata(dev);
1451 struct i2c_client *client = data->client;
1455 if (!data->enabled) {
1456 dev_err(&client->dev, "can't excute %s\n", __func__);
1460 ret = i2c_smbus_read_i2c_block_data(client, TC300K_3KEY_DATA, 8, buff);
1462 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1466 value = (buff[TC300K_RAW_H_OFFSET] << 8) |
1467 buff[TC300K_RAW_L_OFFSET];
1469 return sprintf(buf, "%d\n", value);
1472 static ssize_t tc300k_back_raw_inner_show(struct device *dev,
1473 struct device_attribute *attr, char *buf)
1475 struct tc300k_data *data = dev_get_drvdata(dev);
1476 struct i2c_client *client = data->client;
1480 if ((!data->enabled)) {
1481 dev_err(&client->dev, "can't excute %s\n", __func__);
1485 ret = i2c_smbus_read_i2c_block_data(client, TC300K_2KEY_DATA, 8, buff);
1487 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1491 value = (buff[TC300K_RAW_H_OFFSET] << 8) |
1492 buff[TC300K_RAW_L_OFFSET];
1494 return sprintf(buf, "%d\n", value);
1497 static ssize_t tc300k_back_raw_outer_show(struct device *dev,
1498 struct device_attribute *attr, char *buf)
1500 struct tc300k_data *data = dev_get_drvdata(dev);
1501 struct i2c_client *client = data->client;
1506 if ((!data->enabled)) {
1507 dev_err(&client->dev, "can't excute %s\n", __func__);
1511 ret = i2c_smbus_read_i2c_block_data(client, TC300K_4KEY_DATA, 8, buff);
1513 dev_err(&client->dev, "%s read fail(%d)\n", __func__, ret);
1517 value = (buff[TC300K_RAW_H_OFFSET] << 8) |
1518 buff[TC300K_RAW_L_OFFSET];
1520 return sprintf(buf, "%d\n", value);
1523 static ssize_t tc300k_threshold_show(struct device *dev,
1524 struct device_attribute *attr, char *buf)
1526 struct tc300k_data *data = dev_get_drvdata(dev);
1527 struct i2c_client *client = data->client;
1530 int thr_recent, thr_back;
1532 if (!data->enabled) {
1533 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1537 ret = i2c_smbus_read_i2c_block_data(client, TC300K_1KEY_DATA, 8, buff);
1539 dev_err(&client->dev, "%s: thr_recent read fail(%d)\n", __func__, ret);
1543 thr_recent = (buff[TC300K_THRES_H_OFFSET] << 8) |
1544 buff[TC300K_THRES_L_OFFSET];
1546 ret = i2c_smbus_read_i2c_block_data(client, TC300K_2KEY_DATA, 8, buff);
1548 dev_err(&client->dev, "%s: thr_back read fail(%d)\n", __func__, ret);
1552 thr_back = (buff[TC300K_THRES_H_OFFSET] << 8) |
1553 buff[TC300K_THRES_L_OFFSET];
1555 dev_info(&client->dev, "%s: %d, %d\n", __func__, thr_recent, thr_back);
1557 return sprintf(buf, "%d, %d\n", thr_recent, thr_back);
1560 static ssize_t tc300k_recent_threshold_inner_show(struct device *dev,
1561 struct device_attribute *attr, char *buf)
1563 struct tc300k_data *data = dev_get_drvdata(dev);
1564 struct i2c_client *client = data->client;
1567 int thr_recent_inner;
1569 if (!data->enabled) {
1570 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1574 ret = i2c_smbus_read_i2c_block_data(client, TC300K_1KEY_DATA, 8, buff);
1576 dev_err(&client->dev, "%s: thr_recent inner read fail(%d)\n", __func__, ret);
1580 thr_recent_inner = (buff[TC300K_THRES_H_OFFSET] << 8) |
1581 buff[TC300K_THRES_L_OFFSET];
1583 dev_info(&client->dev, "%s: %d\n", __func__, thr_recent_inner);
1585 return sprintf(buf, "%d\n", thr_recent_inner);
1588 static ssize_t tc300k_recent_threshold_outer_show(struct device *dev,
1589 struct device_attribute *attr, char *buf)
1591 struct tc300k_data *data = dev_get_drvdata(dev);
1592 struct i2c_client *client = data->client;
1595 int thr_recent_outer;
1597 if (!data->enabled) {
1598 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1602 ret = i2c_smbus_read_i2c_block_data(client, TC300K_3KEY_DATA, 8, buff);
1604 dev_err(&client->dev, "%s: thr_recent outer read fail(%d)\n", __func__, ret);
1608 thr_recent_outer = (buff[TC300K_THRES_H_OFFSET] << 8) |
1609 buff[TC300K_THRES_L_OFFSET];
1611 dev_info(&client->dev, "%s: %d\n", __func__, thr_recent_outer);
1613 return sprintf(buf, "%d\n", thr_recent_outer);
1616 static ssize_t tc300k_back_threshold_inner_show(struct device *dev,
1617 struct device_attribute *attr, char *buf)
1619 struct tc300k_data *data = dev_get_drvdata(dev);
1620 struct i2c_client *client = data->client;
1625 if (!data->enabled) {
1626 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1630 ret = i2c_smbus_read_i2c_block_data(client, TC300K_2KEY_DATA, 8, buff);
1632 dev_err(&client->dev, "%s: thr_back inner read fail(%d)\n", __func__, ret);
1636 thr_back_inner = (buff[TC300K_THRES_H_OFFSET] << 8) |
1637 buff[TC300K_THRES_L_OFFSET];
1639 dev_info(&client->dev, "%s: %d\n", __func__, thr_back_inner);
1641 return sprintf(buf, "%d\n", thr_back_inner);
1644 static ssize_t tc300k_back_threshold_outer_show(struct device *dev,
1645 struct device_attribute *attr, char *buf)
1647 struct tc300k_data *data = dev_get_drvdata(dev);
1648 struct i2c_client *client = data->client;
1653 if (!data->enabled) {
1654 dev_err(&client->dev, "%s: device is disabled\n.", __func__);
1658 ret = i2c_smbus_read_i2c_block_data(client, TC300K_4KEY_DATA, 8, buff);
1660 dev_err(&client->dev, "%s: thr_back read fail(%d)\n", __func__, ret);
1664 thr_back_outer = (buff[TC300K_THRES_H_OFFSET] << 8) |
1665 buff[TC300K_THRES_L_OFFSET];
1667 dev_info(&client->dev, "%s: %d\n", __func__, thr_back_outer);
1669 return sprintf(buf, "%d\n", thr_back_outer);
1672 static int tc300k_glove_mode_enable(struct i2c_client *client, u8 cmd)
1676 ret = i2c_smbus_write_byte_data(client, TC300K_CMD_ADDR, cmd);
1677 msleep(TC300K_CMD_DELAY);
1682 static ssize_t tc300k_glove_mode(struct device *dev,
1683 struct device_attribute *attr, const char *buf, size_t count)
1685 struct tc300k_data *data = dev_get_drvdata(dev);
1686 struct i2c_client *client = data->client;
1691 ret = sscanf(buf, "%d", &scan_buffer);
1693 dev_err(&client->dev, "%s: cmd read err\n", __func__);
1697 if (!(scan_buffer == 0 || scan_buffer == 1)) {
1698 dev_err(&client->dev, "%s: wrong command(%d)\n",
1699 __func__, scan_buffer);
1703 if (data->glove_mode == (bool)scan_buffer) {
1704 dev_info(&client->dev, "%s same command(%d)\n",
1705 __func__, scan_buffer);
1709 if (scan_buffer == 1) {
1710 dev_notice(&client->dev, "factory mode\n");
1711 cmd = TC300K_CMD_GLOVE_ON;
1713 dev_notice(&client->dev, "normale mode\n");
1714 cmd = TC300K_CMD_GLOVE_OFF;
1717 if (!data->enabled) {
1718 dev_err(&client->dev, "can't excute %s\n", __func__);
1719 data->glove_mode = (bool)scan_buffer;
1723 ret = tc300k_glove_mode_enable(client, cmd);
1725 dev_err(&client->dev, "%s fail(%d)\n", __func__, ret);
1727 data->glove_mode = (bool)scan_buffer;
1732 static ssize_t tc300k_glove_mode_show(struct device *dev,
1733 struct device_attribute *attr, char *buf)
1735 struct tc300k_data *data = dev_get_drvdata(dev);
1737 return sprintf(buf, "%d\n", data->glove_mode);
1740 static ssize_t tc300k_modecheck_show(struct device *dev,
1741 struct device_attribute *attr, char *buf)
1743 struct tc300k_data *data = dev_get_drvdata(dev);
1744 struct i2c_client *client = data->client;
1746 u8 mode, glove, factory;
1748 if (!data->enabled) {
1749 dev_err(&client->dev, "can't excute %s\n", __func__);
1753 ret = i2c_smbus_read_byte_data(client, TC300K_MODE);
1755 dev_err(&client->dev, "%s: failed to read threshold_h (%d)\n",
1761 glove = ((mode & 0xf0) >> 4);
1762 factory = mode & 0x0f;
1764 return sprintf(buf, "glove:%d, factory:%d\n", glove, factory);
1767 static DEVICE_ATTR(touchkey_threshold, S_IRUGO, tc300k_threshold_show, NULL);
1768 static DEVICE_ATTR(touchkey_firm_version_panel, S_IRUGO | S_IWUSR | S_IWGRP,
1769 tc300k_fw_ver_ic_show, NULL);
1770 static DEVICE_ATTR(touchkey_firm_version_phone, S_IRUGO | S_IWUSR | S_IWGRP,
1771 tc300k_fw_ver_src_show, NULL);
1772 static DEVICE_ATTR(touchkey_firm_update, S_IRUGO | S_IWUSR | S_IWGRP,
1773 NULL, tc300k_fw_update_store);
1774 static DEVICE_ATTR(touchkey_firm_update_status, S_IRUGO,
1775 tc300k_fw_update_status_show, NULL);
1776 static DEVICE_ATTR(touchkey_recent, S_IRUGO, recent_key_show, NULL);
1777 static DEVICE_ATTR(touchkey_back, S_IRUGO, back_key_show, NULL);
1778 static DEVICE_ATTR(touchkey_raw_recent, S_IRUGO, recent_key_raw, NULL);
1779 static DEVICE_ATTR(touchkey_raw_back, S_IRUGO, back_key_raw, NULL);
1780 static DEVICE_ATTR(glove_mode, S_IRUGO | S_IWUSR | S_IWGRP,
1781 tc300k_glove_mode_show, tc300k_glove_mode);
1782 static DEVICE_ATTR(touchkey_factory_mode, S_IRUGO | S_IWUSR | S_IWGRP,
1783 tc300k_factory_mode_show, tc300k_factory_mode);
1784 static DEVICE_ATTR(modecheck, S_IRUGO, tc300k_modecheck_show, NULL);
1785 static DEVICE_ATTR(touchkey_recent_threshold_inner, S_IRUGO, tc300k_recent_threshold_inner_show, NULL);
1786 static DEVICE_ATTR(touchkey_recent_threshold_outer, S_IRUGO, tc300k_recent_threshold_outer_show, NULL);
1787 static DEVICE_ATTR(touchkey_back_threshold_inner, S_IRUGO, tc300k_back_threshold_inner_show, NULL);
1788 static DEVICE_ATTR(touchkey_back_threshold_outer, S_IRUGO, tc300k_back_threshold_outer_show, NULL);
1789 static DEVICE_ATTR(touchkey_recent_raw_inner, S_IRUGO, tc300k_recent_raw_inner_show, NULL);
1790 static DEVICE_ATTR(touchkey_recent_raw_outer, S_IRUGO, tc300k_recent_raw_outer_show, NULL);
1791 static DEVICE_ATTR(touchkey_back_raw_inner, S_IRUGO, tc300k_back_raw_inner_show, NULL);
1792 static DEVICE_ATTR(touchkey_back_raw_outer, S_IRUGO, tc300k_back_raw_outer_show, NULL);
1793 static DEVICE_ATTR(touchkey_recent_inner, S_IRUGO, tc300k_recent_inner_show, NULL);
1794 static DEVICE_ATTR(touchkey_recent_outer, S_IRUGO, tc300k_recent_outer_show, NULL);
1795 static DEVICE_ATTR(touchkey_back_inner, S_IRUGO, tc300k_back_inner_show, NULL);
1796 static DEVICE_ATTR(touchkey_back_outer, S_IRUGO, tc300k_back_outer_show, NULL);
1798 static struct attribute *touchkey_attributes[] = {
1799 &dev_attr_touchkey_threshold.attr,
1800 &dev_attr_touchkey_firm_version_panel.attr,
1801 &dev_attr_touchkey_firm_version_phone.attr,
1802 &dev_attr_touchkey_firm_update.attr,
1803 &dev_attr_touchkey_firm_update_status.attr,
1804 &dev_attr_touchkey_recent.attr,
1805 &dev_attr_touchkey_back.attr,
1806 &dev_attr_touchkey_raw_recent.attr,
1807 &dev_attr_touchkey_raw_back.attr,
1808 &dev_attr_touchkey_factory_mode.attr,
1809 &dev_attr_glove_mode.attr,
1810 &dev_attr_modecheck.attr,
1811 &dev_attr_touchkey_recent_threshold_inner.attr,
1812 &dev_attr_touchkey_recent_threshold_outer.attr,
1813 &dev_attr_touchkey_back_threshold_inner.attr,
1814 &dev_attr_touchkey_back_threshold_outer.attr,
1815 &dev_attr_touchkey_recent_raw_inner.attr,
1816 &dev_attr_touchkey_recent_raw_outer.attr,
1817 &dev_attr_touchkey_back_raw_inner.attr,
1818 &dev_attr_touchkey_back_raw_outer.attr,
1819 &dev_attr_touchkey_recent_inner.attr,
1820 &dev_attr_touchkey_recent_outer.attr,
1821 &dev_attr_touchkey_back_inner.attr,
1822 &dev_attr_touchkey_back_outer.attr,
1826 static struct attribute_group touchkey_attr_group = {
1827 .attrs = touchkey_attributes,
1831 static void tc300k_input_close(struct input_dev *dev)
1833 struct tc300k_data *data = input_get_drvdata(dev);
1834 struct i2c_client *client = data->client;
1837 mutex_lock(&data->lock);
1839 if (unlikely(wake_lock_active(&data->fw_wake_lock))) {
1840 dev_info(&data->client->dev,
1841 "%s, now fw updating. suspend "
1842 "control is ignored.\n", __func__);
1846 if (!data->enabled) {
1847 dev_info(&client->dev,
1848 "%s, already disabled.\n", __func__);
1852 disable_irq(client->irq);
1853 data->enabled = false;
1855 /* report not released key */
1856 for (i = 0; i < data->num_key; i++)
1857 input_report_key(data->input_dev, data->keycodes[i], 0);
1859 input_sync(data->input_dev);
1861 tc300k_led_power(data,false);
1862 tc300k_power(data,0);
1863 data->led_on = false;
1865 mutex_unlock(&data->lock);
1866 dev_info(&client->dev, "%s\n", __func__);
1871 static int tc300k_input_open(struct input_dev *dev)
1873 struct tc300k_data *data = input_get_drvdata(dev);
1874 struct i2c_client *client = data->client;
1878 mutex_lock(&data->lock);
1880 if (unlikely(wake_lock_active(&data->fw_wake_lock))) {
1881 dev_info(&client->dev, "%s, now fw updating. resume "
1882 "control is ignored.\n", __func__);
1886 if (data->enabled) {
1887 dev_info(&client->dev, "%s, already enabled.\n", __func__);
1891 if (data->pinctrl) {
1892 ret = tkey_pinctrl_configure(data, false);
1894 dev_err(&client->dev, "%s: cannot set pinctrl state\n", __func__);
1897 tc300k_led_power(data,true);
1898 tc300k_power(data,1);
1900 if (data->pinctrl) {
1901 ret = tkey_pinctrl_configure(data, true);
1903 pr_err("%s: cannot set pinctrl state\n", __func__);
1907 enable_irq(client->irq);
1908 data->enabled = true;
1909 if (data->led_on == true) {
1910 data->led_on = false;
1911 dev_notice(&client->dev, "led on(resume)\n");
1912 cmd = TC300K_CMD_LED_ON;
1913 ret = i2c_smbus_write_byte_data(client, TC300K_CMD_ADDR, cmd);
1915 dev_err(&client->dev, "%s led on fail(%d)\n", __func__, ret);
1917 msleep(TC300K_CMD_DELAY);
1920 if (data->glove_mode) {
1921 ret = tc300k_glove_mode_enable(client, TC300K_CMD_GLOVE_ON);
1923 dev_err(&client->dev, "%s glovemode fail(%d)\n", __func__, ret);
1926 if (data->factory_mode) {
1927 ret = tc300k_factory_mode_enable(client, TC300K_CMD_FAC_ON);
1929 dev_err(&client->dev, "%s factorymode fail(%d)\n", __func__, ret);
1932 mutex_unlock(&data->lock);
1933 data->release_cnt = 0;
1934 dev_info(&client->dev, "%s\n", __func__);
1939 static irqreturn_t tc300k_interrupt(int irq, void *dev_id)
1941 struct tc300k_data *data = dev_id;
1942 struct i2c_client *client = data->client;
1946 if (!data->enabled) {
1947 dev_err(&client->dev, "%s: device is not enabled.\n", __func__);
1951 key_val = i2c_smbus_read_byte_data(client, TC300K_KEYCODE);
1953 dev_err(&client->dev, "failed to read key data (%d)\n", key_val);
1957 dev_dbg(&client->dev, "%s: key_value=[0x%x]\n", __func__, key_val);
1959 for (i = 0 ; i < data->num_key*2; i++) {
1960 if ((key_val & data->tsk_ev_val[i].tsk_bitmap)) {
1961 input_report_key(data->input_dev,
1962 data->tsk_ev_val[i].tsk_keycode,
1963 data->tsk_ev_val[i].tsk_status);
1965 if (!data->tsk_ev_val[i].tsk_status)
1966 data->release_cnt++;
1968 dev_info(&client->dev, "%s:[%s] %s\n", __func__,
1969 data->tsk_ev_val[i].tsk_status? "P" : "R",
1970 data->tsk_ev_val[i].tsk_keyname);
1973 input_sync(data->input_dev);
1979 static int tc300k_init_interface(struct tc300k_data *data)
1981 struct i2c_client *client = data->client;
1984 data->fdata->dummy_dev = device_create(sec_class, NULL,
1985 MKDEV(SEC_DEV_TOUCHKEY_MAJOR, SEC_DEV_TOUCHKEY_MINOR),
1986 data, TC300K_DEVICE);
1987 if (IS_ERR(data->fdata->dummy_dev)) {
1988 dev_err(&client->dev, "Failed to create fac tsp temp dev\n");
1990 data->fdata->dummy_dev = NULL;
1991 goto err_create_sec_class_dev;
1994 ret = sysfs_create_group(&data->fdata->dummy_dev->kobj,
1995 &touchkey_attr_group);
1997 dev_err(&client->dev, "%s: failed to create fac_attr_group "
1998 "(%d)\n", __func__, ret);
1999 ret = (ret > 0) ? -ret : ret;
2000 goto err_create_fac_attr_group;
2005 sysfs_remove_group(&data->fdata->dummy_dev->kobj,
2006 &touchkey_attr_group);
2007 err_create_fac_attr_group:
2008 device_destroy(sec_class, data->fdata->dummy_dev->devt);
2009 err_create_sec_class_dev:
2013 #ifdef CONFIG_SLEEP_MONITOR
2014 #define PRETTY_MAX 14
2015 #define STATE_BIT 24
2016 #define CNT_MASK 0xffff
2017 #define STATE_MASK 0xff
2019 static int tc300k_get_sleep_monitor_cb(void* priv, unsigned int *raw_val, int check_level, int caller_type);
2021 static struct sleep_monitor_ops tc300k_sleep_monitor_ops = {
2022 .read_cb_func = tc300k_get_sleep_monitor_cb,
2025 static int tc300k_get_sleep_monitor_cb(void* priv, unsigned int *raw_val, int check_level, int caller_type)
2027 struct tc300k_data *data = priv;
2028 struct i2c_client *client = data->client;
2029 int state = DEVICE_UNKNOWN;
2033 if (check_level == SLEEP_MONITOR_CHECK_SOFT) {
2035 state = DEVICE_ON_ACTIVE1;
2037 state = DEVICE_POWER_OFF;
2038 } else if (check_level == SLEEP_MONITOR_CHECK_HARD) {
2040 state = DEVICE_ON_ACTIVE1;
2042 state = DEVICE_POWER_OFF;
2045 *raw_val = ((state & STATE_MASK) << STATE_BIT) |\
2046 (data->release_cnt & CNT_MASK);
2048 if (data->release_cnt > PRETTY_MAX)
2049 pretty = PRETTY_MAX;
2051 pretty = data->release_cnt;
2053 dev_dbg(&client->dev, "%s: raw_val[0x%08x], check_level[%d], release_cnt[%d], state[%d], pretty[%d]\n",
2054 __func__, *raw_val, check_level, data->release_cnt, state, pretty);
2061 static int tc300k_parse_dt_keycodes(struct device *dev, char *name,
2062 struct tc300k_platform_data *pdata)
2064 struct property *prop;
2065 struct device_node *np = dev->of_node;
2068 prop = of_find_property(np, name, NULL);
2074 pdata->num_key = prop->length / sizeof(u32);
2076 rc = of_property_read_u32_array(np, name, pdata->keycodes, pdata->num_key);
2077 if (rc && (rc != -EINVAL)) {
2078 dev_err(dev, "%s: Unable to read %s\n", __func__, name);
2082 for (i = 0; i < pdata->num_key; i++)
2083 dev_info(dev, "%s: keycode[%d] = [%d]\n",
2084 __func__, i, pdata->keycodes[i]);
2090 static int tc300k_parse_dt(struct device *dev,
2091 struct tc300k_platform_data *pdata)
2093 struct device_node *np = dev->of_node;
2096 // pdata->num_key =ARRAY_SIZE(tc300k_keycodes);
2097 // pdata->keycodes = tc300k_keycodes;
2099 rc = tc300k_parse_dt_keycodes(dev, "coreriver,keycodes", pdata);
2101 dev_err(dev, "%s: Unable to read keycodes rc = %d\n", __func__, rc);
2105 pdata->gpio_en = of_get_named_gpio_flags(np, "coreriver,vcc_en-gpio", 0, &pdata->vcc_gpio_flags);
2106 pdata->gpio_scl = of_get_named_gpio_flags(np, "coreriver,scl-gpio", 0, &pdata->scl_gpio_flags);
2107 pdata->gpio_sda = of_get_named_gpio_flags(np, "coreriver,sda-gpio", 0, &pdata->sda_gpio_flags);
2108 pdata->gpio_int = of_get_named_gpio_flags(np, "coreriver,irq-gpio", 0, &pdata->irq_gpio_flags);
2109 pdata->firmup = of_property_read_bool(np, "coreriver,firm-up");
2110 pdata->gpio_2p8_en = of_get_named_gpio_flags(np, "coreriver,vcc_en-gpio2p8", 0, &pdata->vcc_gpio2p8_flags);
2112 rc = of_property_read_string(np, "coreriver,fw-name", &pdata->fw_name);
2114 dev_err(dev, "%s: Unable to read fw-name. rc = %d\n", __func__, rc);
2117 rc = of_property_read_string(np, "coreriver,vcc_en_ldo_name", &pdata->vcc_en_ldo_name);
2119 dev_err(dev, "%s: Unable to read vcc_en_ldo_name. rc = %d\n", __func__, rc);
2122 rc = of_property_read_string(np, "coreriver,vdd_led_ldo_name", &pdata->vdd_led_ldo_name);
2124 dev_err(dev, "%s: Unable to read vdd_led_ldo_name. rc = %d\n", __func__, rc);
2127 // dev_info(dev, "%s: fw-name: [%s]\n", __func__, pdata->fw_name);
2128 dev_info(dev, "%s: gpio_en = [%d], tkey_scl= [%d], tkey_sda= [%d], tkey_int= [%d], firmup= [%d]\n",
2129 __func__, pdata->gpio_en, pdata->gpio_scl, pdata->gpio_sda, pdata->gpio_int, pdata->firmup);
2134 static int tc300k_parse_dt(struct device *dev,
2135 struct tc300k_platform_data *pdata)
2141 static int tc300k_probe(struct i2c_client *client,
2142 const struct i2c_device_id *id)
2144 struct tc300k_platform_data *pdata;
2145 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
2146 struct tc300k_data *data;
2147 struct input_dev *input_dev;
2150 dev_info(&client->dev, "%s\n", __func__);
2152 if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
2155 if (client->dev.of_node) {
2156 pdata = devm_kzalloc(&client->dev,
2157 sizeof(struct tc300k_platform_data),
2160 dev_err(&client->dev, "Failed to allocate memory\n");
2164 err = tc300k_parse_dt(&client->dev, pdata);
2166 dev_err(&client->dev, "Failed to parse dt data.\n");
2170 pdata = client->dev.platform_data;
2172 data = kzalloc(sizeof(struct tc300k_data), GFP_KERNEL);
2174 dev_err(&client->dev, "failed to alloc memory\n");
2176 goto err_data_alloc;
2179 data->fdata = kzalloc(sizeof(struct fdata_struct), GFP_KERNEL);
2181 dev_err(&client->dev, "failed to alloc memory for fdata\n");
2183 goto err_data_alloc_fdata;
2186 input_dev = input_allocate_device();
2188 dev_err(&client->dev, "failed to allocate input device\n");
2190 goto err_input_devalloc;
2193 data->client = client;
2194 data->pdata = pdata;
2195 data->input_dev = input_dev;
2196 data->num_key = pdata->num_key;
2197 data->keycodes = pdata->keycodes;
2198 data->suspend_type = pdata->suspend_type;
2199 data->scl = pdata->gpio_scl;
2200 data->sda = pdata->gpio_sda;
2202 tc300k_gpio_request(data);
2205 /* Get pinctrl if target uses pinctrl */
2206 data->pinctrl = devm_pinctrl_get(&client->dev);
2207 if (IS_ERR(data->pinctrl)) {
2208 if (PTR_ERR(data->pinctrl) == -EPROBE_DEFER)
2209 dev_err(&client->dev,
2210 "%s: pinctrl is EPROBE_DEFER\n", __func__);
2211 dev_err(&client->dev,
2212 "%s: Target does not use pinctrl\n", __func__);
2213 data->pinctrl = NULL;
2215 if (data->pinctrl) {
2216 ret = tkey_pinctrl_configure(data, false);
2218 dev_err(&client->dev,
2219 "%s: cannot set pinctrl state\n", __func__);
2222 tc300k_led_power(data,1);
2223 tc300k_power(data,1);
2226 if (data->pinctrl) {
2227 ret = tkey_pinctrl_configure(data, true);
2229 dev_err(&client->dev,
2230 "%s: cannot set pinctrl state\n", __func__);
2232 msleep(TC300K_POWERON_DELAY - 5);
2234 mutex_init(&data->lock);
2235 wake_lock_init(&data->fw_wake_lock, WAKE_LOCK_SUSPEND, "tc300k_fw_wake_lock");
2237 client->irq=gpio_to_irq(pdata->gpio_int);
2239 snprintf(data->phys, sizeof(data->phys), "%s/input0", dev_name(&client->dev));
2240 input_dev->name = TC300K_DEVICE;
2241 input_dev->phys = data->phys;
2242 input_dev->id.bustype = BUS_I2C;
2243 input_dev->dev.parent = &client->dev;
2244 input_dev->keycode = data->keycodes;
2245 input_dev->keycodesize = sizeof(data->keycodes[0]);
2246 input_dev->keycodemax = data->num_key;
2247 data->tsk_ev_val = tsk_ev;
2248 #ifdef CONFIG_PM_SLEEP
2249 input_dev->open = tc300k_input_open;
2250 input_dev->close = tc300k_input_close;
2253 set_bit(EV_SYN, input_dev->evbit);
2254 set_bit(EV_ABS, input_dev->evbit);
2255 set_bit(EV_LED, input_dev->evbit);
2256 set_bit(LED_MISC, input_dev->ledbit);
2257 for (i = 0; i < data->num_key; i++) {
2258 input_set_capability(input_dev, EV_KEY, data->keycodes[i]);
2259 set_bit(data->keycodes[i], input_dev->keybit);
2262 i2c_set_clientdata(client, data);
2263 input_set_drvdata(input_dev, data);
2264 ret = input_register_device(data->input_dev);
2266 dev_err(&client->dev, "fail to register input_dev (%d).\n",
2268 goto err_register_input_dev;
2271 ret = tc300k_init_interface(data);
2273 dev_err(&client->dev, "failed to init interface (%d)\n", ret);
2274 goto err_init_interface;
2277 /* Add symbolic link */
2278 ret = sysfs_create_link(&data->fdata->dummy_dev->kobj, &input_dev->dev.kobj, "input");
2280 dev_err(&client->dev,
2281 "%s: Failed to create input symbolic link\n",
2284 dev_set_drvdata(data->fdata->dummy_dev, data);
2285 dev_set_drvdata(&client->dev, data);
2288 ret = request_threaded_irq(client->irq, NULL, tc300k_interrupt,
2289 IRQF_TRIGGER_FALLING | IRQF_ONESHOT , TC300K_DEVICE, data);
2291 dev_err(&client->dev, "fail to request irq (%d).\n",
2293 goto err_request_irq;
2297 ret = tc300k_load_firmware(data);
2299 dev_err(&client->dev, "fail to load touchkey firmware. (%d).\n",
2301 goto err_initialize;
2304 #ifdef CONFIG_SLEEP_MONITOR
2305 sleep_monitor_register_ops(data, &tc300k_sleep_monitor_ops,
2306 SLEEP_MONITOR_TOUCHKEY);
2309 data->enabled = true;
2310 dev_info(&client->dev, "successfully probed.\n");
2315 free_irq(client->irq, data);
2317 sysfs_remove_group(&data->fdata->dummy_dev->kobj,
2318 &touchkey_attr_group);
2319 device_destroy(sec_class, data->fdata->dummy_dev->devt);
2321 input_unregister_device(input_dev);
2323 err_register_input_dev:
2324 wake_lock_destroy(&data->fw_wake_lock);
2326 input_free_device(input_dev);
2329 err_data_alloc_fdata:
2335 static int tc300k_remove(struct i2c_client *client)
2337 struct tc300k_data *data = i2c_get_clientdata(client);
2339 #ifdef CONFIG_SLEEP_MONITOR
2340 sleep_monitor_unregister_ops(SLEEP_MONITOR_TOUCHKEY);
2342 free_irq(client->irq, data);
2343 gpio_free(data->pdata->gpio_int);
2344 input_unregister_device(data->input_dev);
2345 input_free_device(data->input_dev);
2352 static const struct i2c_device_id tc300k_id[] = {
2353 { TC300K_DEVICE, 0 },
2358 static struct of_device_id coreriver_match_table[] = {
2359 { .compatible = "coreriver,coreriver-tkey",},
2363 #define coreriver_match_table NULL
2366 #ifndef CONFIG_HAS_EARLYSUSPEND
2367 static int tc300k_suspend(struct device *dev)
2369 struct tc300k_data *data = dev_get_drvdata(dev);
2370 struct input_dev *input_dev = data->input_dev;
2372 tc300k_input_close(input_dev);
2377 static int tc300k_resume(struct device *dev)
2379 struct tc300k_data *data = dev_get_drvdata(dev);
2380 struct input_dev *input_dev = data->input_dev;
2382 return tc300k_input_open(input_dev);
2386 MODULE_DEVICE_TABLE(i2c, tc300k_id);
2388 #ifndef CONFIG_HAS_EARLYSUSPEND
2389 const struct dev_pm_ops tc300k_pm_ops = {
2390 .suspend = tc300k_suspend,
2391 .resume = tc300k_resume,
2395 static struct i2c_driver tc300k_driver = {
2396 .probe = tc300k_probe,
2397 .remove = tc300k_remove,
2399 .name = TC300K_DEVICE,
2401 .of_match_table = coreriver_match_table,
2403 #ifndef CONFIG_HAS_EARLYSUSPEND
2404 .pm = &tc300k_pm_ops,
2407 .id_table = tc300k_id,
2410 static int __init tc300k_init(void)
2414 ret = i2c_add_driver(&tc300k_driver);
2416 printk(KERN_ERR "coreriver touch keypad"
2417 " registration failed. ret= %d\n",
2424 static void __exit tc300k_exit(void)
2426 i2c_del_driver(&tc300k_driver);
2429 module_init(tc300k_init);
2430 module_exit(tc300k_exit);
2432 MODULE_AUTHOR("Samsung Electronics");
2433 MODULE_DESCRIPTION("Touchkey driver for Coreriver TC300K");
2434 MODULE_LICENSE("GPL");