xref: /OK3568_Linux_fs/kernel/drivers/input/touchscreen/focaltech_touch/focaltech_flash.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * FocalTech ftxxxx TouchScreen driver.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2012-2018, Focaltech Ltd. All rights reserved.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * This software is licensed under the terms of the GNU General Public
8*4882a593Smuzhiyun  * License version 2, as published by the Free Software Foundation, and
9*4882a593Smuzhiyun  * may be copied, distributed, and modified under those terms.
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful,
12*4882a593Smuzhiyun  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*4882a593Smuzhiyun  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*4882a593Smuzhiyun  * GNU General Public License for more details.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifndef __LINUX_FOCALTECH_FLASH_H__
19*4882a593Smuzhiyun #define __LINUX_FOCALTECH_FLASH_H__
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /*****************************************************************************
22*4882a593Smuzhiyun * 1.Included header files
23*4882a593Smuzhiyun *****************************************************************************/
24*4882a593Smuzhiyun #include "focaltech_core.h"
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /*****************************************************************************
27*4882a593Smuzhiyun * Private constant and macro definitions using #define
28*4882a593Smuzhiyun *****************************************************************************/
29*4882a593Smuzhiyun #define FTS_CMD_RESET                               0x07
30*4882a593Smuzhiyun #define FTS_ROMBOOT_CMD_WRITE                       0xAE
31*4882a593Smuzhiyun #define FTS_ROMBOOT_CMD_START_APP                   0x08
32*4882a593Smuzhiyun #define FTS_DELAY_PRAMBOOT_START                    10
33*4882a593Smuzhiyun #define FTS_ROMBOOT_CMD_ECC                         0xCC
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define FTS_CMD_READ                                0x03
36*4882a593Smuzhiyun #define FTS_CMD_READ_DELAY                          1
37*4882a593Smuzhiyun #define FTS_CMD_READ_LEN                            4
38*4882a593Smuzhiyun #define FTS_CMD_FLASH_TYPE                          0x05
39*4882a593Smuzhiyun #define FTS_CMD_FLASH_MODE                          0x09
40*4882a593Smuzhiyun #define FLASH_MODE_WRITE_FLASH_VALUE                0x0A
41*4882a593Smuzhiyun #define FLASH_MODE_UPGRADE_VALUE                    0x0B
42*4882a593Smuzhiyun #define FLASH_MODE_LIC_VALUE                        0x0C
43*4882a593Smuzhiyun #define FLASH_MODE_PARAM_VALUE                      0x0D
44*4882a593Smuzhiyun #define FTS_CMD_ERASE_APP                           0x61
45*4882a593Smuzhiyun #define FTS_REASE_APP_DELAY                         1350
46*4882a593Smuzhiyun #define FTS_ERASE_SECTOR_DELAY                      60
47*4882a593Smuzhiyun #define FTS_RETRIES_REASE                           50
48*4882a593Smuzhiyun #define FTS_RETRIES_DELAY_REASE                     200
49*4882a593Smuzhiyun #define FTS_CMD_FLASH_STATUS                        0x6A
50*4882a593Smuzhiyun #define FTS_CMD_FLASH_STATUS_LEN                    2
51*4882a593Smuzhiyun #define FTS_CMD_FLASH_STATUS_NOP                    0x0000
52*4882a593Smuzhiyun #define FTS_CMD_FLASH_STATUS_ECC_OK                 0xF055
53*4882a593Smuzhiyun #define FTS_CMD_FLASH_STATUS_ERASE_OK               0xF0AA
54*4882a593Smuzhiyun #define FTS_CMD_FLASH_STATUS_WRITE_OK               0x1000
55*4882a593Smuzhiyun #define FTS_CMD_ECC_INIT                            0x64
56*4882a593Smuzhiyun #define FTS_CMD_ECC_CAL                             0x65
57*4882a593Smuzhiyun #define FTS_CMD_ECC_CAL_LEN                         6
58*4882a593Smuzhiyun #define FTS_RETRIES_ECC_CAL                         10
59*4882a593Smuzhiyun #define FTS_RETRIES_DELAY_ECC_CAL                   50
60*4882a593Smuzhiyun #define FTS_CMD_ECC_READ                            0x66
61*4882a593Smuzhiyun #define FTS_CMD_DATA_LEN                            0xB0
62*4882a593Smuzhiyun #define FTS_CMD_APP_DATA_LEN_INCELL                 0x7A
63*4882a593Smuzhiyun #define FTS_CMD_DATA_LEN_LEN                        4
64*4882a593Smuzhiyun #define FTS_CMD_WRITE                               0xBF
65*4882a593Smuzhiyun #define FTS_RETRIES_WRITE                           100
66*4882a593Smuzhiyun #define FTS_RETRIES_DELAY_WRITE                     1
67*4882a593Smuzhiyun #define FTS_CMD_WRITE_LEN                           6
68*4882a593Smuzhiyun #define FTS_DELAY_READ_ID                           20
69*4882a593Smuzhiyun #define FTS_DELAY_UPGRADE_RESET                     80
70*4882a593Smuzhiyun #define PRAMBOOT_MIN_SIZE                           0x120
71*4882a593Smuzhiyun #define PRAMBOOT_MAX_SIZE                           (64*1024)
72*4882a593Smuzhiyun #define FTS_FLASH_PACKET_LENGTH                     32     /* max=128 */
73*4882a593Smuzhiyun #define FTS_MAX_LEN_ECC_CALC                        0xFFFE /* must be even */
74*4882a593Smuzhiyun #define FTS_MIN_LEN                                 0x120
75*4882a593Smuzhiyun #define FTS_MAX_LEN_FILE                            (128 * 1024)
76*4882a593Smuzhiyun #define FTS_MAX_LEN_APP                             (64 * 1024)
77*4882a593Smuzhiyun #define FTS_MAX_LEN_SECTOR                          (4 * 1024)
78*4882a593Smuzhiyun #define FTS_CONIFG_VENDORID_OFF                     0x04
79*4882a593Smuzhiyun #define FTS_CONIFG_MODULEID_OFF                     0x1E
80*4882a593Smuzhiyun #define FTS_CONIFG_PROJECTID_OFF                    0x20
81*4882a593Smuzhiyun #define FTS_APPINFO_OFF                             0x100
82*4882a593Smuzhiyun #define FTS_APPINFO_APPLEN_OFF                      0x00
83*4882a593Smuzhiyun #define FTS_APPINFO_APPLEN2_OFF                     0x12
84*4882a593Smuzhiyun #define FTS_REG_UPGRADE                             0xFC
85*4882a593Smuzhiyun #define FTS_UPGRADE_AA                              0xAA
86*4882a593Smuzhiyun #define FTS_UPGRADE_55                              0x55
87*4882a593Smuzhiyun #define FTS_DELAY_FC_AA                             10
88*4882a593Smuzhiyun #define FTS_UPGRADE_LOOP                            30
89*4882a593Smuzhiyun #define FTS_HEADER_LEN                              32
90*4882a593Smuzhiyun #define FTS_FW_BIN_FILEPATH                         "/sdcard/"
91*4882a593Smuzhiyun #define FTS_FW_IDE_SIG                              "IDE_"
92*4882a593Smuzhiyun #define FTS_FW_IDE_SIG_LEN                          4
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun #define FTS_ROMBOOT_CMD_ECC_NEW_LEN                 7
95*4882a593Smuzhiyun #define FTS_ROMBOOT_CMD_ECC_FINISH                  0xCE
96*4882a593Smuzhiyun #define FTS_CMD_READ_ECC                            0xCD
97*4882a593Smuzhiyun #define AL2_FCS_COEF                ((1 << 15) + (1 << 10) + (1 << 3))
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun enum FW_STATUS {
100*4882a593Smuzhiyun     FTS_RUN_IN_ERROR,
101*4882a593Smuzhiyun     FTS_RUN_IN_APP,
102*4882a593Smuzhiyun     FTS_RUN_IN_ROM,
103*4882a593Smuzhiyun     FTS_RUN_IN_PRAM,
104*4882a593Smuzhiyun     FTS_RUN_IN_BOOTLOADER,
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun enum FW_FLASH_MODE {
108*4882a593Smuzhiyun     FLASH_MODE_APP,
109*4882a593Smuzhiyun     FLASH_MODE_LIC,
110*4882a593Smuzhiyun     FLASH_MODE_PARAM,
111*4882a593Smuzhiyun     FLASH_MODE_ALL,
112*4882a593Smuzhiyun };
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun enum ECC_CHECK_MODE {
115*4882a593Smuzhiyun     ECC_CHECK_MODE_XOR,
116*4882a593Smuzhiyun     ECC_CHECK_MODE_CRC16,
117*4882a593Smuzhiyun };
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /*****************************************************************************
120*4882a593Smuzhiyun * Private enumerations, structures and unions using typedef
121*4882a593Smuzhiyun *****************************************************************************/
122*4882a593Smuzhiyun /* IC info */
123*4882a593Smuzhiyun struct upgrade_func {
124*4882a593Smuzhiyun     u64 ctype[FTX_MAX_COMPATIBLE_TYPE];
125*4882a593Smuzhiyun     int newmode;
126*4882a593Smuzhiyun     u32 fwveroff;
127*4882a593Smuzhiyun     u32 fwcfgoff;
128*4882a593Smuzhiyun     u32 appoff;
129*4882a593Smuzhiyun     u32 licoff;
130*4882a593Smuzhiyun     u32 paramcfgoff;
131*4882a593Smuzhiyun     u32 paramcfgveroff;
132*4882a593Smuzhiyun     u32 paramcfg2off;
133*4882a593Smuzhiyun     int ecc_check_mode;
134*4882a593Smuzhiyun     bool read_boot_id_need_reset;
135*4882a593Smuzhiyun     bool hid_supported;
136*4882a593Smuzhiyun     bool pramboot_supported;
137*4882a593Smuzhiyun     u8 *pramboot;
138*4882a593Smuzhiyun     u32 pb_length;
139*4882a593Smuzhiyun     int (*init)(void);
140*4882a593Smuzhiyun     int (*upgrade)(struct i2c_client *, u8 *, u32);
141*4882a593Smuzhiyun     int (*get_hlic_ver)(u8 *);
142*4882a593Smuzhiyun     int (*lic_upgrade)(struct i2c_client *, u8 *, u32);
143*4882a593Smuzhiyun     int (*param_upgrade)(struct i2c_client *, u8 *, u32);
144*4882a593Smuzhiyun     int (*force_upgrade)(struct i2c_client *, u8 *, u32);
145*4882a593Smuzhiyun };
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun struct fts_upgrade {
148*4882a593Smuzhiyun     u8 *fw;
149*4882a593Smuzhiyun     u32 fw_length;
150*4882a593Smuzhiyun     u8 *lic;
151*4882a593Smuzhiyun     u32 lic_length;
152*4882a593Smuzhiyun     struct upgrade_func *func;
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun struct upgrade_fw {
156*4882a593Smuzhiyun     u16 vendor_id;
157*4882a593Smuzhiyun     u8 *fw_file;
158*4882a593Smuzhiyun     u32 fw_len;
159*4882a593Smuzhiyun };
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun /*****************************************************************************
162*4882a593Smuzhiyun * Global variable or extern global variabls/functions
163*4882a593Smuzhiyun *****************************************************************************/
164*4882a593Smuzhiyun extern struct fts_upgrade *fwupgrade;
165*4882a593Smuzhiyun extern struct upgrade_func upgrade_func_ft8006m;
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun /*****************************************************************************
168*4882a593Smuzhiyun * Static function prototypes
169*4882a593Smuzhiyun *****************************************************************************/
170*4882a593Smuzhiyun bool fts_fwupg_check_fw_valid(struct i2c_client *client);
171*4882a593Smuzhiyun int fts_fwupg_get_boot_state(struct i2c_client *client, enum FW_STATUS *fw_sts);
172*4882a593Smuzhiyun bool fts_fwupg_check_state(struct i2c_client *client, enum FW_STATUS rstate);
173*4882a593Smuzhiyun int fts_fwupg_reset_in_boot(struct i2c_client *client);
174*4882a593Smuzhiyun int fts_fwupg_reset_to_boot(struct i2c_client *client);
175*4882a593Smuzhiyun int fts_fwupg_reset_to_romboot(struct i2c_client *client);
176*4882a593Smuzhiyun int fts_fwupg_enter_into_boot(struct i2c_client *client);
177*4882a593Smuzhiyun int fts_fwupg_erase(struct i2c_client *client, u32 delay);
178*4882a593Smuzhiyun int fts_fwupg_ecc_cal(struct i2c_client *client, u32 saddr, u32 len);
179*4882a593Smuzhiyun int fts_flash_write_buf(struct i2c_client *client, u32 saddr, u8 *buf, u32 len, u32 delay);
180*4882a593Smuzhiyun int fts_fwupg_upgrade(struct i2c_client *client, struct fts_upgrade *upg);
181*4882a593Smuzhiyun u16 fts_crc16_calc_host(u8 *pbuf, u16 length);
182*4882a593Smuzhiyun #endif
183