xref: /OK3568_Linux_fs/kernel/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /************************************************************************
2 * Copyright (C) 2012-2019, Focaltech Systems (R)��All Rights Reserved.
3 *
4 * File Name: focaltech_flash.h
5 *
6 * Author: Focaltech Driver Team
7 *
8 * Created: 2016-08-07
9 *
10 * Abstract:
11 *
12 ************************************************************************/
13 #ifndef __LINUX_FOCALTECH_FLASH_H__
14 #define __LINUX_FOCALTECH_FLASH_H__
15 
16 /*****************************************************************************
17 * 1.Included header files
18 *****************************************************************************/
19 #include "focaltech_core.h"
20 
21 /*****************************************************************************
22 * Private constant and macro definitions using #define
23 *****************************************************************************/
24 #define FTS_CMD_RESET                               0x07
25 #define FTS_ROMBOOT_CMD_SET_PRAM_ADDR               0xAD
26 #define FTS_ROMBOOT_CMD_SET_PRAM_ADDR_LEN           4
27 #define FTS_ROMBOOT_CMD_WRITE                       0xAE
28 #define FTS_ROMBOOT_CMD_START_APP                   0x08
29 #define FTS_DELAY_PRAMBOOT_START                    10
30 #define FTS_ROMBOOT_CMD_ECC                         0xCC
31 #define FTS_PRAM_SADDR                              0x000000
32 #define FTS_DRAM_SADDR                              0xD00000
33 
34 #define FTS_CMD_READ                                0x03
35 #define FTS_CMD_READ_DELAY                          1
36 #define FTS_CMD_READ_LEN                            4
37 #define FTS_CMD_FLASH_TYPE                          0x05
38 #define FTS_CMD_FLASH_MODE                          0x09
39 #define FLASH_MODE_WRITE_FLASH_VALUE                0x0A
40 #define FLASH_MODE_UPGRADE_VALUE                    0x0B
41 #define FLASH_MODE_LIC_VALUE                        0x0C
42 #define FLASH_MODE_PARAM_VALUE                      0x0D
43 #define FTS_CMD_ERASE_APP                           0x61
44 #define FTS_REASE_APP_DELAY                         1350
45 #define FTS_ERASE_SECTOR_DELAY                      60
46 #define FTS_RETRIES_REASE                           50
47 #define FTS_RETRIES_DELAY_REASE                     200
48 #define FTS_CMD_FLASH_STATUS                        0x6A
49 #define FTS_CMD_FLASH_STATUS_LEN                    2
50 #define FTS_CMD_FLASH_STATUS_NOP                    0x0000
51 #define FTS_CMD_FLASH_STATUS_ECC_OK                 0xF055
52 #define FTS_CMD_FLASH_STATUS_ERASE_OK               0xF0AA
53 #define FTS_CMD_FLASH_STATUS_WRITE_OK               0x1000
54 #define FTS_CMD_ECC_INIT                            0x64
55 #define FTS_CMD_ECC_CAL                             0x65
56 #define FTS_CMD_ECC_CAL_LEN                         6
57 #define FTS_RETRIES_ECC_CAL                         10
58 #define FTS_RETRIES_DELAY_ECC_CAL                   50
59 #define FTS_CMD_ECC_READ                            0x66
60 #define FTS_CMD_DATA_LEN                            0xB0
61 #define FTS_CMD_APP_DATA_LEN_INCELL                 0x7A
62 #define FTS_CMD_DATA_LEN_LEN                        4
63 #define FTS_CMD_WRITE                               0xBF
64 #define FTS_RETRIES_WRITE                           100
65 #define FTS_RETRIES_DELAY_WRITE                     1
66 #define FTS_CMD_WRITE_LEN                           6
67 #define FTS_DELAY_READ_ID                           20
68 #define FTS_DELAY_UPGRADE_RESET                     80
69 #define PRAMBOOT_MIN_SIZE                           0x120
70 #define PRAMBOOT_MAX_SIZE                           (64*1024)
71 #define FTS_FLASH_PACKET_LENGTH                     32     /* max=128 */
72 #define FTS_MAX_LEN_ECC_CALC                        0xFFFE /* must be even */
73 #define FTS_MIN_LEN                                 0x120
74 #define FTS_MAX_LEN_FILE                            (128 * 1024)
75 #define FTS_MAX_LEN_APP                             (64 * 1024)
76 #define FTS_MAX_LEN_SECTOR                          (4 * 1024)
77 #define FTS_CONIFG_VENDORID_OFF                     0x04
78 #define FTS_CONIFG_MODULEID_OFF                     0x1E
79 #define FTS_CONIFG_PROJECTID_OFF                    0x20
80 #define FTS_APPINFO_OFF                             0x100
81 #define FTS_APPINFO_APPLEN_OFF                      0x00
82 #define FTS_APPINFO_APPLEN2_OFF                     0x12
83 #define FTS_REG_UPGRADE                             0xFC
84 #define FTS_REG_UPGRADE2                            0xBC
85 #define FTS_UPGRADE_AA                              0xAA
86 #define FTS_UPGRADE_55                              0x55
87 #define FTS_DELAY_UPGRADE_AA                        10
88 #define FTS_UPGRADE_LOOP                            30
89 #define FTS_HEADER_LEN                              32
90 #define FTS_FW_BIN_FILEPATH                         "/sdcard/"
91 #define FTS_FW_IDE_SIG                              "IDE_"
92 #define FTS_FW_IDE_SIG_LEN                          4
93 #define MAX_MODULE_VENDOR_NAME_LEN                  16
94 
95 #define FTS_ROMBOOT_CMD_ECC_NEW_LEN                 7
96 #define FTS_ECC_FINISH_TIMEOUT                      100
97 #define FTS_ROMBOOT_CMD_ECC_FINISH                  0xCE
98 #define FTS_ROMBOOT_CMD_ECC_FINISH_OK_A5            0xA5
99 #define FTS_ROMBOOT_CMD_ECC_FINISH_OK_00            0x00
100 #define FTS_ROMBOOT_CMD_ECC_READ                    0xCD
101 #define AL2_FCS_COEF                ((1 << 15) + (1 << 10) + (1 << 3))
102 
103 #define FTS_APP_INFO_OFFSET                         0x100
104 
105 enum FW_STATUS {
106     FTS_RUN_IN_ERROR,
107     FTS_RUN_IN_APP,
108     FTS_RUN_IN_ROM,
109     FTS_RUN_IN_PRAM,
110     FTS_RUN_IN_BOOTLOADER,
111 };
112 
113 enum FW_FLASH_MODE {
114     FLASH_MODE_APP,
115     FLASH_MODE_LIC,
116     FLASH_MODE_PARAM,
117     FLASH_MODE_ALL,
118 };
119 
120 enum ECC_CHECK_MODE {
121     ECC_CHECK_MODE_XOR,
122     ECC_CHECK_MODE_CRC16,
123 };
124 
125 /*****************************************************************************
126 * Private enumerations, structures and unions using typedef
127 *****************************************************************************/
128 /* IC info */
129 struct upgrade_func {
130     u64 ctype[FTX_MAX_COMPATIBLE_TYPE];
131     u32 fwveroff;
132     u32 fwcfgoff;
133     u32 appoff;
134     u32 licoff;
135     u32 paramcfgoff;
136     u32 paramcfgveroff;
137     u32 paramcfg2off;
138     int pram_ecc_check_mode;
139     int fw_ecc_check_mode;
140     bool new_return_value_from_ic;
141     bool appoff_handle_in_ic;
142     bool is_reset_register_BC;
143     bool read_boot_id_need_reset;
144     bool hid_supported;
145     bool pramboot_supported;
146     u8 *pramboot;
147     u32 pb_length;
148     int (*init)(u8 *, u32);
149     int (*upgrade)(u8 *, u32);
150     int (*get_hlic_ver)(u8 *);
151     int (*lic_upgrade)(u8 *, u32);
152     int (*param_upgrade)(u8 *, u32);
153     int (*force_upgrade)(u8 *, u32);
154 };
155 
156 struct upgrade_setting_nf {
157     u8 rom_idh;
158     u8 rom_idl;
159     u16 reserved;
160     u32 app2_offset;
161     u32 ecclen_max;
162     u8 eccok_val;
163     u8 upgsts_boot;
164     u8 delay_init;
165     bool spi_pe;
166     bool half_length;
167     bool fd_check;
168     bool drwr_support;
169 };
170 
171 struct upgrade_module {
172     int id;
173     char vendor_name[MAX_MODULE_VENDOR_NAME_LEN];
174     u8 *fw_file;
175     u32 fw_len;
176 };
177 
178 struct fts_upgrade {
179     struct fts_ts_data *ts_data;
180     struct upgrade_module *module_info;
181     struct upgrade_func *func;
182     struct upgrade_setting_nf *setting_nf;
183     int module_id;
184     bool fw_from_request;
185     u8 *fw;
186     u32 fw_length;
187     u8 *lic;
188     u32 lic_length;
189 };
190 
191 /*****************************************************************************
192 * Global variable or extern global variabls/functions
193 *****************************************************************************/
194 extern struct upgrade_func upgrade_func_ft5422;
195 
196 /*****************************************************************************
197 * Static function prototypes
198 *****************************************************************************/
199 int fts_fwupg_reset_in_boot(void);
200 int fts_fwupg_enter_into_boot(void);
201 int fts_fwupg_erase(u32 delay);
202 int fts_fwupg_ecc_cal(u32 saddr, u32 len);
203 int fts_flash_write_buf(u32 saddr, u8 *buf, u32 len, u32 delay);
204 int fts_fwupg_upgrade(struct fts_upgrade *upg);
205 #endif
206