#ifndef _LINUX_FTS_TS_H_ #define _LINUX_FTS_TS_H_ #include #ifdef SEC_TSP_FACTORY_TEST #include #endif #include #include #include #define TSP_TYPE_BUILTIN_FW 0 #define TSP_TYPE_EXTERNAL_FW 1 #define TSP_TYPE_EXTERNAL_FW_SIGNED 2 #define TSP_TYPE_SPU_FW_SIGNED 3 #define TSP_PATH_EXTERNAL_FW "/sdcard/Firmware/TSP/tsp.bin" #define TSP_PATH_EXTERNAL_FW_SIGNED "/sdcard/Firmware/TSP/tsp_signed.bin" #define TSP_PATH_SPU_FW_SIGNED "/spu/TSP/ffu_tsp.bin" #if defined(CONFIG_FOLDER_HALL) && defined(CONFIG_TOUCHSCREEN_DUAL_FOLDABLE) #include #endif #ifdef CONFIG_TOUCHSCREEN_DUAL_FOLDABLE #define input_raw_info_d(mode, dev, fmt, ...) input_raw_info(MAIN_TOUCH, dev, fmt, ## __VA_ARGS__) #else #define input_raw_info_d(mode, dev, fmt, ...) input_raw_info(mode, dev, fmt, ## __VA_ARGS__) #endif #define input_raw_info(mode, dev, fmt, ...) dev_info(dev, fmt, ## __VA_ARGS__) #define input_dbg(mode, dev, fmt, ...) dev_dbg(dev, fmt, ## __VA_ARGS__) #define input_info(mode, dev, fmt, ...) dev_info(dev, fmt, ## __VA_ARGS__) #define input_err(mode, dev, fmt, ...) dev_err(dev, fmt, ## __VA_ARGS__) #ifdef CONFIG_INPUT_SEC_SECURE_TOUCH #include #endif #define USE_OPEN_CLOSE #define CONFIG_GLOVE_TOUCH #ifdef CONFIG_INPUT_TOUCHSCREEN_TCLMV2 #include #define TCLM_CONCEPT #endif #define USE_POR_AFTER_I2C_RETRY #define BRUSH_Z_DATA 63 /* for ArtCanvas */ #undef FTS_SUPPORT_TA_MODE #undef USE_OPEN_DWORK #ifdef USE_OPEN_DWORK #define TOUCH_OPEN_DWORK_TIME 10 #endif #define TOUCH_PRINT_INFO_DWORK_TIME 30000 /* 30s */ #define SECLOG "[sec_input]" #define FIRMWARE_IC "fts_ic" #define FTS_MAX_FW_PATH 64 #define FTS_TS_DRV_NAME "fts_touch" #define FTS_TS_DRV_VERSION "0100" #define FTS_TS_I2C_RETRY_CNT 3 /* * fts1b: ID0: 0x39 * fts9c: ID0: 0x50 * fts5c: ID0: 0x48 */ #define FTS_ID0 0x48 #define FTS_ID1 0x36 #define FTS_FIFO_MAX 31 #define FTS_EVENT_SIZE 16 #define FTS_VERSION_SIZE 9 #define PRESSURE_MIN 0 #define PRESSURE_MAX 127 #define FINGER_MAX 10 #define AREA_MIN PRESSURE_MIN #define AREA_MAX PRESSURE_MAX #define INT_ENABLE 1 #define INT_DISABLE 0 #define FTS_CMD_SPONGE_ACCESS 0x0000 /* COMMANDS */ #define FTS_CMD_SENSE_ON 0x10 #define FTS_CMD_SENSE_OFF 0x11 #define FTS_CMD_SW_RESET 0x12 #define FTS_CMD_FORCE_CALIBRATION 0x13 #define FTS_CMD_FACTORY_PANELCALIBRATION 0x14 #define FTS_READ_GPIO_STATUS 0x20 #define FTS_READ_FIRMWARE_INTEGRITY 0x21 #define FTS_READ_DEVICE_ID 0x22 #define FTS_READ_PANEL_INFO 0x23 #define FTS_READ_FW_VERSION 0x24 #define FTS_CMD_SET_GET_TOUCHTYPE 0x30 #define FTS_CMD_SET_GET_OPMODE 0x31 #define FTS_CMD_SET_GET_CHARGER_MODE 0x32 #define FTS_CMD_SET_GET_NOISE_MODE 0x33 #define FTS_CMD_SET_GET_REPORT_RATE 0x34 #define FTS_CMD_SET_GET_TOUCH_MODE_FOR_THRESHOLD 0x35 #define FTS_CMD_SET_GET_TOUCH_THRESHOLD 0x36 #define FTS_CMD_SET_GET_KEY_THRESHOLD 0x37 #define FTS_CMD_SET_GET_COVERTYPE 0x38 #define FTS_CMD_WRITE_WAKEUP_GESTURE 0x39 #define FTS_CMD_WRITE_COORDINATE_FILTER 0x3A #define FTS_CMD_SET_FOD_FINGER_MERGE 0x3B #define FTS_CMD_SET_EAR_DETECT 0x41 #define FTS_CMD_SET_PROX_POWER_OFF 0x42 #define FTS_CMD_SET_POCKET_MODE 0x42 #define FTS_READ_ONE_EVENT 0x60 #define FTS_READ_ALL_EVENT 0x61 #define FTS_CMD_CLEAR_ALL_EVENT 0x62 #define FTS_CMD_SENSITIVITY_MODE 0x70 #define FTS_READ_SENSITIVITY_VALUE 0x72 #define FTS_CMD_RUN_SRAM_TEST 0x78 #define FTS_CMD_SET_LPM_AOD_OFF_ON 0x9B #define FTS_CMD_LPM_ASYNC_SCAN 0x00 #define FTS_CMD_LPM_SYNC_SCAN 0x01 #define FTS_CMD_NPM_SYNC_SCAN 0x01 #define FTS_CMD_SET_FUNCTION_ONOFF 0xC1 /* FTS SPONGE COMMAND */ #define FTS_CMD_SPONGE_DUMP_FLUSH 0x01 #define FTS_CMD_SPONGE_READ_WRITE_CMD 0xAA #define FTS_CMD_SPONGE_NOTIFY_CMD 0xC0 #define FTS_CMD_SPONGE_OFFSET_MODE 0x00 #define FTS_CMD_SPONGE_OFFSET_AOD_RECT 0x02 #define FTS_CMD_SPONGE_OFFSET_UTC 0x10 #define FTS_CMD_SPONGE_PRESS_PROPERTY 0x14 #define FTS_CMD_SPONGE_FOD_INFO 0x15 #define FTS_CMD_SPONGE_FOD_POSITION 0x19 #define FTS_CMD_SPONGE_FOD_RECT 0x4B #define FTS_CMD_SPONGE_LP_DUMP 0xF0 #define FTS_CMD_SPONGE_LP_DUMP_CUR_IDX 0xF2 #define FTS_CMD_SPONGE_LP_DUMP_EVENT 0xF4 /* First byte of ONE EVENT */ #define FTS_EVENT_PASS_REPORT 0x03 #define FTS_EVENT_STATUS_REPORT 0x43 #define FTS_EVENT_JITTER_RESULT 0x49 #define FTS_EVENT_ERROR_REPORT 0xF3 /* Test Event */ #define FTS_EVENT_JITTER_MUTUAL_TEST 0x01 #define FTS_EVENT_JITTER_SELF_TEST 0x02 #define FTS_EVENT_JITTER_MUTUAL_MAX 0x01 #define FTS_EVENT_JITTER_MUTUAL_MIN 0x02 #define FTS_EVENT_JITTER_MUTUAL_AVG 0x03 #define FTS_EVENT_JITTER_SELF_TX_P2P 0x05 #define FTS_EVENT_JITTER_SELF_RX_P2P 0x06 #define FTS_EVENT_SRAM_TEST_RESULT 0xD0 /* Status Event */ #define FTS_COORDINATE_EVENT 0 #define FTS_STATUS_EVENT 1 #define FTS_GESTURE_EVENT 2 #define FTS_VENDOR_EVENT 3 #define FTS_GESTURE_CODE_SPAY 0x00 #define FTS_GESTURE_CODE_DOUBLE_TAP 0x01 #define FTS_COORDINATE_ACTION_NONE 0 #define FTS_COORDINATE_ACTION_PRESS 1 #define FTS_COORDINATE_ACTION_MOVE 2 #define FTS_COORDINATE_ACTION_RELEASE 3 #define FTS_EVENT_TOUCHTYPE_NORMAL 0 #define FTS_EVENT_TOUCHTYPE_HOVER 1 #define FTS_EVENT_TOUCHTYPE_FLIPCOVER 2 #define FTS_EVENT_TOUCHTYPE_GLOVE 3 #define FTS_EVENT_TOUCHTYPE_STYLUS 4 #define FTS_EVENT_TOUCHTYPE_PALM 5 #define FTS_EVENT_TOUCHTYPE_WET 6 #define FTS_EVENT_TOUCHTYPE_PROXIMITY 7 #define FTS_EVENT_TOUCHTYPE_JIG 8 /* Status - ERROR event */ #define FTS_EVENT_STATUSTYPE_CMDDRIVEN 0 #define FTS_EVENT_STATUSTYPE_ERROR 1 #define FTS_EVENT_STATUSTYPE_INFORMATION 2 #define FTS_EVENT_STATUSTYPE_USERINPUT 3 #define FTS_EVENT_STATUSTYPE_VENDORINFO 7 #define FTS_ERR_EVNET_CORE_ERR 0x00 #define FTS_ERR_EVENT_QUEUE_FULL 0x01 #define FTS_ERR_EVENT_ESD 0x02 /* Status - Information report */ #define FTS_INFO_READY_STATUS 0x00 #define FTS_INFO_WET_MODE 0x01 #define FTS_INFO_NOISE_MODE 0x02 #define FTS_INFO_XENOSENSOR_DETECT 0x04 // Scan mode for A0 command #define FTS_SCAN_MODE_SCAN_OFF 0 #define FTS_SCAN_MODE_MS_SS_SCAN (1 << 0) #define FTS_SCAN_MODE_KEY_SCAN (1 << 1) #define FTS_SCAN_MODE_HOVER_SCAN (1 << 2) #define FTS_SCAN_MODE_FORCE_TOUCH_SCAN (1 << 4) #define FTS_SCAN_MODE_DEFAULT FTS_SCAN_MODE_MS_SS_SCAN /* Control Command */ // For 0x30 command - touch type #define FTS_TOUCHTYPE_BIT_TOUCH (1 << 0) #define FTS_TOUCHTYPE_BIT_HOVER (1 << 1) #define FTS_TOUCHTYPE_BIT_COVER (1 << 2) #define FTS_TOUCHTYPE_BIT_GLOVE (1 << 3) #define FTS_TOUCHTYPE_BIT_STYLUS (1 << 4) #define FTS_TOUCHTYPE_BIT_PALM (1 << 5) #define FTS_TOUCHTYPE_BIT_WET (1 << 6) #define FTS_TOUCHTYPE_BIT_PROXIMITY (1 << 7) #define FTS_TOUCHTYPE_DEFAULT_ENABLE (FTS_TOUCHTYPE_BIT_TOUCH | FTS_TOUCHTYPE_BIT_PALM | FTS_TOUCHTYPE_BIT_WET) // For 0x31 command - touch operation mode #define FTS_OPMODE_NORMAL 0 #define FTS_OPMODE_LOWPOWER 1 // For 0x32 command - charger mode #define FTS_BIT_CHARGER_MODE_NORMAL 0 #define FTS_BIT_CHARGER_MODE_WIRE_CHARGER 1 #define FTS_BIT_CHARGER_MODE_WIRELESS_CHARGER 2 #define FTS_BIT_CHARGER_MODE_WIRELESS_BATTERY_PACK 3 // For 0xC1 command - on/off function #define FTS_FUNCTION_ENABLE_SIP_MODE 0x00 #define FTS_FUNCTION_SET_MONITOR_NOISE_MODE 0x01 #define FTS_FUNCTION_ENABLE_BRUSH_MODE 0x02 #define FTS_FUNCTION_ENABLE_DEAD_ZONE 0x04 /* *#0*# */ #define FTS_FUNCTION_ENABLE_SPONGE_LIB 0x05 #define FTS_FUNCTION_EDGE_AREA 0x07 /* used for grip cmd */ #define FTS_FUNCTION_DEAD_ZONE 0x08 /* used for grip cmd */ #define FTS_FUNCTION_LANDSCAPE_MODE 0x09 /* used for grip cmd */ #define FTS_FUNCTION_LANDSCAPE_TOP_BOTTOM 0x0A /* used for grip cmd */ #define FTS_FUNCTION_EDGE_HANDLER 0x0C /* used for grip cmd */ #define FTS_FUNCTION_ENABLE_VSYNC 0x0D #define FTS_FUNCTION_SET_TOUCHABLE_AREA 0x0F #define FTS_FUNCTION_SET_NOTE_MODE 0x10 #define FTS_FUNCTION_SET_GAME_MODE 0x11 /* FTS DEBUG FLAG */ #define FTS_DEBUG_PRINT_I2C_READ_CMD 0x04 #define FTS_DEBUG_PRINT_I2C_WRITE_CMD 0x08 #define FTS_DEBUG_SEND_UEVENT 0x80 #define FTS_RETRY_COUNT 10 #define FTS_DELAY_NVWRITE 50 /* gesture SF */ #define FTS_GESTURE_SAMSUNG_FEATURE 1 /* gesture type */ #define FTS_SPONGE_EVENT_SWIPE_UP 0 #define FTS_SPONGE_EVENT_DOUBLETAP 1 #define FTS_SPONGE_EVENT_PRESS 3 #define FTS_SPONGE_EVENT_SINGLETAP 4 #define FTS_SPONGE_EVENT_DUMPFLUSH 5 /* gesture ID */ #define FTS_SPONGE_EVENT_GESTURE_ID_AOD 0 #define FTS_SPONGE_EVENT_GESTURE_ID_DOUBLETAP_TO_WAKEUP 1 #define FTS_SPONGE_EVENT_GESTURE_ID_FOD_LONG 0 #define FTS_SPONGE_EVENT_GESTURE_ID_FOD_NORMAL 1 #define FTS_SPONGE_EVENT_GESTURE_ID_FOD_RELEASE 2 #define FTS_SPONGE_EVENT_GESTURE_ID_FOD_OUT 3 #define FTS_SPONGE_EVENT_GESTURE_ID_FOD_VI 4 /* SEC_TS_DUMP_ID */ #define FTS_SPONGE_DUMP_0 0x00 #define FTS_SPONGE_DUMP_1 0x01 #define FTS_ENABLE 1 #define FTS_DISABLE 0 #define FTS_SPONGE_LP_DUMP_LENGTH 70 #define FTS_SPONGE_LP_DUMP_DATA_FORMAT_10_LEN 12 /* addr 2, data 10, */ #define FTS_SPONGE_LP_DUMP_DATA_FORMAT_8_LEN 10 /* addr 2, data 8 */ /* sponge mode */ #define FTS_MODE_SPAY (1 << 1) #define FTS_MODE_AOD (1 << 2) #define FTS_MODE_SINGLETAP (1 << 3) #define FTS_MODE_PRESS (1 << 4) #define FTS_MODE_DOUBLETAP_WAKEUP (1 << 5) typedef enum { SPONGE_EVENT_TYPE_SPAY = 0x04, SPONGE_EVENT_TYPE_SINGLE_TAP = 0x08, SPONGE_EVENT_TYPE_AOD_PRESS = 0x09, SPONGE_EVENT_TYPE_AOD_LONGPRESS = 0x0A, SPONGE_EVENT_TYPE_AOD_DOUBLETAB = 0x0B, SPONGE_EVENT_TYPE_FOD = 0x0F, SPONGE_EVENT_TYPE_FOD_RELEASE = 0x10, SPONGE_EVENT_TYPE_FOD_OUT = 0x11, } SPONGE_EVENT_TYPE; /*SPONGE library parameters*/ #define FTS_MAX_SPONGE_DUMP_BUFFER 512 #define FTS_SPONGE_DUMP_EVENT_MASK 0x7F #define FTS_SPONGE_DUMP_INF_MASK 0x80 #define FTS_SPONGE_DUMP_INF_SHIFT 7 #define FTS_MAX_X_RESOLUTION 4096 #define FTS_MAX_Y_RESOLUTION 4096 #define FTS_MAX_NUM_FORCE 50 /* Number of TX CH */ #define FTS_MAX_NUM_SENSE 50 /* Number of RX CH */ #define FTS_LFD_CTRL_LOCK 1 #define FTS_LFD_CTRL_UNLOCK 2 #define FTS_TS_LOCATION_DETECT_SIZE 6 #define FTS_STATUS_UNFOLDING 0x00 #define FTS_STATUS_FOLDING 0x01 #ifdef FTS_SUPPORT_TA_MODE extern struct fts_callbacks *fts_charger_callbacks; struct fts_callbacks { void (*inform_charger)(struct fts_callbacks *, int); }; #endif enum external_noise_mode { EXT_NOISE_MODE_NONE = 0, EXT_NOISE_MODE_MONITOR = 1, /* for dex mode */ EXT_NOISE_MODE_MAX, /* add new mode above this line */ }; enum fts_error_return { FTS_NOT_ERROR = 0, FTS_I2C_ERROR, FTS_ERROR_INVALID_CHIP_ID, FTS_ERROR_INVALID_CHIP_VERSION_ID, FTS_ERROR_INVALID_SW_VERSION, FTS_ERROR_EVENT_ID, FTS_ERROR_FW_CORRUPTION, FTS_ERROR_TIMEOUT, FTS_ERROR_TIMEOUT_ZERO, FTS_ERROR_FW_UPDATE_FAIL, FTS_ERROR_BROKEN_OSC_TRIM, }; enum fts_fw_update_status { FTS_NOT_UPDATE = 10, FTS_NEED_FW_UPDATE, FTS_NEED_CALIBRATION_ONLY, FTS_NEED_FW_UPDATE_N_CALIBRATION, }; struct fts_sponge_information { u8 sponge_use; // 0 : don't use, 1 : use u16 sponge_ver; u16 sponge_model_number; u16 sponge_model_name_size; u8 sponge_model_name[32]; } __packed; enum grip_write_mode { G_NONE = 0, G_SET_EDGE_HANDLER = 1, G_SET_EDGE_ZONE = 2, G_SET_NORMAL_MODE = 4, G_SET_LANDSCAPE_MODE = 8, G_CLR_LANDSCAPE_MODE = 16, }; enum grip_set_data { ONLY_EDGE_HANDLER = 0, GRIP_ALL_DATA = 1, }; /** * struct fts_finger - Represents fingers. * @ state: finger status (Event ID). * @ mcount: moving counter for debug. */ struct fts_finger { u8 id; u8 prev_ttype; u8 ttype; u8 action; u16 x; u16 y; u16 p_x; u16 p_y; u8 z; u8 hover_flag; u8 glove_flag; u8 touch_height; u16 mcount; u8 major; u8 minor; bool palm; int palm_count; u8 left_event; u8 max_energy; u16 max_energy_x; u16 max_energy_y; u8 noise_level; u8 max_strength; u8 hover_id_num; }; enum switch_system_mode { TO_TOUCH_MODE = 0, TO_LOWPOWER_MODE = 1, }; enum tsp_power_mode { FTS_POWER_STATE_POWERDOWN = 0, FTS_POWER_STATE_LOWPOWER, FTS_POWER_STATE_ACTIVE, // FTS_POWER_STATE_SLEEP, }; enum tsp_status_call_pos { FTS_STATE_CHK_POS_OPEN = 0, FTS_STATE_CHK_POS_CLOSE, FTS_STATE_CHK_POS_HALL, FTS_STATE_CHK_POS_SYSFS, }; enum fts_cover_id { FTS_FLIP_WALLET = 0, FTS_VIEW_COVER, FTS_COVER_NOTHING1, FTS_VIEW_WIRELESS, FTS_COVER_NOTHING2, FTS_CHARGER_COVER, FTS_VIEW_WALLET, FTS_LED_COVER, FTS_CLEAR_FLIP_COVER, FTS_QWERTY_KEYBOARD_EUR, FTS_QWERTY_KEYBOARD_KOR, FTS_MINI_SVIEW_WALLET_COVER = 16, FTS_MONTBLANC_COVER = 100, }; enum fts_config_value_feature { FTS_CFG_NONE = 0, FTS_CFG_APWR = 1, FTS_CFG_AUTO_TUNE_PROTECTION = 2, }; enum { SPECIAL_EVENT_TYPE_SPAY = 0x04, SPECIAL_EVENT_TYPE_AOD = 0x08, SPECIAL_EVENT_TYPE_AOD_PRESS = 0x09, SPECIAL_EVENT_TYPE_AOD_LONGPRESS = 0x0A, SPECIAL_EVENT_TYPE_AOD_DOUBLETAB = 0x0B, }; enum fts_system_information_address { FTS_SI_CONFIG_CHECKSUM = 0x58, /* 4 bytes */ FTS_SI_OSC_TRIM_INFO = 0x60, /* 4 bytes */ }; enum fts_ito_test_mode { OPEN_TEST = 0, // trx_open_test 1,1 SHORT_TEST, // trx_open_test 1,2 MICRO_OPEN_TEST, // trx_open_test 2 MICRO_SHORT_TEST, // trx_open_test 3 OPEN_SHORT_CRACK_TEST, SAVE_MISCAL_REF_RAW, }; enum fts_ito_test_result { ITO_PASS = 0, ITO_FAIL, ITO_FAIL_OPEN, ITO_FAIL_SHORT, ITO_FAIL_MICRO_OPEN, ITO_FAIL_MICRO_SHORT, }; /* FTS_OFFSET_SIGNUTRE */ #define FTS_OFFSET_SIGNATURE 0x59525446 #define FTS_CM2_SIGNATURE 0x324D5446 #define FTS_CM3_SIGNATURE 0x334D5446 #define FTS_FAIL_HIST_SIGNATURE 0x53484646 enum fts_miscal_test_result { MISCAL_PASS = 0, MISCAL_FAIL, }; #define UEVENT_OPEN_SHORT_PASS 1 #define UEVENT_OPEN_SHORT_FAIL 2 /* ---------------------------------------- * write 0xE4 [ 11 | 10 | 01 | 00 ] * MSB <-------------------> LSB * read 0xE4 * mapping sequnce : LSB -> MSB * struct sec_ts_test_result { * * assy : front + OCTA assay * * module : only OCTA * union { * struct { * u8 assy_count:2; -> 00 * u8 assy_result:2; -> 01 * u8 module_count:2; -> 10 * u8 module_result:2; -> 11 * } __attribute__ ((packed)); * u8 data[1]; * }; *}; * ---------------------------------------- */ struct fts_ts_test_result { union { struct { u8 assy_count:2; u8 assy_result:2; u8 module_count:2; u8 module_result:2; } __packed; u8 data[1]; }; }; #define TEST_OCTA_MODULE 1 #define TEST_OCTA_ASSAY 2 #define TEST_OCTA_NONE 0 #define TEST_OCTA_FAIL 1 #define TEST_OCTA_PASS 2 #define SEC_OFFSET_SIGNATURE 0x59525446 enum offset_fac_position { OFFSET_FAC_NOSAVE = 0, // FW index 0 OFFSET_FAC_SUB = 1, // FW Index 2 OFFSET_FAC_MAIN = 2, // FW Index 3 OFFSET_FAC_SVC = 3, // FW Index 4 }; enum offset_fw_position { OFFSET_FW_NOSAVE = 0, OFFSET_FW_SDC = 1, OFFSET_FW_SUB = 2, OFFSET_FW_MAIN = 3, OFFSET_FW_SVC = 4, }; enum offset_fac_data_type { OFFSET_FAC_DATA_NO = 0, OFFSET_FAC_DATA_CM = 1, OFFSET_FAC_DATA_CM2 = 2, OFFSET_FAC_DATA_CM3 = 3, // OFFSET_FAC_DATA_SELF_FAIL = 7, }; #define FTS_ITO_RESULT_PRINT_SIZE 1024 struct fts_sec_panel_test_result { u8 flag; u8 num_of_test; u16 max_of_tx_gap; u16 max_of_rx_gap; u8 tx_of_txmax_gap; u8 rx_of_txmax_gap; u8 tx_of_rxmax_gap; u8 rx_of_rxmax_gap; } __packed; struct fts_sdc_panel_test_result { u16 max_of_tx_gap; u16 max_of_rx_gap; u8 tx_of_txmax_gap; u8 rx_of_txmax_gap; u8 tx_of_rxmax_gap; u8 rx_of_rxmax_gap; } __packed; /* 16 byte */ struct fts_event_coordinate { u8 eid:2; u8 tid:4; u8 tchsta:2; u8 x_11_4; u8 y_11_4; u8 y_3_0:4; u8 x_3_0:4; u8 major; u8 minor; u8 z:6; u8 ttype_3_2:2; u8 left_event:5; u8 max_energy:1; u8 ttype_1_0:2; u8 noise_level; u8 max_strength; u8 hover_id_num:4; u8 reserved_10:4; u8 reserved_11; u8 reserved_12; u8 reserved_13; u8 reserved_14; u8 reserved_15; } __packed; /* 16 byte */ struct fts_event_status { u8 eid:2; u8 stype:4; u8 sf:2; u8 status_id; u8 status_data_1; u8 status_data_2; u8 status_data_3; u8 status_data_4; u8 status_data_5; u8 left_event_4_0:5; u8 max_energy:1; u8 reserved:2; u8 reserved_8; u8 reserved_9; u8 reserved_10; u8 reserved_11; u8 reserved_12; u8 reserved_13; u8 reserved_14; u8 reserved_15; } __packed; /* 34 byte */ struct fts_selftest_fail_hist { u32 tsp_signature; u32 tsp_fw_version; u16 fail_cnt; u16 exec_parm; u32 test_result; u8 fail_data[18]; } __attribute__ ((packed)); /* 16 byte */ struct fts_gesture_status { u8 eid:2; u8 stype:4; u8 sf:2; u8 gesture_id; u8 gesture_data_1; u8 gesture_data_2; u8 gesture_data_3; u8 gesture_data_4; u8 reserved_6; u8 left_event_4_0:5; u8 max_energy:1; u8 reserved_7:2; u8 reserved_8; u8 reserved_9; u8 reserved_10; u8 reserved_11; u8 reserved_12; u8 reserved_13; u8 reserved_14; u8 reserved_15; } __packed; struct FTS_SyncFrameHeader { u8 header; // 0 u8 host_data_mem_id; // 1 u16 cnt; // 2~3 u8 dbg_frm_len; // 4 u8 ms_force_len; // 5 u8 ms_sense_len; // 6 u8 ss_force_len; // 7 u8 ss_sense_len; // 8 u8 key_len; // 9 u16 reserved1; // 10~11 u32 reserved2; // 12~15 } __packed; struct stm_ts_snr_result_cmd { s16 status; s16 point; s16 average; } __packed; struct tsp_snr_result_of_point { s16 max; s16 min; s16 average; s16 nontouch_peak_noise; s16 touch_peak_noise; s16 snr1; s16 snr2; } __packed; struct stm_ts_snr_result { s16 status; s16 reserved[6]; struct tsp_snr_result_of_point result[9]; } __packed; struct fts_i2c_platform_data { bool support_hover; bool support_glove; bool support_mt_pressure; bool support_sidegesture; bool support_dex; bool support_open_short_test; bool support_mis_calibration_test; bool support_sram_test; bool support_ear_detect; bool sync_reportrate_120; bool enable_settings_aot; bool support_hall_ic; bool support_flex_mode; bool support_fod; bool hw_i2c_reset; int max_x; int max_y; u8 panel_revision; /* to identify panel info */ const char *firmware_name; const char *regulator_dvdd; const char *regulator_avdd; struct pinctrl *pinctrl; struct pinctrl_state *pins_default; struct pinctrl_state *pins_sleep; int (*power)(void *data, bool on); void (*register_cb)(void *); void (*enable_sync)(bool on); u8 (*get_ddi_type)(void); /* to indentify ddi type */ int tsp_icid; /* IC Vendor */ int tsp_id; /* Panel Vendor */ int device_id; /* Device id */ int irq_gpio; /* Interrupt GPIO */ unsigned int irq_type; u32 device_num; int gpio_scl; int gpio_sda; int bringup; bool chip_on_board; #ifdef CONFIG_INPUT_SEC_SECURE_TOUCH int ss_touch_num; #endif u32 area_indicator; u32 area_navigation; u32 area_edge; }; struct fts_ts_info { struct i2c_client *client; struct input_dev *input_dev; struct input_dev *input_dev_pad; struct input_dev *input_dev_touch; struct input_dev *input_dev_proximity; int irq; bool irq_enabled; struct fts_i2c_platform_data *board; #ifdef FTS_SUPPORT_TA_MODE void (*register_cb)(void *); struct fts_callbacks callbacks; #endif struct mutex lock; bool probe_done; #ifdef SEC_TSP_FACTORY_TEST struct sec_cmd_data sec; int SenseChannelLength; int ForceChannelLength; short *pFrame; u8 miscal_result; u8 *cx_data; u8 *ito_result; #endif struct fts_ts_test_result test_result; u8 disassemble_count; u8 fac_nv; struct regulator *regulator_dvdd; struct regulator *regulator_avdd; struct sec_tclm_data *tdata; bool is_cal_done; bool fw_corruption; bool hover_ready; bool hover_enabled; bool glove_enabled; bool flip_enable; bool mainscr_disable; unsigned int cover_type; u8 cover_cmd; u8 external_noise_mode; u8 brush_mode; u8 touchable_area; int ICXResolution; int ICYResolution; volatile u8 touch_noise_status; u8 touch_noise_reason; u8 touch_opmode; u16 touch_functions; u8 charger_mode; u8 scan_mode; u8 lowpower_flag; bool deepsleep_mode; bool wet_mode; bool xenosensor_detect; unsigned int xenosensor_detect_count; /* noise mode count */ struct tm xenosensor_time; u16 xenosensor_x; u16 xenosensor_y; u16 xenosensor_detect_x; u16 xenosensor_detect_y; volatile int fts_power_state; int wakeful_edge_side; struct completion resume_done; struct wakeup_source *wakelock; #ifdef FTS_SUPPORT_TA_MODE bool TA_Pluged; #endif unsigned int noise_count; /* noise mode count */ int touch_count; struct fts_finger finger[FINGER_MAX]; int retry_hover_enable_after_wakeup; int fw_version_of_ic; /* firmware version of IC */ int fw_version_of_bin; /* firmware version of binary */ int config_version_of_ic; /* Config release data from IC */ int config_version_of_bin; /* Config release data from IC */ u16 fw_main_version_of_ic; /* firmware main version of IC */ u16 fw_main_version_of_bin; /* firmware main version of binary */ u8 project_id_of_ic; u8 project_id_of_bin; u8 ic_name_of_ic; u8 ic_name_of_bin; u8 module_version_of_ic; u8 module_version_of_bin; int panel_revision; /* Octa panel revision */ int tspid_val; int tspid2_val; struct notifier_block nb; int flip_status_current; int flip_status_prev; #ifdef CONFIG_TOUCHSCREEN_DUAL_FOLDABLE int flip_status; int change_flip_status; struct mutex switching_mutex; struct delayed_work switching_work; #ifdef CONFIG_FOLDER_HALL struct notifier_block hall_ic_nb; #endif #endif #ifdef USE_OPEN_DWORK struct delayed_work open_work; #endif struct delayed_work work_read_nv; struct delayed_work work_print_info; u32 print_info_cnt_open; u32 print_info_cnt_release; unsigned int debug_string; struct delayed_work reset_work; struct delayed_work work_read_info; struct delayed_work debug_work; bool rawdata_read_lock; volatile bool reset_is_on_going; volatile bool shutdown_is_on_going; struct delayed_work work_lfd_ctrl; char lfd_ctrl; char lfd_ctrl_prev; int lfd_ctrl_delay; struct delayed_work fw_reset_work; u8 fw_reset_cmd; bool use_sponge; unsigned int scrub_id; unsigned int scrub_x; unsigned int scrub_y; u8 press_prop; int fod_x; int fod_y; int fod_vi_size; u8 *fod_vi_data; #if defined(CONFIG_INPUT_SEC_SECURE_TOUCH) atomic_t st_enabled; atomic_t st_pending_irqs; struct completion st_powerdown; struct completion st_interrupt; struct sec_touch_driver *ss_drv; struct mutex st_lock; #endif struct mutex i2c_mutex; struct mutex irq_mutex; struct mutex device_mutex; struct mutex eventlock; struct mutex status_mutex; struct mutex wait_for; struct mutex sponge_mutex; bool reinit_done; bool info_work_done; u8 ddi_type; const char *firmware_name; u8 grip_edgehandler_direction; int grip_edgehandler_start_y; int grip_edgehandler_end_y; u16 grip_edge_range; u8 grip_deadzone_up_x; u8 grip_deadzone_dn_x; int grip_deadzone_y; u8 grip_landscape_mode; int grip_landscape_edge; u16 grip_landscape_deadzone; u16 grip_landscape_top_deadzone; u16 grip_landscape_bottom_deadzone; u16 grip_landscape_top_gripzone; u16 grip_landscape_bottom_gripzone; u16 rect_data[4]; u16 fod_rect_data[4]; u8 ito_test[4]; u8 check_multi; bool read_ito; unsigned int multi_count; unsigned int wet_count; unsigned int comm_err_count; unsigned int checksum_result; unsigned int all_finger_count; unsigned int all_aod_tap_count; unsigned int all_spay_count; u8 factory_position; int proc_cmoffset_size; int proc_cmoffset_all_size; char *cmoffset_sdc_proc; char *cmoffset_sub_proc; char *cmoffset_main_proc; char *cmoffset_all_proc; bool sponge_inf_dump; u8 sponge_dump_format; u8 sponge_dump_event; u8 sponge_dump_border_msb; u8 sponge_dump_border_lsb; bool sponge_dump_delayed_flag; u8 sponge_dump_delayed_area; u16 sponge_dump_border; unsigned char *lp_dump; int lp_dump_index; int lp_dump_readmore; int prox_power_off; bool rear_selfie_mode; u8 ed_enable; u8 hover_event; u8 pocket_mode; /* thermistor */ union power_supply_propval psy_value; struct power_supply *psy; u8 tsp_temp_data; bool tsp_temp_data_skip; bool fix_active_mode; bool touch_aging_mode; int sensitivity_mode; u8 sip_mode; bool rawcap_lock; int rawcap_max; int rawcap_max_tx; int rawcap_max_rx; int rawcap_min; int rawcap_min_tx; int rawcap_min_rx; int (*stop_device)(struct fts_ts_info *info); int (*start_device)(struct fts_ts_info *info); int (*fts_write_reg)(struct fts_ts_info *info, u8 *reg, u16 num_com); int (*fts_read_reg)(struct fts_ts_info *info, u8 *reg, int cnum, u8 *buf, int num); int (*fts_systemreset)(struct fts_ts_info *info, unsigned int msec); int (*fts_wait_for_ready)(struct fts_ts_info *info); void (*fts_command)(struct fts_ts_info *info, u8 cmd, bool checkEcho); int (*fts_get_version_info)(struct fts_ts_info *info); int (*fts_get_sysinfo_data)(struct fts_ts_info *info, u8 sysinfo_addr, u8 read_cnt, u8 *data); #ifdef FTS_SUPPORT_SPONGELIB int (*fts_read_from_sponge)(struct fts_ts_info *info, u16 offset, u8 *data, int length); int (*fts_write_to_sponge)(struct fts_ts_info *info, u16 offset, u8 *data, int length); #endif }; int fts_fw_update_on_probe(struct fts_ts_info *info); int fts_fw_update_on_hidden_menu(struct fts_ts_info *info, int update_type); void fts_reinit(struct fts_ts_info *info, bool delay); int fts_execute_autotune(struct fts_ts_info *info, bool IsSaving); int fts_fw_wait_for_event(struct fts_ts_info *info, u8 *result, u8 result_cnt); int fts_fw_wait_for_echo_event(struct fts_ts_info *info, u8 *cmd, u8 cmd_cnt, int delay); int fts_irq_enable(struct fts_ts_info *info, bool enable); int fts_set_calibration_information(struct fts_ts_info *info, u8 count, u16 version); void fts_checking_miscal(struct fts_ts_info *info); int fts_get_tsp_test_result(struct fts_ts_info *info); void fts_interrupt_set(struct fts_ts_info *info, int enable); void fts_release_all_finger(struct fts_ts_info *info); void fts_delay(unsigned int ms); int fts_set_opmode(struct fts_ts_info *info, u8 mode); int fts_set_scanmode(struct fts_ts_info *info, u8 scan_mode); int fts_osc_trim_recovery(struct fts_ts_info *info); int fts_set_fod_rect(struct fts_ts_info *info); //static ssize_t fts_get_cmoffset_dump(struct fts_ts_info *info, char *buf, u8 position); #ifdef TCLM_CONCEPT int fts_tclm_data_read(struct i2c_client *client, int address); int fts_tclm_data_write(struct i2c_client *client, int address); int fts_tclm_execute_force_calibration(struct i2c_client *client, int cal_mode); #endif int set_nvm_data(struct fts_ts_info *info, u8 type, u8 *buf); int get_nvm_data(struct fts_ts_info *info, int type, u8 *nvdata); int fts_panel_ito_test(struct fts_ts_info *info, int testmode); void fts_chk_tsp_ic_status(struct fts_ts_info *info, int call_pos); int fts_set_lowpowermode(struct fts_ts_info *info, u8 mode); int fts_set_hsync_scanmode(struct fts_ts_info *info, u8 mode); int fts_set_external_noise_mode(struct fts_ts_info *info, u8 mode); int fts_fix_active_mode(struct fts_ts_info *info, bool enable); #ifdef FTS_SUPPORT_SPONGELIB #ifdef CONFIG_TOUCHSCREEN_DUAL_FOLDABLE ssize_t get_lp_dump(struct device *dev, struct device_attribute *attr, char *buf); #endif int fts_check_custom_library(struct fts_ts_info *info); #endif #ifndef CONFIG_SEC_SYSFS extern struct class *sec_class; #endif #ifdef CONFIG_BATTERY_SAMSUNG extern unsigned int lpcharge; #endif #if defined(CONFIG_DISPLAY_SAMSUNG) extern int get_lcd_attached(char *mode); #endif #if defined(CONFIG_EXYNOS_DECON_FB) extern int get_lcd_info(char *arg); #endif extern void fts_set_grip_data_to_ic(struct fts_ts_info *info, u8 flag); extern void fts_set_grip_type(struct fts_ts_info *info, u8 set_type); void fts_run_rawdata_read_all(struct fts_ts_info *info); #ifdef CONFIG_TOUCHSCREEN_DUMP_MODE #ifdef CONFIG_TOUCHSCREEN_DUAL_FOLDABLE extern struct tsp_dump_callbacks *tsp_callbacks; #else extern struct tsp_dump_callbacks dump_callbacks; #endif #endif #endif /* _LINUX_FTS_TS_H_ */