summaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen/ist30xxa/ist30xx_cmcs.h
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__