/* SPDX-License-Identifier: GPL-2.0 */ /* Himax Android Driver Sample Code for debug nodes * * Copyright (C) 2019 Himax Corporation. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef H_HIMAX_DEBUG #define H_HIMAX_DEBUG #include "himax_platform.h" #include "himax_common.h" #include "himax_debug_info.h" #define HX_RSLT_OUT_PATH "/data/" #define HX_RSLT_OUT_FILE "hx_dump_result.txt" #if defined(HX_EXCP_RECOVERY) extern u8 HX_EXCP_RESET_ACTIVATE; extern int hx_EB_event_flag; extern int hx_EC_event_flag; #if defined(HW_ED_EXCP_EVENT) extern int hx_EE_event_flag; #else extern int hx_ED_event_flag; #endif #endif #define HIMAX_PROC_PEN_POS_FILE "pen_pos" int himax_touch_proc_init(void); void himax_touch_proc_deinit(void); extern int himax_int_en_set(void); #define HIMAX_PROC_DIAG_FOLDER "diag" struct proc_dir_entry *himax_proc_diag_dir; #define HIMAX_PROC_STACK_FILE "stack" extern struct proc_dir_entry *himax_proc_stack_file; #define HIMAX_PROC_DELTA_FILE "delta_s" extern struct proc_dir_entry *himax_proc_delta_file; #define HIMAX_PROC_DC_FILE "dc_s" extern struct proc_dir_entry *himax_proc_dc_file; #define HIMAX_PROC_BASELINE_FILE "baseline_s" extern struct proc_dir_entry *himax_proc_baseline_file; #if defined(HX_TP_PROC_2T2R) extern uint32_t *diag_mutual_2; int32_t *getMutualBuffer_2(void); void setMutualBuffer_2(uint8_t x_num, uint8_t y_num); #endif extern int32_t *diag_mutual; extern int32_t *diag_mutual_new; extern int32_t *diag_mutual_old; extern uint8_t hx_state_info[2]; extern uint8_t diag_coor[128]; extern int32_t *diag_self; extern int32_t *diag_self_new; extern int32_t *diag_self_old; int32_t *getMutualBuffer(void); int32_t *getMutualNewBuffer(void); int32_t *getMutualOldBuffer(void); int32_t *getSelfBuffer(void); int32_t *getSelfNewBuffer(void); int32_t *getSelfOldBuffer(void); void setMutualBuffer(uint8_t x_num, uint8_t y_num); void setMutualNewBuffer(uint8_t x_num, uint8_t y_num); void setMutualOldBuffer(uint8_t x_num, uint8_t y_num); uint8_t process_type; uint8_t mode_flag; uint8_t overflow; #define HIMAX_PROC_DEBUG_FILE "debug" extern struct proc_dir_entry *himax_proc_debug_file; extern bool fw_update_complete; extern int handshaking_result; extern unsigned char debug_level_cmd; extern uint8_t cmd_set[8]; extern uint8_t mutual_set_flag; #define HIMAX_PROC_FLASH_DUMP_FILE "flash_dump" extern struct proc_dir_entry *himax_proc_flash_dump_file; extern uint8_t *flash_buffer; extern uint8_t g_flash_cmd; extern uint8_t g_flash_progress; extern bool g_flash_dump_rst; /*Fail = 0, Pass = 1*/ void setFlashBuffer(void); enum flash_dump_prog { START, ONGOING, FINISHED, }; extern uint32_t **raw_data_array; extern uint8_t X_NUM4; extern uint8_t Y_NUM; extern uint8_t sel_type; /* Moved from debug.c */ extern struct himax_debug *debug_data; extern unsigned char IC_CHECKSUM; extern int i2c_error_count; extern struct proc_dir_entry *himax_touch_proc_dir; #if defined(HX_TP_PROC_GUEST_INFO) extern struct hx_guest_info *g_guest_info_data; extern char *g_guest_info_item[]; #endif extern int himax_input_register(struct himax_ts_data *ts); #if defined(HX_TP_PROC_2T2R) extern bool Is_2T2R; #endif #if defined(HX_RST_PIN_FUNC) extern void himax_ic_reset(uint8_t loadconfig, uint8_t int_off); #endif extern uint8_t HX_PROC_SEND_FLAG; extern struct himax_target_report_data *g_target_report_data; extern struct himax_report_data *hx_touch_data; extern int g_ts_dbg; /* Moved from debug.c end */ #define BUF_SIZE 1024 #define CMD_START_IDX 1 char *cmd_crc_test_str[] = {"crc_test", NULL}; char *cmd_fw_debug_str[] = {"fw_debug", NULL}; char *cmd_attn_str[] = {"attn", NULL}; char *cmd_layout_str[] = {"layout", NULL}; char *cmd_excp_cnt_str[] = {"excp_cnt", NULL}; char *cmd_senseonoff_str[] = {"senseonoff", "SenseOnOff", NULL}; char *cmd_dbg_lvl_str[] = {"debug_level", "dbg_lvl", NULL}; char *cmd_guest_info_str[] = {"guest_info", NULL}; char *cmd_int_en_str[] = {"int_en", NULL}; char *cmd_irq_info_str[] = {"int", "irq_info", NULL}; char *cmd_register_str[] = {"register", NULL}; char *cmd_reset_str[] = {"reset", "rst", NULL}; char *cmd_diag_arr_str[] = {"diag_arr", NULL}; char *cmd_diag_str[] = {"diag", NULL}; char *cmd_irq_dbg_str[] = {"irq_dbg", NULL}; char *cmd_bus_str[] = {"bus", "i2c", "spi", NULL}; char *cmd_update_str[] = {"update", "t", NULL}; char *cmd_version_str[] = {"version", "v", "V", NULL}; char *cmd_dbg_info_str[] = {"d", "info", NULL}; char *cmd_list_str[] = {"list", "l", NULL}; char *cmd_help_str[] = {"help", "h", "?", "-?", NULL}; char **dbg_cmd_str[] = { NULL, cmd_crc_test_str, cmd_fw_debug_str, cmd_attn_str, cmd_layout_str, cmd_excp_cnt_str, cmd_senseonoff_str, cmd_dbg_lvl_str, cmd_guest_info_str, cmd_int_en_str, cmd_irq_info_str, cmd_register_str, cmd_reset_str, cmd_diag_arr_str, cmd_diag_str, cmd_irq_dbg_str, cmd_bus_str, cmd_update_str, cmd_version_str, cmd_dbg_info_str, cmd_list_str, cmd_help_str, NULL, }; enum cmd_fp { CMD_START, // 0 CMD_CRC_TEST, // 1 CND_FW_DBG, // 2 CMD_ATTN, // 3 CMD_LAYOUT, // 4 CMD_EXCEPT, // 5 CMD_SENSE_ON_OFF, // 6 CMD_DBG_LEVEL, // 7 CMD_GUEST_INFO, // 8 CMD_INTERRUPT, // 9 CND_IRQ_INFO, //10 CMD_REGISTER, //11 CMD_RESET, //12 CMD_DIAG_ARRANGE, //13 CMD_DIAG_CMD, //14 CMD_IRQ_DBG_CMD, //15 CMD_TEST_BUS, //16 CMD_FW_UPDATE, //17 CMD_VERSION, //18 CND_INFO, //19 CMD_LIST, //20 CMD_HELP, //21 CMD_NUM //22 }; int dbg_cmd_flag; char *dbg_cmd_par; int (*dbg_func_ptr_r[CMD_NUM])(struct seq_file *m); ssize_t (*dbg_func_ptr_w[CMD_NUM])(char *buf, size_t len); #define STR_TO_UL_ERR "String to ul is fail in cnt = %d, buf_tmp2 = %s\n" #define PRT_LOG "Finger %d=> X:%d, Y:%d W:%d, Z:%d, F:%d, Int_Delay_Cnt:%d\n" #define RAW_DOWN_STATUS "status: Raw:F:%02d Down, X:%d, Y:%d, W:%d\n" #define RAW_UP_STATUS "status: Raw:F:%02d Up, X:%d, Y:%d\n" #define PRT_OK_LOG "%s: change mode 0x%4X. str_pw = %2X, end_pw = %2X\n" #define PRT_FAIL_LOG "%s: change mode failed. str_pw = %2X, end_pw = %2X\n" #if defined(KERNEL_VER_ABOVE_5_10) #define __CREATE_OREAD_NODE_HX(name)\ static int himax_##name##_open(struct inode *inode, struct file *file)\ {return single_open(file, himax_##name##_show, NULL); } \ static const struct proc_ops himax_##name##_ops = {\ .proc_open = himax_##name##_open,\ .proc_read = seq_read,\ } #else #define __CREATE_OREAD_NODE_HX(name)\ static int himax_##name##_open(struct inode *inode, struct file *file)\ {return single_open(file, himax_##name##_show, NULL); } \ static const struct file_operations himax_##name##_ops = {\ .owner = THIS_MODULE,\ .open = himax_##name##_open,\ .read = seq_read,\ } #endif #if defined(KERNEL_VER_ABOVE_5_10) #define __CREATE_RW_NODE_HX(name)\ static int himax_##name##_open(struct inode *inode, struct file *file)\ {return single_open(file, himax_##name##_show, NULL); } \ static const struct proc_ops himax_##name##_ops = {\ .proc_open = himax_##name##_open,\ .proc_write = himax_##name##_store,\ .proc_read = seq_read,\ .proc_release = single_release,\ } #else #define __CREATE_RW_NODE_HX(name)\ static int himax_##name##_open(struct inode *inode, struct file *file)\ {return single_open(file, himax_##name##_show, NULL); } \ static const struct file_operations himax_##name##_ops = {\ .owner = THIS_MODULE,\ .open = himax_##name##_open,\ .write = himax_##name##_store,\ .read = seq_read,\ .llseek = seq_lseek,\ .release = single_release,\ } #endif #endif