tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / drivers / input / touchscreen / ist30xxa / ist30xx_cmcs.h
1 /*
2  *  Copyright (C) 2010, Imagis Technology Co. Ltd. All Rights Reserved.
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  */
15
16 #ifndef __IST30XX_CMCS_H__
17 #define __IST30XX_CMCS_H__
18
19
20 #define IST30XX_INTERNAL_CMCS_BIN   (1)
21
22 #define CMCS_FLAG_CM                (1)
23 #define CMCS_FLAG_CM_SPEC           (1 << 1)
24 #define CMCS_FLAG_CM_SLOPE0         (1 << 2)
25 #define CMCS_FLAG_CM_SLOPE1         (1 << 3)
26 #define CMCS_FLAG_CS0               (1 << 4)
27 #define CMCS_FLAG_CS1               (1 << 5)
28
29 #define FLAG_ENABLE_CM              (1)
30 #define FLAG_ENABLE_CS              (2)
31 #define FLAG_ENABLE_CR              (4)
32
33 #define IST30XX_CMCS_LOAD_END       (0x8FFFFCAB)
34 #if (IMAGIS_TSP_IC == IMAGIS_IST30XXB)
35 #define IST30XX_CMCS_BUF_SIZE       (16 * 16)
36 #elif (IMAGIS_TSP_IC == IMAGIS_IST3038)
37 #define IST30XX_CMCS_BUF_SIZE       (((19 * 19) / 2 + 1) * 2)
38 #else
39 #error "Unknown TSP_IC"
40 #endif
41
42 #define ENABLE_CM_MODE(n)           (n & 1)
43 #define ENABLE_CS_MODE(n)           ((n >> 1) & 1)
44
45 #define IST30XXB_CMCS_NAME          "ist30xxb.cms"
46
47 #define IST30XX_CMCS_MAGIC          "CMCS1TAG"
48 struct CMCS_ADDR_INFO {
49         u32     base_screen;
50         u32     base_key;
51         u32     start_cp;
52         u32     vcmp;
53         u32     sensor1;
54         u32     sensor2;
55         u32     sensor3;
56 };
57 struct CMCS_CH_INFO {
58         u8      tx_num;
59         u8      rx_num;
60         u8      key_rx;
61         u8      key1;
62         u8      key2;
63         u8      key3;
64         u8      key4;
65         u8      key5;
66 };
67 struct CMCS_SLOPE_INFO {
68         s16     x_min;
69         s16     x_max;
70         s16     y_min;
71         s16     y_max;
72         s16     key_min;
73         s16     key_max;
74 };
75 struct CMCS_SPEC_INFO {
76         u16     screen_min;
77         u16     screen_max;
78         u16     key_min;
79         u16     key_max;
80 };
81 struct CMCS_CMD {
82         u16     mode;   // enable bit
83         u16     cmcs_size;
84         u16     base_screen;
85         u16     base_key;
86         u8      start_cp_cm;
87         u8      start_cp_cs;
88         u8      vcmp_cm;
89         u8      vcmp_cs;
90         u32     reserved; // for checksum of firmware
91 };
92 typedef struct _CMCS_INFO {
93         u32                     timeout;
94         struct CMCS_ADDR_INFO   addr;
95         struct CMCS_CH_INFO     ch;
96         struct CMCS_SPEC_INFO   spec_cr;
97         struct CMCS_SPEC_INFO   spec_cm;
98         struct CMCS_SPEC_INFO   spec_cs0;
99         struct CMCS_SPEC_INFO   spec_cs1;
100         struct CMCS_SLOPE_INFO  slope;
101         u16                     sensor1_size;
102         u16                     sensor2_size;
103         u16                     sensor3_size;
104         u16                     reserved;
105         u32                     cmcs_chksum;
106         u32                     sensor_chksum;
107         struct CMCS_CMD         cmd;
108 } CMCS_INFO;
109
110 typedef struct _CMCS_BIN_INFO {
111         char            magic1[8];
112         CMCS_INFO       cmcs;
113         u8 *            buf_cmcs;
114         u32 *           buf_sensor;
115         u16 *           buf_node;
116         char            magic2[8];
117 } CMCS_BIN_INFO;
118
119 typedef struct _CMCS_BUF {
120         s16     cm[IST30XX_CMCS_BUF_SIZE];
121         s16     spec[IST30XX_CMCS_BUF_SIZE];
122         s16     slope0[IST30XX_CMCS_BUF_SIZE];
123         s16     slope1[IST30XX_CMCS_BUF_SIZE];
124         s16     cs0[IST30XX_CMCS_BUF_SIZE];
125         s16     cs1[IST30XX_CMCS_BUF_SIZE];
126 } CMCS_BUF;
127
128
129 int ist30xx_init_cmcs_sysfs(void);
130
131 #endif  // __IST30XX_CMCS_H__