blob: 418f30e99e6c1cd81df06842f288abb9ff46a9a5 (
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/*
* 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 __IST30XX_CMCS_H__
#define __IST30XX_CMCS_H__
#define IST30XX_INTERNAL_CMCS_BIN (1)
#define CMCS_FLAG_CM (1)
#define CMCS_FLAG_CM_SPEC (1 << 1)
#define CMCS_FLAG_CM_SLOPE0 (1 << 2)
#define CMCS_FLAG_CM_SLOPE1 (1 << 3)
#define CMCS_FLAG_CS0 (1 << 4)
#define CMCS_FLAG_CS1 (1 << 5)
#define FLAG_ENABLE_CM (1)
#define FLAG_ENABLE_CS (2)
#define FLAG_ENABLE_CR (4)
#define IST30XX_CMCS_LOAD_END (0x8FFFFCAB)
#if (IMAGIS_TSP_IC == IMAGIS_IST30XXB)
#define IST30XX_CMCS_BUF_SIZE (16 * 16)
#elif (IMAGIS_TSP_IC == IMAGIS_IST3038)
#define IST30XX_CMCS_BUF_SIZE (((19 * 19) / 2 + 1) * 2)
#else
#error "Unknown TSP_IC"
#endif
#define ENABLE_CM_MODE(n) (n & 1)
#define ENABLE_CS_MODE(n) ((n >> 1) & 1)
#define IST30XXB_CMCS_NAME "ist30xxb.cms"
#define IST30XX_CMCS_MAGIC "CMCS1TAG"
struct CMCS_ADDR_INFO {
u32 base_screen;
u32 base_key;
u32 start_cp;
u32 vcmp;
u32 sensor1;
u32 sensor2;
u32 sensor3;
};
struct CMCS_CH_INFO {
u8 tx_num;
u8 rx_num;
u8 key_rx;
u8 key1;
u8 key2;
u8 key3;
u8 key4;
u8 key5;
};
struct CMCS_SLOPE_INFO {
s16 x_min;
s16 x_max;
s16 y_min;
s16 y_max;
s16 key_min;
s16 key_max;
};
struct CMCS_SPEC_INFO {
u16 screen_min;
u16 screen_max;
u16 key_min;
u16 key_max;
};
struct CMCS_CMD {
u16 mode; // enable bit
u16 cmcs_size;
u16 base_screen;
u16 base_key;
u8 start_cp_cm;
u8 start_cp_cs;
u8 vcmp_cm;
u8 vcmp_cs;
u32 reserved; // for checksum of firmware
};
typedef struct _CMCS_INFO {
u32 timeout;
struct CMCS_ADDR_INFO addr;
struct CMCS_CH_INFO ch;
struct CMCS_SPEC_INFO spec_cr;
struct CMCS_SPEC_INFO spec_cm;
struct CMCS_SPEC_INFO spec_cs0;
struct CMCS_SPEC_INFO spec_cs1;
struct CMCS_SLOPE_INFO slope;
u16 sensor1_size;
u16 sensor2_size;
u16 sensor3_size;
u16 reserved;
u32 cmcs_chksum;
u32 sensor_chksum;
struct CMCS_CMD cmd;
} CMCS_INFO;
typedef struct _CMCS_BIN_INFO {
char magic1[8];
CMCS_INFO cmcs;
u8 * buf_cmcs;
u32 * buf_sensor;
u16 * buf_node;
char magic2[8];
} CMCS_BIN_INFO;
typedef struct _CMCS_BUF {
s16 cm[IST30XX_CMCS_BUF_SIZE];
s16 spec[IST30XX_CMCS_BUF_SIZE];
s16 slope0[IST30XX_CMCS_BUF_SIZE];
s16 slope1[IST30XX_CMCS_BUF_SIZE];
s16 cs0[IST30XX_CMCS_BUF_SIZE];
s16 cs1[IST30XX_CMCS_BUF_SIZE];
} CMCS_BUF;
int ist30xx_init_cmcs_sysfs(void);
#endif // __IST30XX_CMCS_H__
|