mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 16:46:15 -04:00
himax_mmi: Add edge Inhibition sys entry
Add an sys entry to enable different edge inhibition function. echo 0,1,2,3 to edge_en. 0 turn_off 1 Vertical inhibition 2 Horizental clockwise inhibition 3 Horizental anticlockwise inhibition Change-Id: Id7023e8952ee7df46b5b77ad564be51dc9e74511 Signed-off-by: haojl2 <haojl2@motorola.com> Reviewed-on: https://gerrit.mot.com/1235525 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Wei Deng <dengwei1@motorola.com> Reviewed-by: Jianqi Yang <yangj@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
560dffb172
commit
d28d818543
4 changed files with 134 additions and 1 deletions
|
|
@ -171,6 +171,11 @@ uint8_t HX_PROC_SEND_FLAG;
|
|||
struct proc_dir_entry *himax_proc_GESTURE_file = NULL;
|
||||
uint8_t HX_SMWP_EN = 0;
|
||||
#endif
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
#define HIMAX_PROC_EDGE_LIMIT_FILE "edge_en"
|
||||
struct proc_dir_entry *himax_proc_edge_limit_file = NULL;
|
||||
#endif
|
||||
|
||||
#if defined(HX_SMART_WAKEUP) || defined(CONFIG_TOUCHSCREEN_HIMAX_INSPECT)
|
||||
bool FAKE_POWER_KEY_SEND = true;
|
||||
#endif
|
||||
|
|
@ -512,6 +517,68 @@ static struct file_operations himax_proc_Gesture_ops = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
static ssize_t himax_edge_limit_read(struct file *file, char *buf,
|
||||
size_t len, loff_t *pos)
|
||||
{
|
||||
size_t count = 0;
|
||||
struct himax_ts_data *ts = private_ts;
|
||||
char *temp_buf;
|
||||
|
||||
if (!HX_PROC_SEND_FLAG) {
|
||||
temp_buf = kzalloc(len, GFP_KERNEL);
|
||||
count = snprintf(temp_buf, PAGE_SIZE, "%d\n", ts->edge_limit_enable);
|
||||
|
||||
if (copy_to_user(buf, temp_buf, len))
|
||||
I("%s,here:%d\n", __func__, __LINE__);
|
||||
|
||||
kfree(temp_buf);
|
||||
HX_PROC_SEND_FLAG = 1;
|
||||
} else {
|
||||
HX_PROC_SEND_FLAG = 0;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t himax_edge_limit_write(struct file *file, const char *buff,
|
||||
size_t len, loff_t *pos)
|
||||
{
|
||||
struct himax_ts_data *ts = private_ts;
|
||||
char buf[80] = {0};
|
||||
|
||||
if (len >= 80) {
|
||||
I("%s: no command exceeds 80 chars.\n", __func__);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (copy_from_user(buf, buff, len)) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (buf[0] == '0')
|
||||
ts->edge_limit_enable = 0;
|
||||
else if (buf[0] == '1')
|
||||
ts->edge_limit_enable = 1;/*Portrait*/
|
||||
else if (buf[0] == '2')
|
||||
ts->edge_limit_enable = 2;/*Landscape-Right*/
|
||||
else if (buf[0] == '3')
|
||||
ts->edge_limit_enable = 3;/*Landscape-Left*/
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
g_core_fp.fp_set_edge_limit_enable(ts->edge_limit_enable, ts->suspended);
|
||||
I("%s: edge_limit_enable = %d.\n", __func__, ts->edge_limit_enable);
|
||||
return len;
|
||||
}
|
||||
|
||||
static struct file_operations himax_proc_edge_limit_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = himax_edge_limit_read,
|
||||
.write = himax_edge_limit_write,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TOUCHSCREEN_HIMAX_INSPECT
|
||||
extern void (*fp_himax_self_test_init)(void);
|
||||
#endif
|
||||
|
|
@ -569,7 +636,21 @@ int himax_common_proc_init(void)
|
|||
goto fail_5;
|
||||
}
|
||||
#endif
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
himax_proc_edge_limit_file = proc_create(HIMAX_PROC_EDGE_LIMIT_FILE, (S_IWUSR | S_IRUGO | S_IWUGO),
|
||||
himax_touch_proc_dir, &himax_proc_edge_limit_ops);
|
||||
|
||||
if (himax_proc_edge_limit_file == NULL) {
|
||||
E(" %s: proc edge limit file create failed!\n", __func__);
|
||||
goto fail_6;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
remove_proc_entry(HIMAX_PROC_EDGE_LIMIT_FILE, himax_touch_proc_dir);
|
||||
fail_6:
|
||||
#endif
|
||||
#ifdef HX_SMART_WAKEUP
|
||||
remove_proc_entry(HIMAX_PROC_GESTURE_FILE, himax_touch_proc_dir);
|
||||
fail_5:
|
||||
|
|
@ -591,6 +672,9 @@ void himax_common_proc_deinit(void)
|
|||
{
|
||||
remove_proc_entry(HIMAX_PROC_SELF_TEST_FILE, himax_touch_proc_dir);
|
||||
remove_proc_entry(HIMAX_PROC_SELF_TEST_RAW_FILE, himax_touch_proc_dir);
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
remove_proc_entry(HIMAX_PROC_EDGE_LIMIT_FILE, himax_touch_proc_dir);
|
||||
#endif
|
||||
#ifdef HX_SMART_WAKEUP
|
||||
remove_proc_entry(HIMAX_PROC_GESTURE_FILE, himax_touch_proc_dir);
|
||||
remove_proc_entry(HIMAX_PROC_SMWP_FILE, himax_touch_proc_dir);
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
#include <linux/of_gpio.h>
|
||||
#endif
|
||||
|
||||
#define HIMAX_DRIVER_VER "1.2.2.50_moto_05"
|
||||
#define HIMAX_DRIVER_VER "1.2.2.50_moto_06"
|
||||
|
||||
#define FLASH_DUMP_FILE "/sdcard/HX_Flash_Dump.bin"
|
||||
|
||||
|
|
@ -75,6 +75,7 @@
|
|||
/*#define HX_FIX_TOUCH_INFO*/ /* if open, you need to change the touch info in the fix_touch_info*/
|
||||
/*#define HX_ZERO_FLASH*/
|
||||
/*#define CONFIG_CHIP_DTCFG*/
|
||||
#define HX_EDGE_LIMIT
|
||||
/*#undef CONFIG_FB*/ /* Enable it if driver go into suspend/resume twice */
|
||||
|
||||
/*#define HX_EN_SEL_BUTTON*/ /* Support Self Virtual key ,default is close*/
|
||||
|
|
@ -359,6 +360,11 @@ struct himax_ts_data {
|
|||
struct wake_lock ts_SMWP_wake_lock;
|
||||
#endif
|
||||
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
uint8_t edge_limit_enable;
|
||||
uint8_t edge_limit_en[8];
|
||||
#endif
|
||||
|
||||
#ifdef HX_HIGH_SENSE
|
||||
uint8_t HSEN_enable;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@
|
|||
#define fw_addr_flag_reset_event 0x900000e4
|
||||
#define fw_addr_hsen_enable 0x10007F14
|
||||
#define fw_addr_smwp_enable 0x10007F10
|
||||
#define fw_addr_edge_limit_enable 0x10007F3C
|
||||
#define fw_usb_detect_addr 0x10007F38
|
||||
#define fw_addr_program_reload_from 0x00000000
|
||||
#define fw_addr_program_reload_to 0x08000000
|
||||
|
|
@ -166,6 +167,10 @@
|
|||
#define fw_func_handshaking_pwd 0xA55AA55A
|
||||
#define fw_func_handshaking_end 0x77887788
|
||||
|
||||
#define fw_func_edge_portrait_pwd 0xA55AA55A
|
||||
#define fw_func_edge_lsp_left_pwd 0xA11AA11A
|
||||
#define fw_func_edge_lsp_right_pwd 0xA33AA33A
|
||||
|
||||
#define on_fw_addr_smwp_enable 0xA2
|
||||
#define on_fw_usb_detect_addr 0xA4
|
||||
#define on_fw_addr_program_reload_from 0x00000000
|
||||
|
|
@ -342,6 +347,7 @@ struct fw_operation {
|
|||
uint8_t addr_flag_reset_event[4];
|
||||
uint8_t addr_hsen_enable[4];
|
||||
uint8_t addr_smwp_enable[4];
|
||||
uint8_t addr_edge_limit_enable[4];
|
||||
uint8_t addr_program_reload_from[4];
|
||||
uint8_t addr_program_reload_to[4];
|
||||
uint8_t addr_program_reload_page_write[4];
|
||||
|
|
@ -627,6 +633,7 @@ struct himax_core_fp {
|
|||
void (*fp_set_reload_cmd)(uint8_t *write_data, int idx, uint32_t cmd_from, uint32_t cmd_to, uint32_t cmd_beat);
|
||||
bool (*fp_program_reload)(void);
|
||||
void (*fp_set_SMWP_enable)(uint8_t SMWP_enable, bool suspended);
|
||||
void (*fp_set_edge_limit_enable)(uint8_t edge_limit_enable, bool suspended);
|
||||
void (*fp_set_HSEN_enable)(uint8_t HSEN_enable, bool suspended);
|
||||
void (*fp_diag_register_set)(uint8_t diag_command, uint8_t storage_type);
|
||||
#ifdef HX_TP_SELF_TEST_DRIVER
|
||||
|
|
|
|||
|
|
@ -580,6 +580,37 @@ static void himax_mcu_set_SMWP_enable(uint8_t SMWP_enable, bool suspended)
|
|||
} while ((tmp_data[3] != back_data[3] || tmp_data[2] != back_data[2] || tmp_data[1] != back_data[1] || tmp_data[0] != back_data[0]) && retry_cnt < HIMAX_REG_RETRY_TIMES);
|
||||
}
|
||||
|
||||
static void himax_mcu_set_edge_limit_enable(uint8_t edge_limit_enable, bool suspended)
|
||||
{
|
||||
uint8_t tmp_data[FOUR_BYTE_DATA_SZ];
|
||||
uint8_t back_data[FOUR_BYTE_DATA_SZ];
|
||||
uint8_t retry_cnt = 0;
|
||||
|
||||
do {
|
||||
if (edge_limit_enable == 0x01) {/*Portrait*/
|
||||
himax_in_parse_assign_cmd(fw_func_edge_portrait_pwd, tmp_data, 4);
|
||||
g_core_fp.fp_flash_write_burst(pfw_op->addr_edge_limit_enable, tmp_data);
|
||||
himax_in_parse_assign_cmd(fw_func_edge_portrait_pwd, back_data, 4);
|
||||
} else if (edge_limit_enable == 0x02) {/*Landscape-Right*/
|
||||
himax_in_parse_assign_cmd(fw_func_edge_lsp_right_pwd, tmp_data, 4);
|
||||
g_core_fp.fp_flash_write_burst(pfw_op->addr_edge_limit_enable, tmp_data);
|
||||
himax_in_parse_assign_cmd(fw_func_edge_lsp_right_pwd, back_data, 4);
|
||||
} else if (edge_limit_enable == 0x03) {/*Landscape-Left*/
|
||||
himax_in_parse_assign_cmd(fw_func_edge_lsp_left_pwd, tmp_data, 4);
|
||||
g_core_fp.fp_flash_write_burst(pfw_op->addr_edge_limit_enable, tmp_data);
|
||||
himax_in_parse_assign_cmd(fw_func_edge_lsp_left_pwd, back_data, 4);
|
||||
} else {
|
||||
himax_in_parse_assign_cmd(fw_data_safe_mode_release_pw_reset, tmp_data, 4);
|
||||
g_core_fp.fp_flash_write_burst(pfw_op->addr_edge_limit_enable, tmp_data);
|
||||
himax_in_parse_assign_cmd(fw_data_safe_mode_release_pw_reset, back_data, 4);
|
||||
}
|
||||
|
||||
g_core_fp.fp_register_read(pfw_op->addr_edge_limit_enable, FOUR_BYTE_DATA_SZ, tmp_data, 0);
|
||||
I("%s: tmp_data[0]=%d, SMWP_enable=%d, retry_cnt=%d \n", __func__, tmp_data[0], edge_limit_enable, retry_cnt);
|
||||
retry_cnt++;
|
||||
} while ((tmp_data[3] != back_data[3] || tmp_data[2] != back_data[2] || tmp_data[1] != back_data[1] || tmp_data[0] != back_data[0]) && retry_cnt < HIMAX_REG_RETRY_TIMES);
|
||||
}
|
||||
|
||||
static void himax_mcu_set_HSEN_enable(uint8_t HSEN_enable, bool suspended)
|
||||
{
|
||||
uint8_t tmp_data[FOUR_BYTE_DATA_SZ];
|
||||
|
|
@ -1735,6 +1766,9 @@ static void himax_mcu_resend_cmd_func (bool suspended)
|
|||
#ifdef HX_SMART_WAKEUP
|
||||
g_core_fp.fp_set_SMWP_enable(ts->SMWP_enable, suspended);
|
||||
#endif
|
||||
#ifdef HX_EDGE_LIMIT
|
||||
g_core_fp.fp_set_edge_limit_enable(ts->edge_limit_enable, suspended);
|
||||
#endif
|
||||
#ifdef HX_HIGH_SENSE
|
||||
g_core_fp.fp_set_HSEN_enable(ts->HSEN_enable, suspended);
|
||||
#endif
|
||||
|
|
@ -2466,6 +2500,7 @@ static void himax_mcu_fp_init(void)
|
|||
g_core_fp.fp_set_reload_cmd = himax_mcu_set_reload_cmd;
|
||||
g_core_fp.fp_program_reload = himax_mcu_program_reload;
|
||||
g_core_fp.fp_set_SMWP_enable = himax_mcu_set_SMWP_enable;
|
||||
g_core_fp.fp_set_edge_limit_enable = himax_mcu_set_edge_limit_enable;
|
||||
g_core_fp.fp_set_HSEN_enable = himax_mcu_set_HSEN_enable;
|
||||
g_core_fp.fp_usb_detect_set = himax_mcu_usb_detect_set;
|
||||
g_core_fp.fp_diag_register_set = himax_mcu_diag_register_set;
|
||||
|
|
@ -2645,6 +2680,7 @@ void himax_mcu_in_cmd_init(void)
|
|||
himax_in_parse_assign_cmd(fw_addr_flag_reset_event, pfw_op->addr_flag_reset_event, sizeof(pfw_op->addr_flag_reset_event));
|
||||
himax_in_parse_assign_cmd(fw_addr_hsen_enable, pfw_op->addr_hsen_enable, sizeof(pfw_op->addr_hsen_enable));
|
||||
himax_in_parse_assign_cmd(fw_addr_smwp_enable, pfw_op->addr_smwp_enable, sizeof(pfw_op->addr_smwp_enable));
|
||||
himax_in_parse_assign_cmd(fw_addr_edge_limit_enable, pfw_op->addr_edge_limit_enable, sizeof(pfw_op->addr_edge_limit_enable));
|
||||
himax_in_parse_assign_cmd(fw_addr_program_reload_from, pfw_op->addr_program_reload_from, sizeof(pfw_op->addr_program_reload_from));
|
||||
himax_in_parse_assign_cmd(fw_addr_program_reload_to, pfw_op->addr_program_reload_to, sizeof(pfw_op->addr_program_reload_to));
|
||||
himax_in_parse_assign_cmd(fw_addr_program_reload_page_write, pfw_op->addr_program_reload_page_write, sizeof(pfw_op->addr_program_reload_page_write));
|
||||
|
|
|
|||
Loading…
Reference in a new issue