summaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen/ist30xxc/ist30xxc_update.h
blob: 142106f9f378f1fcc24ec02184e0e1d6ee83e02f (plain)
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__