1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* Copyright (C) 2010, Imagis Technology Co. Ltd. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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 __IST30XXC_UPDATE_H__
#define __IST30XXC_UPDATE_H__
// Flash size
#define IST30XX_FLASH_BASE_ADDR (0x0)
#if (IMAGIS_TSP_IC < IMAGIS_IST3038C)
#define IST30XX_FLASH_MAIN_SIZE (0x8000)
#define IST30XX_FLASH_INFO_SIZE (0x400)
#define IST30XX_FLASH_TOTAL_SIZE (0x8400)
#else
#define IST30XX_FLASH_MAIN_SIZE (0xFC00)
#define IST30XX_FLASH_INFO_SIZE (0x0)
#define IST30XX_FLASH_TOTAL_SIZE (0xFC00)
#endif
#define IST30XX_FLASH_PAGE_SIZE (0x400)
// Flash register
#define IST30XX_FLASH_BASE (0x40006000)
#define IST30XX_FLASH_MODE IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x00)
#define IST30XX_FLASH_ADDR IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x04)
#define IST30XX_FLASH_DIN IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x08)
#define IST30XX_FLASH_DOUT IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x0C)
#define IST30XX_FLASH_ISPEN IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x10)
#define IST30XX_FLASH_AUTO_READ IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x14)
#define IST30XX_FLASH_CRC IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x18)
#define IST30XX_FLASH_TEST_MODE1 IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x30)
#define IST30XX_FLASH_STATUS IST30XX_DA_ADDR(IST30XX_FLASH_BASE | 0x90)
// F/W update Info
#define IST30XX_FW_NAME "ist30xxc.fw"
#define IST30XX_BIN_NAME "ist30xxc.bin"
// Calibration
#define CALIB_WAIT_TIME (50) /* unit : 100msec */
#define CALIB_TO_GAP(n) ((n >> 16) & 0xFFF)
#define CALIB_TO_STATUS(n) ((n >> 12) & 0xF)
#define CALIB_TO_OS_VALUE(n) ((n >> 12) & 0xFFFF)
// Update func
#define MASK_UPDATE_INTERNAL (1)
#define MASK_UPDATE_FW (2)
#define MASK_UPDATE_SDCARD (3)
#define MASK_UPDATE_ERASE (4)
// Version flag
#define FLAG_MAIN (1)
#define FLAG_FW (2)
#define FLAG_CORE (3)
#define FLAG_TEST (4)
// TSP vendor (using gpio)
#define TSP_TYPE_UNKNOWN (0xF0)
#define TSP_TYPE_ALPS (0xF)
#define TSP_TYPE_EELY (0xE)
#define TSP_TYPE_TOP (0xD)
#define TSP_TYPE_MELFAS (0xC)
#define TSP_TYPE_ILJIN (0xB)
#define TSP_TYPE_SYNOPEX (0xA)
#define TSP_TYPE_SMAC (0x9)
#define TSP_TYPE_TAEYANG (0x8)
#define TSP_TYPE_TOVIS (0x7)
#define TSP_TYPE_ELK (0x6)
#define TSP_TYPE_OTHERS (0x5)
#define TSP_TYPE_NO (0x10)
#define IST30XX_PARSE_TSPTYPE(n) ((n >> 1) & 0xF)
int ist30xx_read_chksum(struct i2c_client *client, u32 *chksum);
int ist30xx_read_chksum_all(struct i2c_client *client, u32 *chksum);
int ist30xx_get_update_info(struct ist30xx_data *data, const u8 *buf,
const u32 size);
int ist30xx_get_tsp_info(struct ist30xx_data *data);
void ist30xx_print_info(struct ist30xx_data *data);
u32 ist30xx_parse_ver(struct ist30xx_data *data, int flag, const u8 *buf);
int ist30xx_fw_update(struct ist30xx_data *data, const u8 *buf, int size);
int ist30xx_fw_recovery(struct ist30xx_data *data);
int ist30xx_auto_bin_update(struct ist30xx_data *data);
int ist30xx_calibrate(struct ist30xx_data *data, int wait_cnt);
int ist30xx_init_update_sysfs(struct ist30xx_data *data);
#endif // __IST30XXC_UPDATE_H__
|