kmini3g: input: abov_touchkey- Disable Samsung Dual Detect

Samsung has introduced this since Lollipop Release and due to this the Capacitive Keys had issues and stopped working repeatedly once screen is locked.
It only works again after reboot and fails after screen is locked.
Disabling this has fixed Capacitive Key Issue.

Change-Id: Ia7ff76620cdac863289f57ea37459bd5b94ea99e
Signed-off-by: Jackeagle <jackeagle102@gmail.com>
This commit is contained in:
Jackeagle 2016-02-22 12:09:28 -05:00 committed by Mahendra Chadha
parent ed0c9990d5
commit 32bca4f830
3 changed files with 40 additions and 1 deletions

View File

@ -1897,6 +1897,7 @@ CONFIG_INPUT_KEYRESET=y
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ABOV_TOUCH=y
# CONFIG_KEYBOARD_ABOV_DUAL_DETECT is not set
# CONFIG_KEYBOARD_ABOV_TOUCH_PATEK is not set
CONFIG_INPUT_ENABLED=y
# CONFIG_KEYBOARD_ADP5588 is not set

View File

@ -631,6 +631,13 @@ config KEYBOARD_W90P910
To compile this driver as a module, choose M here: the
module will be called w90p910_keypad.
config KEYBOARD_ABOV_DUAL_DETECT
bool "Abov FT16XX Touchkey Dual Detect Feature"
depends on KEYBOARD_ABOV_TOUCH
default n
help
Say Y here only for stock kernel and disable permanently
on custom rom.
endif
config SENSORS_HALL_DEBOUNCE

View File

@ -54,7 +54,10 @@
#define ABOV_RAWDATA 0x0E
#define ABOV_VENDORID 0x12
#define ABOV_GLOVE 0x13
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
#define ABOV_DUAL_DETECT 0x16
#endif
/* command */
#define CMD_LED_ON 0x10
@ -65,7 +68,11 @@
#define CMD_STOP_MODE 0x80
#define CMD_GLOVE_ON 0x20
#define CMD_GLOVE_OFF 0x10
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
#define CMD_DUAL_DETECT 0x10
#endif
#define CMD_SINGLE_DETECT 0x20
#define ABOV_BOOT_DELAY 45
@ -80,10 +87,16 @@ struct device *sec_touchkey;
#define FW_CHECKSUM_L 0xCE
#define TK_FW_PATH_BIN "abov/abov_tk.fw"
#define TK_FW_PATH_SDCARD "/sdcard/abov_fw.bin"
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
#define ABOV_DUAL_DETECTION_CMD_FW_VER 0x14
#else
#endif
#define FW_VERSION 0x06
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
#define ABOV_DUAL_DETECTION_CMD_FW_VER 0xFF
#endif
#define FW_CHECKSUM_H 0x94
#define FW_CHECKSUM_L 0x86
#define FW_CHECKSUM_H_REV4 0xE4
@ -153,8 +166,11 @@ static void abov_tk_late_resume(struct early_suspend *h);
#ifdef CONFIG_INPUT_ENABLED
static int abov_tk_input_open(struct input_dev *dev);
static void abov_tk_input_close(struct input_dev *dev);
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
static void abov_tk_dual_detection_mode(struct abov_tk_info *info, int mode);
#endif
#endif
static int abov_glove_mode_enable(struct i2c_client *client, u8 cmd)
{
@ -333,7 +349,9 @@ static void abov_tk_reset(struct abov_tk_info *info)
abov_tk_reset_for_bootmode(info);
msleep(ABOV_RESET_DELAY);
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
abov_tk_dual_detection_mode(info, 1);
#endif
if (info->glovemode)
abov_glove_mode_enable(client, CMD_GLOVE_ON);
@ -1100,7 +1118,9 @@ static ssize_t touchkey_fw_update(struct device *dev,
disable_irq(info->irq);
info->enabled = false;
ret = abov_flash_fw(info, false, cmd);
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
abov_tk_dual_detection_mode(info, 1);
#endif
if (info->glovemode)
abov_glove_mode_enable(client, CMD_GLOVE_ON);
info->enabled = true;
@ -1194,6 +1214,8 @@ static ssize_t abov_glove_mode_show(struct device *dev,
return sprintf(buf, "%d\n", info->glovemode);
}
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
static void abov_tk_dual_detection_mode(struct abov_tk_info *info, int mode)
{
u8 cmd;
@ -1240,6 +1262,7 @@ static ssize_t abov_set_dual_detection_mode(struct device *dev,
return count;
}
#endif
static DEVICE_ATTR(touchkey_threshold, S_IRUGO, touchkey_threshold_show, NULL);
static DEVICE_ATTR(brightness, S_IRUGO | S_IWUSR | S_IWGRP, NULL,
@ -1256,8 +1279,10 @@ static DEVICE_ATTR(touchkey_firm_update_status, S_IRUGO | S_IWUSR | S_IWGRP,
touchkey_fw_update_status, NULL);
static DEVICE_ATTR(glove_mode, S_IRUGO | S_IWUSR | S_IWGRP,
abov_glove_mode_show, abov_glove_mode);
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
static DEVICE_ATTR(detection_mode, S_IRUGO | S_IWUSR | S_IWGRP,
NULL, abov_set_dual_detection_mode);
#endif
static struct attribute *sec_touchkey_attributes[] = {
&dev_attr_touchkey_threshold.attr,
&dev_attr_brightness.attr,
@ -1270,7 +1295,9 @@ static struct attribute *sec_touchkey_attributes[] = {
&dev_attr_touchkey_firm_update.attr,
&dev_attr_touchkey_firm_update_status.attr,
&dev_attr_glove_mode.attr,
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
&dev_attr_detection_mode.attr,
#endif
NULL,
};
@ -1559,7 +1586,9 @@ static int __devinit abov_tk_probe(struct i2c_client *client,
"failed to firmware check (%d)\n", ret);
goto err_reg_input_dev;
}
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
abov_tk_dual_detection_mode(info, 1);
#endif
snprintf(info->phys, sizeof(info->phys),
"%s/input0", dev_name(&client->dev));
input_dev->name = "sec_touchkey";
@ -1742,7 +1771,9 @@ static int abov_tk_resume(struct device *dev)
/* touchkey on by i2c */
get_tk_fw_version(info, true);
#endif
#ifdef CONFIG_KEYBOARD_ABOV_DUAL_DETECT
abov_tk_dual_detection_mode(info, 1);
#endif
info->enabled = true;
#if defined(CONFIG_SEC_ATLANTIC_PROJECT)
dev_notice(&info->client->dev, "%s: led_flag=%d\n", __func__,