Commit c6d81bd7237b5785080087bcf796ce456ef69557
Committed by
Dmitry Torokhov
1 parent
e4a42f655f
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
Input: add driver for Neonode zForce based touchscreens
This adds a driver for touchscreens using the zforce infrared technology from Neonode connected via i2c to the host system. It supports multitouch with up to two fingers and tracking of the contacts in hardware. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Showing 4 changed files with 876 additions and 0 deletions Inline Diff
drivers/input/touchscreen/Kconfig
1 | # | 1 | # |
2 | # Touchscreen driver configuration | 2 | # Touchscreen driver configuration |
3 | # | 3 | # |
4 | menuconfig INPUT_TOUCHSCREEN | 4 | menuconfig INPUT_TOUCHSCREEN |
5 | bool "Touchscreens" | 5 | bool "Touchscreens" |
6 | help | 6 | help |
7 | Say Y here, and a list of supported touchscreens will be displayed. | 7 | Say Y here, and a list of supported touchscreens will be displayed. |
8 | This option doesn't affect the kernel. | 8 | This option doesn't affect the kernel. |
9 | 9 | ||
10 | If unsure, say Y. | 10 | If unsure, say Y. |
11 | 11 | ||
12 | if INPUT_TOUCHSCREEN | 12 | if INPUT_TOUCHSCREEN |
13 | 13 | ||
14 | config TOUCHSCREEN_88PM860X | 14 | config TOUCHSCREEN_88PM860X |
15 | tristate "Marvell 88PM860x touchscreen" | 15 | tristate "Marvell 88PM860x touchscreen" |
16 | depends on MFD_88PM860X | 16 | depends on MFD_88PM860X |
17 | help | 17 | help |
18 | Say Y here if you have a 88PM860x PMIC and want to enable | 18 | Say Y here if you have a 88PM860x PMIC and want to enable |
19 | support for the built-in touchscreen. | 19 | support for the built-in touchscreen. |
20 | 20 | ||
21 | If unsure, say N. | 21 | If unsure, say N. |
22 | 22 | ||
23 | To compile this driver as a module, choose M here: the | 23 | To compile this driver as a module, choose M here: the |
24 | module will be called 88pm860x-ts. | 24 | module will be called 88pm860x-ts. |
25 | 25 | ||
26 | config TOUCHSCREEN_ADS7846 | 26 | config TOUCHSCREEN_ADS7846 |
27 | tristate "ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens" | 27 | tristate "ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens" |
28 | depends on SPI_MASTER | 28 | depends on SPI_MASTER |
29 | depends on HWMON = n || HWMON | 29 | depends on HWMON = n || HWMON |
30 | help | 30 | help |
31 | Say Y here if you have a touchscreen interface using the | 31 | Say Y here if you have a touchscreen interface using the |
32 | ADS7846/TSC2046/AD7873 or ADS7843/AD7843 controller, | 32 | ADS7846/TSC2046/AD7873 or ADS7843/AD7843 controller, |
33 | and your board-specific setup code includes that in its | 33 | and your board-specific setup code includes that in its |
34 | table of SPI devices. | 34 | table of SPI devices. |
35 | 35 | ||
36 | If HWMON is selected, and the driver is told the reference voltage | 36 | If HWMON is selected, and the driver is told the reference voltage |
37 | on your board, you will also get hwmon interfaces for the voltage | 37 | on your board, you will also get hwmon interfaces for the voltage |
38 | (and on ads7846/tsc2046/ad7873, temperature) sensors of this chip. | 38 | (and on ads7846/tsc2046/ad7873, temperature) sensors of this chip. |
39 | 39 | ||
40 | If unsure, say N (but it's safe to say "Y"). | 40 | If unsure, say N (but it's safe to say "Y"). |
41 | 41 | ||
42 | To compile this driver as a module, choose M here: the | 42 | To compile this driver as a module, choose M here: the |
43 | module will be called ads7846. | 43 | module will be called ads7846. |
44 | 44 | ||
45 | config TOUCHSCREEN_AD7877 | 45 | config TOUCHSCREEN_AD7877 |
46 | tristate "AD7877 based touchscreens" | 46 | tristate "AD7877 based touchscreens" |
47 | depends on SPI_MASTER | 47 | depends on SPI_MASTER |
48 | help | 48 | help |
49 | Say Y here if you have a touchscreen interface using the | 49 | Say Y here if you have a touchscreen interface using the |
50 | AD7877 controller, and your board-specific initialization | 50 | AD7877 controller, and your board-specific initialization |
51 | code includes that in its table of SPI devices. | 51 | code includes that in its table of SPI devices. |
52 | 52 | ||
53 | If unsure, say N (but it's safe to say "Y"). | 53 | If unsure, say N (but it's safe to say "Y"). |
54 | 54 | ||
55 | To compile this driver as a module, choose M here: the | 55 | To compile this driver as a module, choose M here: the |
56 | module will be called ad7877. | 56 | module will be called ad7877. |
57 | 57 | ||
58 | config TOUCHSCREEN_AD7879 | 58 | config TOUCHSCREEN_AD7879 |
59 | tristate "Analog Devices AD7879-1/AD7889-1 touchscreen interface" | 59 | tristate "Analog Devices AD7879-1/AD7889-1 touchscreen interface" |
60 | help | 60 | help |
61 | Say Y here if you want to support a touchscreen interface using | 61 | Say Y here if you want to support a touchscreen interface using |
62 | the AD7879-1/AD7889-1 controller. | 62 | the AD7879-1/AD7889-1 controller. |
63 | 63 | ||
64 | You should select a bus connection too. | 64 | You should select a bus connection too. |
65 | 65 | ||
66 | To compile this driver as a module, choose M here: the | 66 | To compile this driver as a module, choose M here: the |
67 | module will be called ad7879. | 67 | module will be called ad7879. |
68 | 68 | ||
69 | config TOUCHSCREEN_AD7879_I2C | 69 | config TOUCHSCREEN_AD7879_I2C |
70 | tristate "support I2C bus connection" | 70 | tristate "support I2C bus connection" |
71 | depends on TOUCHSCREEN_AD7879 && I2C | 71 | depends on TOUCHSCREEN_AD7879 && I2C |
72 | help | 72 | help |
73 | Say Y here if you have AD7879-1/AD7889-1 hooked to an I2C bus. | 73 | Say Y here if you have AD7879-1/AD7889-1 hooked to an I2C bus. |
74 | 74 | ||
75 | To compile this driver as a module, choose M here: the | 75 | To compile this driver as a module, choose M here: the |
76 | module will be called ad7879-i2c. | 76 | module will be called ad7879-i2c. |
77 | 77 | ||
78 | config TOUCHSCREEN_AD7879_SPI | 78 | config TOUCHSCREEN_AD7879_SPI |
79 | tristate "support SPI bus connection" | 79 | tristate "support SPI bus connection" |
80 | depends on TOUCHSCREEN_AD7879 && SPI_MASTER | 80 | depends on TOUCHSCREEN_AD7879 && SPI_MASTER |
81 | help | 81 | help |
82 | Say Y here if you have AD7879-1/AD7889-1 hooked to a SPI bus. | 82 | Say Y here if you have AD7879-1/AD7889-1 hooked to a SPI bus. |
83 | 83 | ||
84 | If unsure, say N (but it's safe to say "Y"). | 84 | If unsure, say N (but it's safe to say "Y"). |
85 | 85 | ||
86 | To compile this driver as a module, choose M here: the | 86 | To compile this driver as a module, choose M here: the |
87 | module will be called ad7879-spi. | 87 | module will be called ad7879-spi. |
88 | 88 | ||
89 | config TOUCHSCREEN_ATMEL_MXT | 89 | config TOUCHSCREEN_ATMEL_MXT |
90 | tristate "Atmel mXT I2C Touchscreen" | 90 | tristate "Atmel mXT I2C Touchscreen" |
91 | depends on I2C | 91 | depends on I2C |
92 | help | 92 | help |
93 | Say Y here if you have Atmel mXT series I2C touchscreen, | 93 | Say Y here if you have Atmel mXT series I2C touchscreen, |
94 | such as AT42QT602240/ATMXT224, connected to your system. | 94 | such as AT42QT602240/ATMXT224, connected to your system. |
95 | 95 | ||
96 | If unsure, say N. | 96 | If unsure, say N. |
97 | 97 | ||
98 | To compile this driver as a module, choose M here: the | 98 | To compile this driver as a module, choose M here: the |
99 | module will be called atmel_mxt_ts. | 99 | module will be called atmel_mxt_ts. |
100 | 100 | ||
101 | config TOUCHSCREEN_AUO_PIXCIR | 101 | config TOUCHSCREEN_AUO_PIXCIR |
102 | tristate "AUO in-cell touchscreen using Pixcir ICs" | 102 | tristate "AUO in-cell touchscreen using Pixcir ICs" |
103 | depends on I2C | 103 | depends on I2C |
104 | depends on GPIOLIB | 104 | depends on GPIOLIB |
105 | help | 105 | help |
106 | Say Y here if you have a AUO display with in-cell touchscreen | 106 | Say Y here if you have a AUO display with in-cell touchscreen |
107 | using Pixcir ICs. | 107 | using Pixcir ICs. |
108 | 108 | ||
109 | If unsure, say N. | 109 | If unsure, say N. |
110 | 110 | ||
111 | To compile this driver as a module, choose M here: the | 111 | To compile this driver as a module, choose M here: the |
112 | module will be called auo-pixcir-ts. | 112 | module will be called auo-pixcir-ts. |
113 | 113 | ||
114 | config TOUCHSCREEN_BU21013 | 114 | config TOUCHSCREEN_BU21013 |
115 | tristate "BU21013 based touch panel controllers" | 115 | tristate "BU21013 based touch panel controllers" |
116 | depends on I2C | 116 | depends on I2C |
117 | help | 117 | help |
118 | Say Y here if you have a bu21013 touchscreen connected to | 118 | Say Y here if you have a bu21013 touchscreen connected to |
119 | your system. | 119 | your system. |
120 | 120 | ||
121 | If unsure, say N. | 121 | If unsure, say N. |
122 | 122 | ||
123 | To compile this driver as a module, choose M here: the | 123 | To compile this driver as a module, choose M here: the |
124 | module will be called bu21013_ts. | 124 | module will be called bu21013_ts. |
125 | 125 | ||
126 | config TOUCHSCREEN_CY8CTMG110 | 126 | config TOUCHSCREEN_CY8CTMG110 |
127 | tristate "cy8ctmg110 touchscreen" | 127 | tristate "cy8ctmg110 touchscreen" |
128 | depends on I2C | 128 | depends on I2C |
129 | depends on GPIOLIB | 129 | depends on GPIOLIB |
130 | help | 130 | help |
131 | Say Y here if you have a cy8ctmg110 capacitive touchscreen on | 131 | Say Y here if you have a cy8ctmg110 capacitive touchscreen on |
132 | an AAVA device. | 132 | an AAVA device. |
133 | 133 | ||
134 | If unsure, say N. | 134 | If unsure, say N. |
135 | 135 | ||
136 | To compile this driver as a module, choose M here: the | 136 | To compile this driver as a module, choose M here: the |
137 | module will be called cy8ctmg110_ts. | 137 | module will be called cy8ctmg110_ts. |
138 | 138 | ||
139 | config TOUCHSCREEN_CYTTSP_CORE | 139 | config TOUCHSCREEN_CYTTSP_CORE |
140 | tristate "Cypress TTSP touchscreen" | 140 | tristate "Cypress TTSP touchscreen" |
141 | help | 141 | help |
142 | Say Y here if you have a touchscreen using controller from | 142 | Say Y here if you have a touchscreen using controller from |
143 | the Cypress TrueTouch(tm) Standard Product family connected | 143 | the Cypress TrueTouch(tm) Standard Product family connected |
144 | to your system. You will also need to select appropriate | 144 | to your system. You will also need to select appropriate |
145 | bus connection below. | 145 | bus connection below. |
146 | 146 | ||
147 | If unsure, say N. | 147 | If unsure, say N. |
148 | 148 | ||
149 | To compile this driver as a module, choose M here: the | 149 | To compile this driver as a module, choose M here: the |
150 | module will be called cyttsp_core. | 150 | module will be called cyttsp_core. |
151 | 151 | ||
152 | config TOUCHSCREEN_CYTTSP_I2C | 152 | config TOUCHSCREEN_CYTTSP_I2C |
153 | tristate "support I2C bus connection" | 153 | tristate "support I2C bus connection" |
154 | depends on TOUCHSCREEN_CYTTSP_CORE && I2C | 154 | depends on TOUCHSCREEN_CYTTSP_CORE && I2C |
155 | help | 155 | help |
156 | Say Y here if the touchscreen is connected via I2C bus. | 156 | Say Y here if the touchscreen is connected via I2C bus. |
157 | 157 | ||
158 | To compile this driver as a module, choose M here: the | 158 | To compile this driver as a module, choose M here: the |
159 | module will be called cyttsp_i2c. | 159 | module will be called cyttsp_i2c. |
160 | 160 | ||
161 | config TOUCHSCREEN_CYTTSP_SPI | 161 | config TOUCHSCREEN_CYTTSP_SPI |
162 | tristate "support SPI bus connection" | 162 | tristate "support SPI bus connection" |
163 | depends on TOUCHSCREEN_CYTTSP_CORE && SPI_MASTER | 163 | depends on TOUCHSCREEN_CYTTSP_CORE && SPI_MASTER |
164 | help | 164 | help |
165 | Say Y here if the touchscreen is connected via SPI bus. | 165 | Say Y here if the touchscreen is connected via SPI bus. |
166 | 166 | ||
167 | To compile this driver as a module, choose M here: the | 167 | To compile this driver as a module, choose M here: the |
168 | module will be called cyttsp_spi. | 168 | module will be called cyttsp_spi. |
169 | 169 | ||
170 | config TOUCHSCREEN_CYTTSP4_CORE | 170 | config TOUCHSCREEN_CYTTSP4_CORE |
171 | tristate "Cypress TrueTouch Gen4 Touchscreen Driver" | 171 | tristate "Cypress TrueTouch Gen4 Touchscreen Driver" |
172 | help | 172 | help |
173 | Core driver for Cypress TrueTouch(tm) Standard Product | 173 | Core driver for Cypress TrueTouch(tm) Standard Product |
174 | Generation4 touchscreen controllers. | 174 | Generation4 touchscreen controllers. |
175 | 175 | ||
176 | Say Y here if you have a Cypress Gen4 touchscreen. | 176 | Say Y here if you have a Cypress Gen4 touchscreen. |
177 | 177 | ||
178 | If unsure, say N. | 178 | If unsure, say N. |
179 | 179 | ||
180 | To compile this driver as a module, choose M here. | 180 | To compile this driver as a module, choose M here. |
181 | 181 | ||
182 | config TOUCHSCREEN_CYTTSP4_I2C | 182 | config TOUCHSCREEN_CYTTSP4_I2C |
183 | tristate "support I2C bus connection" | 183 | tristate "support I2C bus connection" |
184 | depends on TOUCHSCREEN_CYTTSP4_CORE && I2C | 184 | depends on TOUCHSCREEN_CYTTSP4_CORE && I2C |
185 | help | 185 | help |
186 | Say Y here if the touchscreen is connected via I2C bus. | 186 | Say Y here if the touchscreen is connected via I2C bus. |
187 | 187 | ||
188 | To compile this driver as a module, choose M here: the | 188 | To compile this driver as a module, choose M here: the |
189 | module will be called cyttsp4_i2c. | 189 | module will be called cyttsp4_i2c. |
190 | 190 | ||
191 | config TOUCHSCREEN_CYTTSP4_SPI | 191 | config TOUCHSCREEN_CYTTSP4_SPI |
192 | tristate "support SPI bus connection" | 192 | tristate "support SPI bus connection" |
193 | depends on TOUCHSCREEN_CYTTSP4_CORE && SPI_MASTER | 193 | depends on TOUCHSCREEN_CYTTSP4_CORE && SPI_MASTER |
194 | help | 194 | help |
195 | Say Y here if the touchscreen is connected via SPI bus. | 195 | Say Y here if the touchscreen is connected via SPI bus. |
196 | 196 | ||
197 | To compile this driver as a module, choose M here: the | 197 | To compile this driver as a module, choose M here: the |
198 | module will be called cyttsp4_spi. | 198 | module will be called cyttsp4_spi. |
199 | 199 | ||
200 | config TOUCHSCREEN_DA9034 | 200 | config TOUCHSCREEN_DA9034 |
201 | tristate "Touchscreen support for Dialog Semiconductor DA9034" | 201 | tristate "Touchscreen support for Dialog Semiconductor DA9034" |
202 | depends on PMIC_DA903X | 202 | depends on PMIC_DA903X |
203 | default y | 203 | default y |
204 | help | 204 | help |
205 | Say Y here to enable the support for the touchscreen found | 205 | Say Y here to enable the support for the touchscreen found |
206 | on Dialog Semiconductor DA9034 PMIC. | 206 | on Dialog Semiconductor DA9034 PMIC. |
207 | 207 | ||
208 | If unsure, say N. | 208 | If unsure, say N. |
209 | 209 | ||
210 | To compile this driver as a module, choose M here: the | 210 | To compile this driver as a module, choose M here: the |
211 | module will be called da9034-ts. | 211 | module will be called da9034-ts. |
212 | 212 | ||
213 | config TOUCHSCREEN_DA9052 | 213 | config TOUCHSCREEN_DA9052 |
214 | tristate "Dialog DA9052/DA9053 TSI" | 214 | tristate "Dialog DA9052/DA9053 TSI" |
215 | depends on PMIC_DA9052 | 215 | depends on PMIC_DA9052 |
216 | help | 216 | help |
217 | Say Y here to support the touchscreen found on Dialog Semiconductor | 217 | Say Y here to support the touchscreen found on Dialog Semiconductor |
218 | DA9052-BC and DA9053-AA/Bx PMICs. | 218 | DA9052-BC and DA9053-AA/Bx PMICs. |
219 | 219 | ||
220 | If unsure, say N. | 220 | If unsure, say N. |
221 | 221 | ||
222 | To compile this driver as a module, choose M here: the | 222 | To compile this driver as a module, choose M here: the |
223 | module will be called da9052_tsi. | 223 | module will be called da9052_tsi. |
224 | 224 | ||
225 | config TOUCHSCREEN_DYNAPRO | 225 | config TOUCHSCREEN_DYNAPRO |
226 | tristate "Dynapro serial touchscreen" | 226 | tristate "Dynapro serial touchscreen" |
227 | select SERIO | 227 | select SERIO |
228 | help | 228 | help |
229 | Say Y here if you have a Dynapro serial touchscreen connected to | 229 | Say Y here if you have a Dynapro serial touchscreen connected to |
230 | your system. | 230 | your system. |
231 | 231 | ||
232 | If unsure, say N. | 232 | If unsure, say N. |
233 | 233 | ||
234 | To compile this driver as a module, choose M here: the | 234 | To compile this driver as a module, choose M here: the |
235 | module will be called dynapro. | 235 | module will be called dynapro. |
236 | 236 | ||
237 | config TOUCHSCREEN_HAMPSHIRE | 237 | config TOUCHSCREEN_HAMPSHIRE |
238 | tristate "Hampshire serial touchscreen" | 238 | tristate "Hampshire serial touchscreen" |
239 | select SERIO | 239 | select SERIO |
240 | help | 240 | help |
241 | Say Y here if you have a Hampshire serial touchscreen connected to | 241 | Say Y here if you have a Hampshire serial touchscreen connected to |
242 | your system. | 242 | your system. |
243 | 243 | ||
244 | If unsure, say N. | 244 | If unsure, say N. |
245 | 245 | ||
246 | To compile this driver as a module, choose M here: the | 246 | To compile this driver as a module, choose M here: the |
247 | module will be called hampshire. | 247 | module will be called hampshire. |
248 | 248 | ||
249 | config TOUCHSCREEN_EETI | 249 | config TOUCHSCREEN_EETI |
250 | tristate "EETI touchscreen panel support" | 250 | tristate "EETI touchscreen panel support" |
251 | depends on I2C | 251 | depends on I2C |
252 | help | 252 | help |
253 | Say Y here to enable support for I2C connected EETI touch panels. | 253 | Say Y here to enable support for I2C connected EETI touch panels. |
254 | 254 | ||
255 | To compile this driver as a module, choose M here: the | 255 | To compile this driver as a module, choose M here: the |
256 | module will be called eeti_ts. | 256 | module will be called eeti_ts. |
257 | 257 | ||
258 | config TOUCHSCREEN_EGALAX | 258 | config TOUCHSCREEN_EGALAX |
259 | tristate "EETI eGalax multi-touch panel support" | 259 | tristate "EETI eGalax multi-touch panel support" |
260 | depends on I2C && OF | 260 | depends on I2C && OF |
261 | help | 261 | help |
262 | Say Y here to enable support for I2C connected EETI | 262 | Say Y here to enable support for I2C connected EETI |
263 | eGalax multi-touch panels. | 263 | eGalax multi-touch panels. |
264 | 264 | ||
265 | To compile this driver as a module, choose M here: the | 265 | To compile this driver as a module, choose M here: the |
266 | module will be called egalax_ts. | 266 | module will be called egalax_ts. |
267 | 267 | ||
268 | config TOUCHSCREEN_FUJITSU | 268 | config TOUCHSCREEN_FUJITSU |
269 | tristate "Fujitsu serial touchscreen" | 269 | tristate "Fujitsu serial touchscreen" |
270 | select SERIO | 270 | select SERIO |
271 | help | 271 | help |
272 | Say Y here if you have the Fujitsu touchscreen (such as one | 272 | Say Y here if you have the Fujitsu touchscreen (such as one |
273 | installed in Lifebook P series laptop) connected to your | 273 | installed in Lifebook P series laptop) connected to your |
274 | system. | 274 | system. |
275 | 275 | ||
276 | If unsure, say N. | 276 | If unsure, say N. |
277 | 277 | ||
278 | To compile this driver as a module, choose M here: the | 278 | To compile this driver as a module, choose M here: the |
279 | module will be called fujitsu-ts. | 279 | module will be called fujitsu-ts. |
280 | 280 | ||
281 | config TOUCHSCREEN_ILI210X | 281 | config TOUCHSCREEN_ILI210X |
282 | tristate "Ilitek ILI210X based touchscreen" | 282 | tristate "Ilitek ILI210X based touchscreen" |
283 | depends on I2C | 283 | depends on I2C |
284 | help | 284 | help |
285 | Say Y here if you have a ILI210X based touchscreen | 285 | Say Y here if you have a ILI210X based touchscreen |
286 | controller. This driver supports models ILI2102, | 286 | controller. This driver supports models ILI2102, |
287 | ILI2102s, ILI2103, ILI2103s and ILI2105. | 287 | ILI2102s, ILI2103, ILI2103s and ILI2105. |
288 | Such kind of chipsets can be found in Amazon Kindle Fire | 288 | Such kind of chipsets can be found in Amazon Kindle Fire |
289 | touchscreens. | 289 | touchscreens. |
290 | 290 | ||
291 | If unsure, say N. | 291 | If unsure, say N. |
292 | 292 | ||
293 | To compile this driver as a module, choose M here: the | 293 | To compile this driver as a module, choose M here: the |
294 | module will be called ili210x. | 294 | module will be called ili210x. |
295 | 295 | ||
296 | config TOUCHSCREEN_S3C2410 | 296 | config TOUCHSCREEN_S3C2410 |
297 | tristate "Samsung S3C2410/generic touchscreen input driver" | 297 | tristate "Samsung S3C2410/generic touchscreen input driver" |
298 | depends on ARCH_S3C24XX || SAMSUNG_DEV_TS | 298 | depends on ARCH_S3C24XX || SAMSUNG_DEV_TS |
299 | select S3C_ADC | 299 | select S3C_ADC |
300 | help | 300 | help |
301 | Say Y here if you have the s3c2410 touchscreen. | 301 | Say Y here if you have the s3c2410 touchscreen. |
302 | 302 | ||
303 | If unsure, say N. | 303 | If unsure, say N. |
304 | 304 | ||
305 | To compile this driver as a module, choose M here: the | 305 | To compile this driver as a module, choose M here: the |
306 | module will be called s3c2410_ts. | 306 | module will be called s3c2410_ts. |
307 | 307 | ||
308 | config TOUCHSCREEN_GUNZE | 308 | config TOUCHSCREEN_GUNZE |
309 | tristate "Gunze AHL-51S touchscreen" | 309 | tristate "Gunze AHL-51S touchscreen" |
310 | select SERIO | 310 | select SERIO |
311 | help | 311 | help |
312 | Say Y here if you have the Gunze AHL-51 touchscreen connected to | 312 | Say Y here if you have the Gunze AHL-51 touchscreen connected to |
313 | your system. | 313 | your system. |
314 | 314 | ||
315 | If unsure, say N. | 315 | If unsure, say N. |
316 | 316 | ||
317 | To compile this driver as a module, choose M here: the | 317 | To compile this driver as a module, choose M here: the |
318 | module will be called gunze. | 318 | module will be called gunze. |
319 | 319 | ||
320 | config TOUCHSCREEN_ELO | 320 | config TOUCHSCREEN_ELO |
321 | tristate "Elo serial touchscreens" | 321 | tristate "Elo serial touchscreens" |
322 | select SERIO | 322 | select SERIO |
323 | help | 323 | help |
324 | Say Y here if you have an Elo serial touchscreen connected to | 324 | Say Y here if you have an Elo serial touchscreen connected to |
325 | your system. | 325 | your system. |
326 | 326 | ||
327 | If unsure, say N. | 327 | If unsure, say N. |
328 | 328 | ||
329 | To compile this driver as a module, choose M here: the | 329 | To compile this driver as a module, choose M here: the |
330 | module will be called elo. | 330 | module will be called elo. |
331 | 331 | ||
332 | config TOUCHSCREEN_WACOM_W8001 | 332 | config TOUCHSCREEN_WACOM_W8001 |
333 | tristate "Wacom W8001 penabled serial touchscreen" | 333 | tristate "Wacom W8001 penabled serial touchscreen" |
334 | select SERIO | 334 | select SERIO |
335 | help | 335 | help |
336 | Say Y here if you have an Wacom W8001 penabled serial touchscreen | 336 | Say Y here if you have an Wacom W8001 penabled serial touchscreen |
337 | connected to your system. | 337 | connected to your system. |
338 | 338 | ||
339 | If unsure, say N. | 339 | If unsure, say N. |
340 | 340 | ||
341 | To compile this driver as a module, choose M here: the | 341 | To compile this driver as a module, choose M here: the |
342 | module will be called wacom_w8001. | 342 | module will be called wacom_w8001. |
343 | 343 | ||
344 | config TOUCHSCREEN_WACOM_I2C | 344 | config TOUCHSCREEN_WACOM_I2C |
345 | tristate "Wacom Tablet support (I2C)" | 345 | tristate "Wacom Tablet support (I2C)" |
346 | depends on I2C | 346 | depends on I2C |
347 | help | 347 | help |
348 | Say Y here if you want to use the I2C version of the Wacom | 348 | Say Y here if you want to use the I2C version of the Wacom |
349 | Pen Tablet. | 349 | Pen Tablet. |
350 | 350 | ||
351 | If unsure, say N. | 351 | If unsure, say N. |
352 | 352 | ||
353 | To compile this driver as a module, choose M here: the module | 353 | To compile this driver as a module, choose M here: the module |
354 | will be called wacom_i2c. | 354 | will be called wacom_i2c. |
355 | 355 | ||
356 | config TOUCHSCREEN_LPC32XX | 356 | config TOUCHSCREEN_LPC32XX |
357 | tristate "LPC32XX touchscreen controller" | 357 | tristate "LPC32XX touchscreen controller" |
358 | depends on ARCH_LPC32XX | 358 | depends on ARCH_LPC32XX |
359 | help | 359 | help |
360 | Say Y here if you have a LPC32XX device and want | 360 | Say Y here if you have a LPC32XX device and want |
361 | to support the built-in touchscreen. | 361 | to support the built-in touchscreen. |
362 | 362 | ||
363 | To compile this driver as a module, choose M here: the | 363 | To compile this driver as a module, choose M here: the |
364 | module will be called lpc32xx_ts. | 364 | module will be called lpc32xx_ts. |
365 | 365 | ||
366 | config TOUCHSCREEN_MAX11801 | 366 | config TOUCHSCREEN_MAX11801 |
367 | tristate "MAX11801 based touchscreens" | 367 | tristate "MAX11801 based touchscreens" |
368 | depends on I2C | 368 | depends on I2C |
369 | help | 369 | help |
370 | Say Y here if you have a MAX11801 based touchscreen | 370 | Say Y here if you have a MAX11801 based touchscreen |
371 | controller. | 371 | controller. |
372 | 372 | ||
373 | If unsure, say N. | 373 | If unsure, say N. |
374 | 374 | ||
375 | To compile this driver as a module, choose M here: the | 375 | To compile this driver as a module, choose M here: the |
376 | module will be called max11801_ts. | 376 | module will be called max11801_ts. |
377 | 377 | ||
378 | config TOUCHSCREEN_MCS5000 | 378 | config TOUCHSCREEN_MCS5000 |
379 | tristate "MELFAS MCS-5000 touchscreen" | 379 | tristate "MELFAS MCS-5000 touchscreen" |
380 | depends on I2C | 380 | depends on I2C |
381 | help | 381 | help |
382 | Say Y here if you have the MELFAS MCS-5000 touchscreen controller | 382 | Say Y here if you have the MELFAS MCS-5000 touchscreen controller |
383 | chip in your system. | 383 | chip in your system. |
384 | 384 | ||
385 | If unsure, say N. | 385 | If unsure, say N. |
386 | 386 | ||
387 | To compile this driver as a module, choose M here: the | 387 | To compile this driver as a module, choose M here: the |
388 | module will be called mcs5000_ts. | 388 | module will be called mcs5000_ts. |
389 | 389 | ||
390 | config TOUCHSCREEN_MMS114 | 390 | config TOUCHSCREEN_MMS114 |
391 | tristate "MELFAS MMS114 touchscreen" | 391 | tristate "MELFAS MMS114 touchscreen" |
392 | depends on I2C | 392 | depends on I2C |
393 | help | 393 | help |
394 | Say Y here if you have the MELFAS MMS114 touchscreen controller | 394 | Say Y here if you have the MELFAS MMS114 touchscreen controller |
395 | chip in your system. | 395 | chip in your system. |
396 | 396 | ||
397 | If unsure, say N. | 397 | If unsure, say N. |
398 | 398 | ||
399 | To compile this driver as a module, choose M here: the | 399 | To compile this driver as a module, choose M here: the |
400 | module will be called mms114. | 400 | module will be called mms114. |
401 | 401 | ||
402 | config TOUCHSCREEN_MTOUCH | 402 | config TOUCHSCREEN_MTOUCH |
403 | tristate "MicroTouch serial touchscreens" | 403 | tristate "MicroTouch serial touchscreens" |
404 | select SERIO | 404 | select SERIO |
405 | help | 405 | help |
406 | Say Y here if you have a MicroTouch (3M) serial touchscreen connected to | 406 | Say Y here if you have a MicroTouch (3M) serial touchscreen connected to |
407 | your system. | 407 | your system. |
408 | 408 | ||
409 | If unsure, say N. | 409 | If unsure, say N. |
410 | 410 | ||
411 | To compile this driver as a module, choose M here: the | 411 | To compile this driver as a module, choose M here: the |
412 | module will be called mtouch. | 412 | module will be called mtouch. |
413 | 413 | ||
414 | config TOUCHSCREEN_INEXIO | 414 | config TOUCHSCREEN_INEXIO |
415 | tristate "iNexio serial touchscreens" | 415 | tristate "iNexio serial touchscreens" |
416 | select SERIO | 416 | select SERIO |
417 | help | 417 | help |
418 | Say Y here if you have an iNexio serial touchscreen connected to | 418 | Say Y here if you have an iNexio serial touchscreen connected to |
419 | your system. | 419 | your system. |
420 | 420 | ||
421 | If unsure, say N. | 421 | If unsure, say N. |
422 | 422 | ||
423 | To compile this driver as a module, choose M here: the | 423 | To compile this driver as a module, choose M here: the |
424 | module will be called inexio. | 424 | module will be called inexio. |
425 | 425 | ||
426 | config TOUCHSCREEN_INTEL_MID | 426 | config TOUCHSCREEN_INTEL_MID |
427 | tristate "Intel MID platform resistive touchscreen" | 427 | tristate "Intel MID platform resistive touchscreen" |
428 | depends on INTEL_SCU_IPC | 428 | depends on INTEL_SCU_IPC |
429 | help | 429 | help |
430 | Say Y here if you have a Intel MID based touchscreen in | 430 | Say Y here if you have a Intel MID based touchscreen in |
431 | your system. | 431 | your system. |
432 | 432 | ||
433 | If unsure, say N. | 433 | If unsure, say N. |
434 | 434 | ||
435 | To compile this driver as a module, choose M here: the | 435 | To compile this driver as a module, choose M here: the |
436 | module will be called intel_mid_touch. | 436 | module will be called intel_mid_touch. |
437 | 437 | ||
438 | config TOUCHSCREEN_MK712 | 438 | config TOUCHSCREEN_MK712 |
439 | tristate "ICS MicroClock MK712 touchscreen" | 439 | tristate "ICS MicroClock MK712 touchscreen" |
440 | help | 440 | help |
441 | Say Y here if you have the ICS MicroClock MK712 touchscreen | 441 | Say Y here if you have the ICS MicroClock MK712 touchscreen |
442 | controller chip in your system. | 442 | controller chip in your system. |
443 | 443 | ||
444 | If unsure, say N. | 444 | If unsure, say N. |
445 | 445 | ||
446 | To compile this driver as a module, choose M here: the | 446 | To compile this driver as a module, choose M here: the |
447 | module will be called mk712. | 447 | module will be called mk712. |
448 | 448 | ||
449 | config TOUCHSCREEN_HP600 | 449 | config TOUCHSCREEN_HP600 |
450 | tristate "HP Jornada 6xx touchscreen" | 450 | tristate "HP Jornada 6xx touchscreen" |
451 | depends on SH_HP6XX && SH_ADC | 451 | depends on SH_HP6XX && SH_ADC |
452 | help | 452 | help |
453 | Say Y here if you have a HP Jornada 620/660/680/690 and want to | 453 | Say Y here if you have a HP Jornada 620/660/680/690 and want to |
454 | support the built-in touchscreen. | 454 | support the built-in touchscreen. |
455 | 455 | ||
456 | To compile this driver as a module, choose M here: the | 456 | To compile this driver as a module, choose M here: the |
457 | module will be called hp680_ts_input. | 457 | module will be called hp680_ts_input. |
458 | 458 | ||
459 | config TOUCHSCREEN_HP7XX | 459 | config TOUCHSCREEN_HP7XX |
460 | tristate "HP Jornada 7xx touchscreen" | 460 | tristate "HP Jornada 7xx touchscreen" |
461 | depends on SA1100_JORNADA720_SSP | 461 | depends on SA1100_JORNADA720_SSP |
462 | help | 462 | help |
463 | Say Y here if you have a HP Jornada 710/720/728 and want | 463 | Say Y here if you have a HP Jornada 710/720/728 and want |
464 | to support the built-in touchscreen. | 464 | to support the built-in touchscreen. |
465 | 465 | ||
466 | To compile this driver as a module, choose M here: the | 466 | To compile this driver as a module, choose M here: the |
467 | module will be called jornada720_ts. | 467 | module will be called jornada720_ts. |
468 | 468 | ||
469 | config TOUCHSCREEN_HTCPEN | 469 | config TOUCHSCREEN_HTCPEN |
470 | tristate "HTC Shift X9500 touchscreen" | 470 | tristate "HTC Shift X9500 touchscreen" |
471 | depends on ISA | 471 | depends on ISA |
472 | help | 472 | help |
473 | Say Y here if you have an HTC Shift UMPC also known as HTC X9500 | 473 | Say Y here if you have an HTC Shift UMPC also known as HTC X9500 |
474 | Clio / Shangrila and want to support the built-in touchscreen. | 474 | Clio / Shangrila and want to support the built-in touchscreen. |
475 | 475 | ||
476 | If unsure, say N. | 476 | If unsure, say N. |
477 | 477 | ||
478 | To compile this driver as a module, choose M here: the | 478 | To compile this driver as a module, choose M here: the |
479 | module will be called htcpen. | 479 | module will be called htcpen. |
480 | 480 | ||
481 | config TOUCHSCREEN_PENMOUNT | 481 | config TOUCHSCREEN_PENMOUNT |
482 | tristate "Penmount serial touchscreen" | 482 | tristate "Penmount serial touchscreen" |
483 | select SERIO | 483 | select SERIO |
484 | help | 484 | help |
485 | Say Y here if you have a Penmount serial touchscreen connected to | 485 | Say Y here if you have a Penmount serial touchscreen connected to |
486 | your system. | 486 | your system. |
487 | 487 | ||
488 | If unsure, say N. | 488 | If unsure, say N. |
489 | 489 | ||
490 | To compile this driver as a module, choose M here: the | 490 | To compile this driver as a module, choose M here: the |
491 | module will be called penmount. | 491 | module will be called penmount. |
492 | 492 | ||
493 | config TOUCHSCREEN_EDT_FT5X06 | 493 | config TOUCHSCREEN_EDT_FT5X06 |
494 | tristate "EDT FocalTech FT5x06 I2C Touchscreen support" | 494 | tristate "EDT FocalTech FT5x06 I2C Touchscreen support" |
495 | depends on I2C | 495 | depends on I2C |
496 | help | 496 | help |
497 | Say Y here if you have an EDT "Polytouch" touchscreen based | 497 | Say Y here if you have an EDT "Polytouch" touchscreen based |
498 | on the FocalTech FT5x06 family of controllers connected to | 498 | on the FocalTech FT5x06 family of controllers connected to |
499 | your system. | 499 | your system. |
500 | 500 | ||
501 | If unsure, say N. | 501 | If unsure, say N. |
502 | 502 | ||
503 | To compile this driver as a module, choose M here: the | 503 | To compile this driver as a module, choose M here: the |
504 | module will be called edt-ft5x06. | 504 | module will be called edt-ft5x06. |
505 | 505 | ||
506 | config TOUCHSCREEN_MIGOR | 506 | config TOUCHSCREEN_MIGOR |
507 | tristate "Renesas MIGO-R touchscreen" | 507 | tristate "Renesas MIGO-R touchscreen" |
508 | depends on SH_MIGOR && I2C | 508 | depends on SH_MIGOR && I2C |
509 | help | 509 | help |
510 | Say Y here to enable MIGO-R touchscreen support. | 510 | Say Y here to enable MIGO-R touchscreen support. |
511 | 511 | ||
512 | If unsure, say N. | 512 | If unsure, say N. |
513 | 513 | ||
514 | To compile this driver as a module, choose M here: the | 514 | To compile this driver as a module, choose M here: the |
515 | module will be called migor_ts. | 515 | module will be called migor_ts. |
516 | 516 | ||
517 | config TOUCHSCREEN_TNETV107X | 517 | config TOUCHSCREEN_TNETV107X |
518 | tristate "TI TNETV107X touchscreen support" | 518 | tristate "TI TNETV107X touchscreen support" |
519 | depends on ARCH_DAVINCI_TNETV107X | 519 | depends on ARCH_DAVINCI_TNETV107X |
520 | help | 520 | help |
521 | Say Y here if you want to use the TNETV107X touchscreen. | 521 | Say Y here if you want to use the TNETV107X touchscreen. |
522 | 522 | ||
523 | To compile this driver as a module, choose M here: the | 523 | To compile this driver as a module, choose M here: the |
524 | module will be called tnetv107x-ts. | 524 | module will be called tnetv107x-ts. |
525 | 525 | ||
526 | config TOUCHSCREEN_TOUCHRIGHT | 526 | config TOUCHSCREEN_TOUCHRIGHT |
527 | tristate "Touchright serial touchscreen" | 527 | tristate "Touchright serial touchscreen" |
528 | select SERIO | 528 | select SERIO |
529 | help | 529 | help |
530 | Say Y here if you have a Touchright serial touchscreen connected to | 530 | Say Y here if you have a Touchright serial touchscreen connected to |
531 | your system. | 531 | your system. |
532 | 532 | ||
533 | If unsure, say N. | 533 | If unsure, say N. |
534 | 534 | ||
535 | To compile this driver as a module, choose M here: the | 535 | To compile this driver as a module, choose M here: the |
536 | module will be called touchright. | 536 | module will be called touchright. |
537 | 537 | ||
538 | config TOUCHSCREEN_TOUCHWIN | 538 | config TOUCHSCREEN_TOUCHWIN |
539 | tristate "Touchwin serial touchscreen" | 539 | tristate "Touchwin serial touchscreen" |
540 | select SERIO | 540 | select SERIO |
541 | help | 541 | help |
542 | Say Y here if you have a Touchwin serial touchscreen connected to | 542 | Say Y here if you have a Touchwin serial touchscreen connected to |
543 | your system. | 543 | your system. |
544 | 544 | ||
545 | If unsure, say N. | 545 | If unsure, say N. |
546 | 546 | ||
547 | To compile this driver as a module, choose M here: the | 547 | To compile this driver as a module, choose M here: the |
548 | module will be called touchwin. | 548 | module will be called touchwin. |
549 | 549 | ||
550 | config TOUCHSCREEN_TI_AM335X_TSC | 550 | config TOUCHSCREEN_TI_AM335X_TSC |
551 | tristate "TI Touchscreen Interface" | 551 | tristate "TI Touchscreen Interface" |
552 | depends on MFD_TI_AM335X_TSCADC | 552 | depends on MFD_TI_AM335X_TSCADC |
553 | help | 553 | help |
554 | Say Y here if you have 4/5/8 wire touchscreen controller | 554 | Say Y here if you have 4/5/8 wire touchscreen controller |
555 | to be connected to the ADC controller on your TI AM335x SoC. | 555 | to be connected to the ADC controller on your TI AM335x SoC. |
556 | 556 | ||
557 | If unsure, say N. | 557 | If unsure, say N. |
558 | 558 | ||
559 | To compile this driver as a module, choose M here: the | 559 | To compile this driver as a module, choose M here: the |
560 | module will be called ti_am335x_tsc. | 560 | module will be called ti_am335x_tsc. |
561 | 561 | ||
562 | config TOUCHSCREEN_ATMEL_TSADCC | 562 | config TOUCHSCREEN_ATMEL_TSADCC |
563 | tristate "Atmel Touchscreen Interface" | 563 | tristate "Atmel Touchscreen Interface" |
564 | depends on ARCH_AT91 | 564 | depends on ARCH_AT91 |
565 | help | 565 | help |
566 | Say Y here if you have a 4-wire touchscreen connected to the | 566 | Say Y here if you have a 4-wire touchscreen connected to the |
567 | ADC Controller on your Atmel SoC. | 567 | ADC Controller on your Atmel SoC. |
568 | 568 | ||
569 | If unsure, say N. | 569 | If unsure, say N. |
570 | 570 | ||
571 | To compile this driver as a module, choose M here: the | 571 | To compile this driver as a module, choose M here: the |
572 | module will be called atmel_tsadcc. | 572 | module will be called atmel_tsadcc. |
573 | 573 | ||
574 | config TOUCHSCREEN_UCB1400 | 574 | config TOUCHSCREEN_UCB1400 |
575 | tristate "Philips UCB1400 touchscreen" | 575 | tristate "Philips UCB1400 touchscreen" |
576 | depends on AC97_BUS | 576 | depends on AC97_BUS |
577 | depends on UCB1400_CORE | 577 | depends on UCB1400_CORE |
578 | help | 578 | help |
579 | This enables support for the Philips UCB1400 touchscreen interface. | 579 | This enables support for the Philips UCB1400 touchscreen interface. |
580 | The UCB1400 is an AC97 audio codec. The touchscreen interface | 580 | The UCB1400 is an AC97 audio codec. The touchscreen interface |
581 | will be initialized only after the ALSA subsystem has been | 581 | will be initialized only after the ALSA subsystem has been |
582 | brought up and the UCB1400 detected. You therefore have to | 582 | brought up and the UCB1400 detected. You therefore have to |
583 | configure ALSA support as well (either built-in or modular, | 583 | configure ALSA support as well (either built-in or modular, |
584 | independently of whether this driver is itself built-in or | 584 | independently of whether this driver is itself built-in or |
585 | modular) for this driver to work. | 585 | modular) for this driver to work. |
586 | 586 | ||
587 | To compile this driver as a module, choose M here: the | 587 | To compile this driver as a module, choose M here: the |
588 | module will be called ucb1400_ts. | 588 | module will be called ucb1400_ts. |
589 | 589 | ||
590 | config TOUCHSCREEN_PIXCIR | 590 | config TOUCHSCREEN_PIXCIR |
591 | tristate "PIXCIR I2C touchscreens" | 591 | tristate "PIXCIR I2C touchscreens" |
592 | depends on I2C | 592 | depends on I2C |
593 | help | 593 | help |
594 | Say Y here if you have a pixcir i2c touchscreen | 594 | Say Y here if you have a pixcir i2c touchscreen |
595 | controller. | 595 | controller. |
596 | 596 | ||
597 | If unsure, say N. | 597 | If unsure, say N. |
598 | 598 | ||
599 | To compile this driver as a module, choose M here: the | 599 | To compile this driver as a module, choose M here: the |
600 | module will be called pixcir_i2c_ts. | 600 | module will be called pixcir_i2c_ts. |
601 | 601 | ||
602 | config TOUCHSCREEN_WM831X | 602 | config TOUCHSCREEN_WM831X |
603 | tristate "Support for WM831x touchscreen controllers" | 603 | tristate "Support for WM831x touchscreen controllers" |
604 | depends on MFD_WM831X | 604 | depends on MFD_WM831X |
605 | help | 605 | help |
606 | This enables support for the touchscreen controller on the WM831x | 606 | This enables support for the touchscreen controller on the WM831x |
607 | series of PMICs. | 607 | series of PMICs. |
608 | 608 | ||
609 | To compile this driver as a module, choose M here: the | 609 | To compile this driver as a module, choose M here: the |
610 | module will be called wm831x-ts. | 610 | module will be called wm831x-ts. |
611 | 611 | ||
612 | config TOUCHSCREEN_WM97XX | 612 | config TOUCHSCREEN_WM97XX |
613 | tristate "Support for WM97xx AC97 touchscreen controllers" | 613 | tristate "Support for WM97xx AC97 touchscreen controllers" |
614 | depends on AC97_BUS | 614 | depends on AC97_BUS |
615 | help | 615 | help |
616 | Say Y here if you have a Wolfson Microelectronics WM97xx | 616 | Say Y here if you have a Wolfson Microelectronics WM97xx |
617 | touchscreen connected to your system. Note that this option | 617 | touchscreen connected to your system. Note that this option |
618 | only enables core driver, you will also need to select | 618 | only enables core driver, you will also need to select |
619 | support for appropriate chip below. | 619 | support for appropriate chip below. |
620 | 620 | ||
621 | If unsure, say N. | 621 | If unsure, say N. |
622 | 622 | ||
623 | To compile this driver as a module, choose M here: the | 623 | To compile this driver as a module, choose M here: the |
624 | module will be called wm97xx-ts. | 624 | module will be called wm97xx-ts. |
625 | 625 | ||
626 | config TOUCHSCREEN_WM9705 | 626 | config TOUCHSCREEN_WM9705 |
627 | bool "WM9705 Touchscreen interface support" | 627 | bool "WM9705 Touchscreen interface support" |
628 | depends on TOUCHSCREEN_WM97XX | 628 | depends on TOUCHSCREEN_WM97XX |
629 | default y | 629 | default y |
630 | help | 630 | help |
631 | Say Y here to enable support for the Wolfson Microelectronics | 631 | Say Y here to enable support for the Wolfson Microelectronics |
632 | WM9705 touchscreen controller. | 632 | WM9705 touchscreen controller. |
633 | 633 | ||
634 | config TOUCHSCREEN_WM9712 | 634 | config TOUCHSCREEN_WM9712 |
635 | bool "WM9712 Touchscreen interface support" | 635 | bool "WM9712 Touchscreen interface support" |
636 | depends on TOUCHSCREEN_WM97XX | 636 | depends on TOUCHSCREEN_WM97XX |
637 | default y | 637 | default y |
638 | help | 638 | help |
639 | Say Y here to enable support for the Wolfson Microelectronics | 639 | Say Y here to enable support for the Wolfson Microelectronics |
640 | WM9712 touchscreen controller. | 640 | WM9712 touchscreen controller. |
641 | 641 | ||
642 | config TOUCHSCREEN_WM9713 | 642 | config TOUCHSCREEN_WM9713 |
643 | bool "WM9713 Touchscreen interface support" | 643 | bool "WM9713 Touchscreen interface support" |
644 | depends on TOUCHSCREEN_WM97XX | 644 | depends on TOUCHSCREEN_WM97XX |
645 | default y | 645 | default y |
646 | help | 646 | help |
647 | Say Y here to enable support for the Wolfson Microelectronics | 647 | Say Y here to enable support for the Wolfson Microelectronics |
648 | WM9713 touchscreen controller. | 648 | WM9713 touchscreen controller. |
649 | 649 | ||
650 | config TOUCHSCREEN_WM97XX_ATMEL | 650 | config TOUCHSCREEN_WM97XX_ATMEL |
651 | tristate "WM97xx Atmel accelerated touch" | 651 | tristate "WM97xx Atmel accelerated touch" |
652 | depends on TOUCHSCREEN_WM97XX && (AVR32 || ARCH_AT91) | 652 | depends on TOUCHSCREEN_WM97XX && (AVR32 || ARCH_AT91) |
653 | help | 653 | help |
654 | Say Y here for support for streaming mode with WM97xx touchscreens | 654 | Say Y here for support for streaming mode with WM97xx touchscreens |
655 | on Atmel AT91 or AVR32 systems with an AC97C module. | 655 | on Atmel AT91 or AVR32 systems with an AC97C module. |
656 | 656 | ||
657 | Be aware that this will use channel B in the controller for | 657 | Be aware that this will use channel B in the controller for |
658 | streaming data, this must not conflict with other AC97C drivers. | 658 | streaming data, this must not conflict with other AC97C drivers. |
659 | 659 | ||
660 | If unsure, say N. | 660 | If unsure, say N. |
661 | 661 | ||
662 | To compile this driver as a module, choose M here: the module will | 662 | To compile this driver as a module, choose M here: the module will |
663 | be called atmel-wm97xx. | 663 | be called atmel-wm97xx. |
664 | 664 | ||
665 | config TOUCHSCREEN_WM97XX_MAINSTONE | 665 | config TOUCHSCREEN_WM97XX_MAINSTONE |
666 | tristate "WM97xx Mainstone/Palm accelerated touch" | 666 | tristate "WM97xx Mainstone/Palm accelerated touch" |
667 | depends on TOUCHSCREEN_WM97XX && ARCH_PXA | 667 | depends on TOUCHSCREEN_WM97XX && ARCH_PXA |
668 | help | 668 | help |
669 | Say Y here for support for streaming mode with WM97xx touchscreens | 669 | Say Y here for support for streaming mode with WM97xx touchscreens |
670 | on Mainstone, Palm Tungsten T5, TX and LifeDrive systems. | 670 | on Mainstone, Palm Tungsten T5, TX and LifeDrive systems. |
671 | 671 | ||
672 | If unsure, say N. | 672 | If unsure, say N. |
673 | 673 | ||
674 | To compile this driver as a module, choose M here: the | 674 | To compile this driver as a module, choose M here: the |
675 | module will be called mainstone-wm97xx. | 675 | module will be called mainstone-wm97xx. |
676 | 676 | ||
677 | config TOUCHSCREEN_WM97XX_ZYLONITE | 677 | config TOUCHSCREEN_WM97XX_ZYLONITE |
678 | tristate "Zylonite accelerated touch" | 678 | tristate "Zylonite accelerated touch" |
679 | depends on TOUCHSCREEN_WM97XX && MACH_ZYLONITE | 679 | depends on TOUCHSCREEN_WM97XX && MACH_ZYLONITE |
680 | select TOUCHSCREEN_WM9713 | 680 | select TOUCHSCREEN_WM9713 |
681 | help | 681 | help |
682 | Say Y here for support for streaming mode with the touchscreen | 682 | Say Y here for support for streaming mode with the touchscreen |
683 | on Zylonite systems. | 683 | on Zylonite systems. |
684 | 684 | ||
685 | If unsure, say N. | 685 | If unsure, say N. |
686 | 686 | ||
687 | To compile this driver as a module, choose M here: the | 687 | To compile this driver as a module, choose M here: the |
688 | module will be called zylonite-wm97xx. | 688 | module will be called zylonite-wm97xx. |
689 | 689 | ||
690 | config TOUCHSCREEN_USB_COMPOSITE | 690 | config TOUCHSCREEN_USB_COMPOSITE |
691 | tristate "USB Touchscreen Driver" | 691 | tristate "USB Touchscreen Driver" |
692 | depends on USB_ARCH_HAS_HCD | 692 | depends on USB_ARCH_HAS_HCD |
693 | select USB | 693 | select USB |
694 | help | 694 | help |
695 | USB Touchscreen driver for: | 695 | USB Touchscreen driver for: |
696 | - eGalax Touchkit USB (also includes eTurboTouch CT-410/510/700) | 696 | - eGalax Touchkit USB (also includes eTurboTouch CT-410/510/700) |
697 | - PanJit TouchSet USB | 697 | - PanJit TouchSet USB |
698 | - 3M MicroTouch USB (EX II series) | 698 | - 3M MicroTouch USB (EX II series) |
699 | - ITM | 699 | - ITM |
700 | - some other eTurboTouch | 700 | - some other eTurboTouch |
701 | - Gunze AHL61 | 701 | - Gunze AHL61 |
702 | - DMC TSC-10/25 | 702 | - DMC TSC-10/25 |
703 | - IRTOUCHSYSTEMS/UNITOP | 703 | - IRTOUCHSYSTEMS/UNITOP |
704 | - IdealTEK URTC1000 | 704 | - IdealTEK URTC1000 |
705 | - GoTop Super_Q2/GogoPen/PenPower tablets | 705 | - GoTop Super_Q2/GogoPen/PenPower tablets |
706 | - JASTEC USB Touch Controller/DigiTech DTR-02U | 706 | - JASTEC USB Touch Controller/DigiTech DTR-02U |
707 | - Zytronic controllers | 707 | - Zytronic controllers |
708 | - Elo TouchSystems 2700 IntelliTouch | 708 | - Elo TouchSystems 2700 IntelliTouch |
709 | - EasyTouch USB Touch Controller from Data Modul | 709 | - EasyTouch USB Touch Controller from Data Modul |
710 | - e2i (Mimo monitors) | 710 | - e2i (Mimo monitors) |
711 | 711 | ||
712 | Have a look at <http://linux.chapter7.ch/touchkit/> for | 712 | Have a look at <http://linux.chapter7.ch/touchkit/> for |
713 | a usage description and the required user-space stuff. | 713 | a usage description and the required user-space stuff. |
714 | 714 | ||
715 | To compile this driver as a module, choose M here: the | 715 | To compile this driver as a module, choose M here: the |
716 | module will be called usbtouchscreen. | 716 | module will be called usbtouchscreen. |
717 | 717 | ||
718 | config TOUCHSCREEN_MC13783 | 718 | config TOUCHSCREEN_MC13783 |
719 | tristate "Freescale MC13783 touchscreen input driver" | 719 | tristate "Freescale MC13783 touchscreen input driver" |
720 | depends on MFD_MC13783 | 720 | depends on MFD_MC13783 |
721 | help | 721 | help |
722 | Say Y here if you have an Freescale MC13783 PMIC on your | 722 | Say Y here if you have an Freescale MC13783 PMIC on your |
723 | board and want to use its touchscreen | 723 | board and want to use its touchscreen |
724 | 724 | ||
725 | If unsure, say N. | 725 | If unsure, say N. |
726 | 726 | ||
727 | To compile this driver as a module, choose M here: the | 727 | To compile this driver as a module, choose M here: the |
728 | module will be called mc13783_ts. | 728 | module will be called mc13783_ts. |
729 | 729 | ||
730 | config TOUCHSCREEN_USB_EGALAX | 730 | config TOUCHSCREEN_USB_EGALAX |
731 | default y | 731 | default y |
732 | bool "eGalax, eTurboTouch CT-410/510/700 device support" if EXPERT | 732 | bool "eGalax, eTurboTouch CT-410/510/700 device support" if EXPERT |
733 | depends on TOUCHSCREEN_USB_COMPOSITE | 733 | depends on TOUCHSCREEN_USB_COMPOSITE |
734 | 734 | ||
735 | config TOUCHSCREEN_USB_PANJIT | 735 | config TOUCHSCREEN_USB_PANJIT |
736 | default y | 736 | default y |
737 | bool "PanJit device support" if EXPERT | 737 | bool "PanJit device support" if EXPERT |
738 | depends on TOUCHSCREEN_USB_COMPOSITE | 738 | depends on TOUCHSCREEN_USB_COMPOSITE |
739 | 739 | ||
740 | config TOUCHSCREEN_USB_3M | 740 | config TOUCHSCREEN_USB_3M |
741 | default y | 741 | default y |
742 | bool "3M/Microtouch EX II series device support" if EXPERT | 742 | bool "3M/Microtouch EX II series device support" if EXPERT |
743 | depends on TOUCHSCREEN_USB_COMPOSITE | 743 | depends on TOUCHSCREEN_USB_COMPOSITE |
744 | 744 | ||
745 | config TOUCHSCREEN_USB_ITM | 745 | config TOUCHSCREEN_USB_ITM |
746 | default y | 746 | default y |
747 | bool "ITM device support" if EXPERT | 747 | bool "ITM device support" if EXPERT |
748 | depends on TOUCHSCREEN_USB_COMPOSITE | 748 | depends on TOUCHSCREEN_USB_COMPOSITE |
749 | 749 | ||
750 | config TOUCHSCREEN_USB_ETURBO | 750 | config TOUCHSCREEN_USB_ETURBO |
751 | default y | 751 | default y |
752 | bool "eTurboTouch (non-eGalax compatible) device support" if EXPERT | 752 | bool "eTurboTouch (non-eGalax compatible) device support" if EXPERT |
753 | depends on TOUCHSCREEN_USB_COMPOSITE | 753 | depends on TOUCHSCREEN_USB_COMPOSITE |
754 | 754 | ||
755 | config TOUCHSCREEN_USB_GUNZE | 755 | config TOUCHSCREEN_USB_GUNZE |
756 | default y | 756 | default y |
757 | bool "Gunze AHL61 device support" if EXPERT | 757 | bool "Gunze AHL61 device support" if EXPERT |
758 | depends on TOUCHSCREEN_USB_COMPOSITE | 758 | depends on TOUCHSCREEN_USB_COMPOSITE |
759 | 759 | ||
760 | config TOUCHSCREEN_USB_DMC_TSC10 | 760 | config TOUCHSCREEN_USB_DMC_TSC10 |
761 | default y | 761 | default y |
762 | bool "DMC TSC-10/25 device support" if EXPERT | 762 | bool "DMC TSC-10/25 device support" if EXPERT |
763 | depends on TOUCHSCREEN_USB_COMPOSITE | 763 | depends on TOUCHSCREEN_USB_COMPOSITE |
764 | 764 | ||
765 | config TOUCHSCREEN_USB_IRTOUCH | 765 | config TOUCHSCREEN_USB_IRTOUCH |
766 | default y | 766 | default y |
767 | bool "IRTOUCHSYSTEMS/UNITOP device support" if EXPERT | 767 | bool "IRTOUCHSYSTEMS/UNITOP device support" if EXPERT |
768 | depends on TOUCHSCREEN_USB_COMPOSITE | 768 | depends on TOUCHSCREEN_USB_COMPOSITE |
769 | 769 | ||
770 | config TOUCHSCREEN_USB_IDEALTEK | 770 | config TOUCHSCREEN_USB_IDEALTEK |
771 | default y | 771 | default y |
772 | bool "IdealTEK URTC1000 device support" if EXPERT | 772 | bool "IdealTEK URTC1000 device support" if EXPERT |
773 | depends on TOUCHSCREEN_USB_COMPOSITE | 773 | depends on TOUCHSCREEN_USB_COMPOSITE |
774 | 774 | ||
775 | config TOUCHSCREEN_USB_GENERAL_TOUCH | 775 | config TOUCHSCREEN_USB_GENERAL_TOUCH |
776 | default y | 776 | default y |
777 | bool "GeneralTouch Touchscreen device support" if EXPERT | 777 | bool "GeneralTouch Touchscreen device support" if EXPERT |
778 | depends on TOUCHSCREEN_USB_COMPOSITE | 778 | depends on TOUCHSCREEN_USB_COMPOSITE |
779 | 779 | ||
780 | config TOUCHSCREEN_USB_GOTOP | 780 | config TOUCHSCREEN_USB_GOTOP |
781 | default y | 781 | default y |
782 | bool "GoTop Super_Q2/GogoPen/PenPower tablet device support" if EXPERT | 782 | bool "GoTop Super_Q2/GogoPen/PenPower tablet device support" if EXPERT |
783 | depends on TOUCHSCREEN_USB_COMPOSITE | 783 | depends on TOUCHSCREEN_USB_COMPOSITE |
784 | 784 | ||
785 | config TOUCHSCREEN_USB_JASTEC | 785 | config TOUCHSCREEN_USB_JASTEC |
786 | default y | 786 | default y |
787 | bool "JASTEC/DigiTech DTR-02U USB touch controller device support" if EXPERT | 787 | bool "JASTEC/DigiTech DTR-02U USB touch controller device support" if EXPERT |
788 | depends on TOUCHSCREEN_USB_COMPOSITE | 788 | depends on TOUCHSCREEN_USB_COMPOSITE |
789 | 789 | ||
790 | config TOUCHSCREEN_USB_ELO | 790 | config TOUCHSCREEN_USB_ELO |
791 | default y | 791 | default y |
792 | bool "Elo TouchSystems 2700 IntelliTouch controller device support" if EXPERT | 792 | bool "Elo TouchSystems 2700 IntelliTouch controller device support" if EXPERT |
793 | depends on TOUCHSCREEN_USB_COMPOSITE | 793 | depends on TOUCHSCREEN_USB_COMPOSITE |
794 | 794 | ||
795 | config TOUCHSCREEN_USB_E2I | 795 | config TOUCHSCREEN_USB_E2I |
796 | default y | 796 | default y |
797 | bool "e2i Touchscreen controller (e.g. from Mimo 740)" if EXPERT | 797 | bool "e2i Touchscreen controller (e.g. from Mimo 740)" if EXPERT |
798 | depends on TOUCHSCREEN_USB_COMPOSITE | 798 | depends on TOUCHSCREEN_USB_COMPOSITE |
799 | 799 | ||
800 | config TOUCHSCREEN_USB_ZYTRONIC | 800 | config TOUCHSCREEN_USB_ZYTRONIC |
801 | default y | 801 | default y |
802 | bool "Zytronic controller" if EXPERT | 802 | bool "Zytronic controller" if EXPERT |
803 | depends on TOUCHSCREEN_USB_COMPOSITE | 803 | depends on TOUCHSCREEN_USB_COMPOSITE |
804 | 804 | ||
805 | config TOUCHSCREEN_USB_ETT_TC45USB | 805 | config TOUCHSCREEN_USB_ETT_TC45USB |
806 | default y | 806 | default y |
807 | bool "ET&T USB series TC4UM/TC5UH touchscreen controller support" if EXPERT | 807 | bool "ET&T USB series TC4UM/TC5UH touchscreen controller support" if EXPERT |
808 | depends on TOUCHSCREEN_USB_COMPOSITE | 808 | depends on TOUCHSCREEN_USB_COMPOSITE |
809 | 809 | ||
810 | config TOUCHSCREEN_USB_NEXIO | 810 | config TOUCHSCREEN_USB_NEXIO |
811 | default y | 811 | default y |
812 | bool "NEXIO/iNexio device support" if EXPERT | 812 | bool "NEXIO/iNexio device support" if EXPERT |
813 | depends on TOUCHSCREEN_USB_COMPOSITE | 813 | depends on TOUCHSCREEN_USB_COMPOSITE |
814 | 814 | ||
815 | config TOUCHSCREEN_USB_EASYTOUCH | 815 | config TOUCHSCREEN_USB_EASYTOUCH |
816 | default y | 816 | default y |
817 | bool "EasyTouch USB Touch controller device support" if EMBEDDED | 817 | bool "EasyTouch USB Touch controller device support" if EMBEDDED |
818 | depends on TOUCHSCREEN_USB_COMPOSITE | 818 | depends on TOUCHSCREEN_USB_COMPOSITE |
819 | help | 819 | help |
820 | Say Y here if you have an EasyTouch USB Touch controller. | 820 | Say Y here if you have an EasyTouch USB Touch controller. |
821 | If unsure, say N. | 821 | If unsure, say N. |
822 | 822 | ||
823 | config TOUCHSCREEN_TOUCHIT213 | 823 | config TOUCHSCREEN_TOUCHIT213 |
824 | tristate "Sahara TouchIT-213 touchscreen" | 824 | tristate "Sahara TouchIT-213 touchscreen" |
825 | select SERIO | 825 | select SERIO |
826 | help | 826 | help |
827 | Say Y here if you have a Sahara TouchIT-213 Tablet PC. | 827 | Say Y here if you have a Sahara TouchIT-213 Tablet PC. |
828 | 828 | ||
829 | If unsure, say N. | 829 | If unsure, say N. |
830 | 830 | ||
831 | To compile this driver as a module, choose M here: the | 831 | To compile this driver as a module, choose M here: the |
832 | module will be called touchit213. | 832 | module will be called touchit213. |
833 | 833 | ||
834 | config TOUCHSCREEN_TSC_SERIO | 834 | config TOUCHSCREEN_TSC_SERIO |
835 | tristate "TSC-10/25/40 serial touchscreen support" | 835 | tristate "TSC-10/25/40 serial touchscreen support" |
836 | select SERIO | 836 | select SERIO |
837 | help | 837 | help |
838 | Say Y here if you have a TSC-10, 25 or 40 serial touchscreen connected | 838 | Say Y here if you have a TSC-10, 25 or 40 serial touchscreen connected |
839 | to your system. | 839 | to your system. |
840 | 840 | ||
841 | If unsure, say N. | 841 | If unsure, say N. |
842 | 842 | ||
843 | To compile this driver as a module, choose M here: the | 843 | To compile this driver as a module, choose M here: the |
844 | module will be called tsc40. | 844 | module will be called tsc40. |
845 | 845 | ||
846 | config TOUCHSCREEN_TSC2005 | 846 | config TOUCHSCREEN_TSC2005 |
847 | tristate "TSC2005 based touchscreens" | 847 | tristate "TSC2005 based touchscreens" |
848 | depends on SPI_MASTER | 848 | depends on SPI_MASTER |
849 | help | 849 | help |
850 | Say Y here if you have a TSC2005 based touchscreen. | 850 | Say Y here if you have a TSC2005 based touchscreen. |
851 | 851 | ||
852 | If unsure, say N. | 852 | If unsure, say N. |
853 | 853 | ||
854 | To compile this driver as a module, choose M here: the | 854 | To compile this driver as a module, choose M here: the |
855 | module will be called tsc2005. | 855 | module will be called tsc2005. |
856 | 856 | ||
857 | config TOUCHSCREEN_TSC2007 | 857 | config TOUCHSCREEN_TSC2007 |
858 | tristate "TSC2007 based touchscreens" | 858 | tristate "TSC2007 based touchscreens" |
859 | depends on I2C | 859 | depends on I2C |
860 | help | 860 | help |
861 | Say Y here if you have a TSC2007 based touchscreen. | 861 | Say Y here if you have a TSC2007 based touchscreen. |
862 | 862 | ||
863 | If unsure, say N. | 863 | If unsure, say N. |
864 | 864 | ||
865 | To compile this driver as a module, choose M here: the | 865 | To compile this driver as a module, choose M here: the |
866 | module will be called tsc2007. | 866 | module will be called tsc2007. |
867 | 867 | ||
868 | config TOUCHSCREEN_W90X900 | 868 | config TOUCHSCREEN_W90X900 |
869 | tristate "W90P910 touchscreen driver" | 869 | tristate "W90P910 touchscreen driver" |
870 | depends on HAVE_CLK | 870 | depends on HAVE_CLK |
871 | help | 871 | help |
872 | Say Y here if you have a W90P910 based touchscreen. | 872 | Say Y here if you have a W90P910 based touchscreen. |
873 | 873 | ||
874 | To compile this driver as a module, choose M here: the | 874 | To compile this driver as a module, choose M here: the |
875 | module will be called w90p910_ts. | 875 | module will be called w90p910_ts. |
876 | 876 | ||
877 | config TOUCHSCREEN_PCAP | 877 | config TOUCHSCREEN_PCAP |
878 | tristate "Motorola PCAP touchscreen" | 878 | tristate "Motorola PCAP touchscreen" |
879 | depends on EZX_PCAP | 879 | depends on EZX_PCAP |
880 | help | 880 | help |
881 | Say Y here if you have a Motorola EZX telephone and | 881 | Say Y here if you have a Motorola EZX telephone and |
882 | want to enable support for the built-in touchscreen. | 882 | want to enable support for the built-in touchscreen. |
883 | 883 | ||
884 | To compile this driver as a module, choose M here: the | 884 | To compile this driver as a module, choose M here: the |
885 | module will be called pcap_ts. | 885 | module will be called pcap_ts. |
886 | 886 | ||
887 | config TOUCHSCREEN_ST1232 | 887 | config TOUCHSCREEN_ST1232 |
888 | tristate "Sitronix ST1232 touchscreen controllers" | 888 | tristate "Sitronix ST1232 touchscreen controllers" |
889 | depends on I2C | 889 | depends on I2C |
890 | help | 890 | help |
891 | Say Y here if you want to support Sitronix ST1232 | 891 | Say Y here if you want to support Sitronix ST1232 |
892 | touchscreen controller. | 892 | touchscreen controller. |
893 | 893 | ||
894 | If unsure, say N. | 894 | If unsure, say N. |
895 | 895 | ||
896 | To compile this driver as a module, choose M here: the | 896 | To compile this driver as a module, choose M here: the |
897 | module will be called st1232_ts. | 897 | module will be called st1232_ts. |
898 | 898 | ||
899 | config TOUCHSCREEN_STMPE | 899 | config TOUCHSCREEN_STMPE |
900 | tristate "STMicroelectronics STMPE touchscreens" | 900 | tristate "STMicroelectronics STMPE touchscreens" |
901 | depends on MFD_STMPE | 901 | depends on MFD_STMPE |
902 | help | 902 | help |
903 | Say Y here if you want support for STMicroelectronics | 903 | Say Y here if you want support for STMicroelectronics |
904 | STMPE touchscreen controllers. | 904 | STMPE touchscreen controllers. |
905 | 905 | ||
906 | To compile this driver as a module, choose M here: the | 906 | To compile this driver as a module, choose M here: the |
907 | module will be called stmpe-ts. | 907 | module will be called stmpe-ts. |
908 | 908 | ||
909 | config TOUCHSCREEN_TPS6507X | 909 | config TOUCHSCREEN_TPS6507X |
910 | tristate "TPS6507x based touchscreens" | 910 | tristate "TPS6507x based touchscreens" |
911 | depends on I2C | 911 | depends on I2C |
912 | select INPUT_POLLDEV | 912 | select INPUT_POLLDEV |
913 | help | 913 | help |
914 | Say Y here if you have a TPS6507x based touchscreen | 914 | Say Y here if you have a TPS6507x based touchscreen |
915 | controller. | 915 | controller. |
916 | 916 | ||
917 | If unsure, say N. | 917 | If unsure, say N. |
918 | 918 | ||
919 | To compile this driver as a module, choose M here: the | 919 | To compile this driver as a module, choose M here: the |
920 | module will be called tps6507x_ts. | 920 | module will be called tps6507x_ts. |
921 | 921 | ||
922 | config TOUCHSCREEN_ZFORCE | ||
923 | tristate "Neonode zForce infrared touchscreens" | ||
924 | depends on I2C | ||
925 | depends on GPIOLIB | ||
926 | help | ||
927 | Say Y here if you have a touchscreen using the zforce | ||
928 | infraread technology from Neonode. | ||
929 | |||
930 | If unsure, say N. | ||
931 | |||
932 | To compile this driver as a module, choose M here: the | ||
933 | module will be called zforce_ts. | ||
934 | |||
922 | endif | 935 | endif |
923 | 936 |
drivers/input/touchscreen/Makefile
1 | # | 1 | # |
2 | # Makefile for the touchscreen drivers. | 2 | # Makefile for the touchscreen drivers. |
3 | # | 3 | # |
4 | 4 | ||
5 | # Each configuration option enables a list of files. | 5 | # Each configuration option enables a list of files. |
6 | 6 | ||
7 | wm97xx-ts-y := wm97xx-core.o | 7 | wm97xx-ts-y := wm97xx-core.o |
8 | 8 | ||
9 | obj-$(CONFIG_TOUCHSCREEN_88PM860X) += 88pm860x-ts.o | 9 | obj-$(CONFIG_TOUCHSCREEN_88PM860X) += 88pm860x-ts.o |
10 | obj-$(CONFIG_TOUCHSCREEN_AD7877) += ad7877.o | 10 | obj-$(CONFIG_TOUCHSCREEN_AD7877) += ad7877.o |
11 | obj-$(CONFIG_TOUCHSCREEN_AD7879) += ad7879.o | 11 | obj-$(CONFIG_TOUCHSCREEN_AD7879) += ad7879.o |
12 | obj-$(CONFIG_TOUCHSCREEN_AD7879_I2C) += ad7879-i2c.o | 12 | obj-$(CONFIG_TOUCHSCREEN_AD7879_I2C) += ad7879-i2c.o |
13 | obj-$(CONFIG_TOUCHSCREEN_AD7879_SPI) += ad7879-spi.o | 13 | obj-$(CONFIG_TOUCHSCREEN_AD7879_SPI) += ad7879-spi.o |
14 | obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o | 14 | obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o |
15 | obj-$(CONFIG_TOUCHSCREEN_ATMEL_MXT) += atmel_mxt_ts.o | 15 | obj-$(CONFIG_TOUCHSCREEN_ATMEL_MXT) += atmel_mxt_ts.o |
16 | obj-$(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) += atmel_tsadcc.o | 16 | obj-$(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) += atmel_tsadcc.o |
17 | obj-$(CONFIG_TOUCHSCREEN_AUO_PIXCIR) += auo-pixcir-ts.o | 17 | obj-$(CONFIG_TOUCHSCREEN_AUO_PIXCIR) += auo-pixcir-ts.o |
18 | obj-$(CONFIG_TOUCHSCREEN_BU21013) += bu21013_ts.o | 18 | obj-$(CONFIG_TOUCHSCREEN_BU21013) += bu21013_ts.o |
19 | obj-$(CONFIG_TOUCHSCREEN_CY8CTMG110) += cy8ctmg110_ts.o | 19 | obj-$(CONFIG_TOUCHSCREEN_CY8CTMG110) += cy8ctmg110_ts.o |
20 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP_CORE) += cyttsp_core.o | 20 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP_CORE) += cyttsp_core.o |
21 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP_I2C) += cyttsp_i2c.o cyttsp_i2c_common.o | 21 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP_I2C) += cyttsp_i2c.o cyttsp_i2c_common.o |
22 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP_SPI) += cyttsp_spi.o | 22 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP_SPI) += cyttsp_spi.o |
23 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP4_CORE) += cyttsp4_core.o | 23 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP4_CORE) += cyttsp4_core.o |
24 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP4_I2C) += cyttsp4_i2c.o cyttsp_i2c_common.o | 24 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP4_I2C) += cyttsp4_i2c.o cyttsp_i2c_common.o |
25 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP4_SPI) += cyttsp4_spi.o | 25 | obj-$(CONFIG_TOUCHSCREEN_CYTTSP4_SPI) += cyttsp4_spi.o |
26 | obj-$(CONFIG_TOUCHSCREEN_DA9034) += da9034-ts.o | 26 | obj-$(CONFIG_TOUCHSCREEN_DA9034) += da9034-ts.o |
27 | obj-$(CONFIG_TOUCHSCREEN_DA9052) += da9052_tsi.o | 27 | obj-$(CONFIG_TOUCHSCREEN_DA9052) += da9052_tsi.o |
28 | obj-$(CONFIG_TOUCHSCREEN_DYNAPRO) += dynapro.o | 28 | obj-$(CONFIG_TOUCHSCREEN_DYNAPRO) += dynapro.o |
29 | obj-$(CONFIG_TOUCHSCREEN_EDT_FT5X06) += edt-ft5x06.o | 29 | obj-$(CONFIG_TOUCHSCREEN_EDT_FT5X06) += edt-ft5x06.o |
30 | obj-$(CONFIG_TOUCHSCREEN_HAMPSHIRE) += hampshire.o | 30 | obj-$(CONFIG_TOUCHSCREEN_HAMPSHIRE) += hampshire.o |
31 | obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o | 31 | obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o |
32 | obj-$(CONFIG_TOUCHSCREEN_EETI) += eeti_ts.o | 32 | obj-$(CONFIG_TOUCHSCREEN_EETI) += eeti_ts.o |
33 | obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o | 33 | obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o |
34 | obj-$(CONFIG_TOUCHSCREEN_EGALAX) += egalax_ts.o | 34 | obj-$(CONFIG_TOUCHSCREEN_EGALAX) += egalax_ts.o |
35 | obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o | 35 | obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o |
36 | obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o | 36 | obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o |
37 | obj-$(CONFIG_TOUCHSCREEN_INEXIO) += inexio.o | 37 | obj-$(CONFIG_TOUCHSCREEN_INEXIO) += inexio.o |
38 | obj-$(CONFIG_TOUCHSCREEN_INTEL_MID) += intel-mid-touch.o | 38 | obj-$(CONFIG_TOUCHSCREEN_INTEL_MID) += intel-mid-touch.o |
39 | obj-$(CONFIG_TOUCHSCREEN_LPC32XX) += lpc32xx_ts.o | 39 | obj-$(CONFIG_TOUCHSCREEN_LPC32XX) += lpc32xx_ts.o |
40 | obj-$(CONFIG_TOUCHSCREEN_MAX11801) += max11801_ts.o | 40 | obj-$(CONFIG_TOUCHSCREEN_MAX11801) += max11801_ts.o |
41 | obj-$(CONFIG_TOUCHSCREEN_MC13783) += mc13783_ts.o | 41 | obj-$(CONFIG_TOUCHSCREEN_MC13783) += mc13783_ts.o |
42 | obj-$(CONFIG_TOUCHSCREEN_MCS5000) += mcs5000_ts.o | 42 | obj-$(CONFIG_TOUCHSCREEN_MCS5000) += mcs5000_ts.o |
43 | obj-$(CONFIG_TOUCHSCREEN_MIGOR) += migor_ts.o | 43 | obj-$(CONFIG_TOUCHSCREEN_MIGOR) += migor_ts.o |
44 | obj-$(CONFIG_TOUCHSCREEN_MMS114) += mms114.o | 44 | obj-$(CONFIG_TOUCHSCREEN_MMS114) += mms114.o |
45 | obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o | 45 | obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o |
46 | obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o | 46 | obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o |
47 | obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o | 47 | obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o |
48 | obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o | 48 | obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o |
49 | obj-$(CONFIG_TOUCHSCREEN_HTCPEN) += htcpen.o | 49 | obj-$(CONFIG_TOUCHSCREEN_HTCPEN) += htcpen.o |
50 | obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o | 50 | obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o |
51 | obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o | 51 | obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o |
52 | obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o | 52 | obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o |
53 | obj-$(CONFIG_TOUCHSCREEN_PIXCIR) += pixcir_i2c_ts.o | 53 | obj-$(CONFIG_TOUCHSCREEN_PIXCIR) += pixcir_i2c_ts.o |
54 | obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o | 54 | obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o |
55 | obj-$(CONFIG_TOUCHSCREEN_ST1232) += st1232.o | 55 | obj-$(CONFIG_TOUCHSCREEN_ST1232) += st1232.o |
56 | obj-$(CONFIG_TOUCHSCREEN_STMPE) += stmpe-ts.o | 56 | obj-$(CONFIG_TOUCHSCREEN_STMPE) += stmpe-ts.o |
57 | obj-$(CONFIG_TOUCHSCREEN_TI_AM335X_TSC) += ti_am335x_tsc.o | 57 | obj-$(CONFIG_TOUCHSCREEN_TI_AM335X_TSC) += ti_am335x_tsc.o |
58 | obj-$(CONFIG_TOUCHSCREEN_TNETV107X) += tnetv107x-ts.o | 58 | obj-$(CONFIG_TOUCHSCREEN_TNETV107X) += tnetv107x-ts.o |
59 | obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o | 59 | obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o |
60 | obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o | 60 | obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o |
61 | obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o | 61 | obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o |
62 | obj-$(CONFIG_TOUCHSCREEN_TSC_SERIO) += tsc40.o | 62 | obj-$(CONFIG_TOUCHSCREEN_TSC_SERIO) += tsc40.o |
63 | obj-$(CONFIG_TOUCHSCREEN_TSC2005) += tsc2005.o | 63 | obj-$(CONFIG_TOUCHSCREEN_TSC2005) += tsc2005.o |
64 | obj-$(CONFIG_TOUCHSCREEN_TSC2007) += tsc2007.o | 64 | obj-$(CONFIG_TOUCHSCREEN_TSC2007) += tsc2007.o |
65 | obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o | 65 | obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o |
66 | obj-$(CONFIG_TOUCHSCREEN_WACOM_W8001) += wacom_w8001.o | 66 | obj-$(CONFIG_TOUCHSCREEN_WACOM_W8001) += wacom_w8001.o |
67 | obj-$(CONFIG_TOUCHSCREEN_WACOM_I2C) += wacom_i2c.o | 67 | obj-$(CONFIG_TOUCHSCREEN_WACOM_I2C) += wacom_i2c.o |
68 | obj-$(CONFIG_TOUCHSCREEN_WM831X) += wm831x-ts.o | 68 | obj-$(CONFIG_TOUCHSCREEN_WM831X) += wm831x-ts.o |
69 | obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o | 69 | obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o |
70 | wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o | 70 | wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o |
71 | wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9712) += wm9712.o | 71 | wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9712) += wm9712.o |
72 | wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713) += wm9713.o | 72 | wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713) += wm9713.o |
73 | obj-$(CONFIG_TOUCHSCREEN_WM97XX_ATMEL) += atmel-wm97xx.o | 73 | obj-$(CONFIG_TOUCHSCREEN_WM97XX_ATMEL) += atmel-wm97xx.o |
74 | obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE) += mainstone-wm97xx.o | 74 | obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE) += mainstone-wm97xx.o |
75 | obj-$(CONFIG_TOUCHSCREEN_WM97XX_ZYLONITE) += zylonite-wm97xx.o | 75 | obj-$(CONFIG_TOUCHSCREEN_WM97XX_ZYLONITE) += zylonite-wm97xx.o |
76 | obj-$(CONFIG_TOUCHSCREEN_W90X900) += w90p910_ts.o | 76 | obj-$(CONFIG_TOUCHSCREEN_W90X900) += w90p910_ts.o |
77 | obj-$(CONFIG_TOUCHSCREEN_TPS6507X) += tps6507x-ts.o | 77 | obj-$(CONFIG_TOUCHSCREEN_TPS6507X) += tps6507x-ts.o |
78 | obj-$(CONFIG_TOUCHSCREEN_ZFORCE) += zforce_ts.o | ||
78 | 79 |
drivers/input/touchscreen/zforce_ts.c
File was created | 1 | /* | |
2 | * Copyright (C) 2012-2013 MundoReader S.L. | ||
3 | * Author: Heiko Stuebner <heiko@sntech.de> | ||
4 | * | ||
5 | * based in parts on Nook zforce driver | ||
6 | * | ||
7 | * Copyright (C) 2010 Barnes & Noble, Inc. | ||
8 | * Author: Pieter Truter<ptruter@intrinsyc.com> | ||
9 | * | ||
10 | * This software is licensed under the terms of the GNU General Public | ||
11 | * License version 2, as published by the Free Software Foundation, and | ||
12 | * may be copied, distributed, and modified under those terms. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | */ | ||
19 | |||
20 | #include <linux/module.h> | ||
21 | #include <linux/hrtimer.h> | ||
22 | #include <linux/slab.h> | ||
23 | #include <linux/input.h> | ||
24 | #include <linux/interrupt.h> | ||
25 | #include <linux/i2c.h> | ||
26 | #include <linux/delay.h> | ||
27 | #include <linux/gpio.h> | ||
28 | #include <linux/device.h> | ||
29 | #include <linux/sysfs.h> | ||
30 | #include <linux/input/mt.h> | ||
31 | #include <linux/platform_data/zforce_ts.h> | ||
32 | |||
33 | #define WAIT_TIMEOUT msecs_to_jiffies(1000) | ||
34 | |||
35 | #define FRAME_START 0xee | ||
36 | |||
37 | /* Offsets of the different parts of the payload the controller sends */ | ||
38 | #define PAYLOAD_HEADER 0 | ||
39 | #define PAYLOAD_LENGTH 1 | ||
40 | #define PAYLOAD_BODY 2 | ||
41 | |||
42 | /* Response offsets */ | ||
43 | #define RESPONSE_ID 0 | ||
44 | #define RESPONSE_DATA 1 | ||
45 | |||
46 | /* Commands */ | ||
47 | #define COMMAND_DEACTIVATE 0x00 | ||
48 | #define COMMAND_INITIALIZE 0x01 | ||
49 | #define COMMAND_RESOLUTION 0x02 | ||
50 | #define COMMAND_SETCONFIG 0x03 | ||
51 | #define COMMAND_DATAREQUEST 0x04 | ||
52 | #define COMMAND_SCANFREQ 0x08 | ||
53 | #define COMMAND_STATUS 0X1e | ||
54 | |||
55 | /* | ||
56 | * Responses the controller sends as a result of | ||
57 | * command requests | ||
58 | */ | ||
59 | #define RESPONSE_DEACTIVATE 0x00 | ||
60 | #define RESPONSE_INITIALIZE 0x01 | ||
61 | #define RESPONSE_RESOLUTION 0x02 | ||
62 | #define RESPONSE_SETCONFIG 0x03 | ||
63 | #define RESPONSE_SCANFREQ 0x08 | ||
64 | #define RESPONSE_STATUS 0X1e | ||
65 | |||
66 | /* | ||
67 | * Notifications are send by the touch controller without | ||
68 | * being requested by the driver and include for example | ||
69 | * touch indications | ||
70 | */ | ||
71 | #define NOTIFICATION_TOUCH 0x04 | ||
72 | #define NOTIFICATION_BOOTCOMPLETE 0x07 | ||
73 | #define NOTIFICATION_OVERRUN 0x25 | ||
74 | #define NOTIFICATION_PROXIMITY 0x26 | ||
75 | #define NOTIFICATION_INVALID_COMMAND 0xfe | ||
76 | |||
77 | #define ZFORCE_REPORT_POINTS 2 | ||
78 | #define ZFORCE_MAX_AREA 0xff | ||
79 | |||
80 | #define STATE_DOWN 0 | ||
81 | #define STATE_MOVE 1 | ||
82 | #define STATE_UP 2 | ||
83 | |||
84 | #define SETCONFIG_DUALTOUCH (1 << 0) | ||
85 | |||
86 | struct zforce_point { | ||
87 | int coord_x; | ||
88 | int coord_y; | ||
89 | int state; | ||
90 | int id; | ||
91 | int area_major; | ||
92 | int area_minor; | ||
93 | int orientation; | ||
94 | int pressure; | ||
95 | int prblty; | ||
96 | }; | ||
97 | |||
98 | /* | ||
99 | * @client the i2c_client | ||
100 | * @input the input device | ||
101 | * @suspending in the process of going to suspend (don't emit wakeup | ||
102 | * events for commands executed to suspend the device) | ||
103 | * @suspended device suspended | ||
104 | * @access_mutex serialize i2c-access, to keep multipart reads together | ||
105 | * @command_done completion to wait for the command result | ||
106 | * @command_mutex serialize commands send to the ic | ||
107 | * @command_waiting the id of the command that that is currently waiting | ||
108 | * for a result | ||
109 | * @command_result returned result of the command | ||
110 | */ | ||
111 | struct zforce_ts { | ||
112 | struct i2c_client *client; | ||
113 | struct input_dev *input; | ||
114 | const struct zforce_ts_platdata *pdata; | ||
115 | char phys[32]; | ||
116 | |||
117 | bool suspending; | ||
118 | bool suspended; | ||
119 | bool boot_complete; | ||
120 | |||
121 | /* Firmware version information */ | ||
122 | u16 version_major; | ||
123 | u16 version_minor; | ||
124 | u16 version_build; | ||
125 | u16 version_rev; | ||
126 | |||
127 | struct mutex access_mutex; | ||
128 | |||
129 | struct completion command_done; | ||
130 | struct mutex command_mutex; | ||
131 | int command_waiting; | ||
132 | int command_result; | ||
133 | }; | ||
134 | |||
135 | static int zforce_command(struct zforce_ts *ts, u8 cmd) | ||
136 | { | ||
137 | struct i2c_client *client = ts->client; | ||
138 | char buf[3]; | ||
139 | int ret; | ||
140 | |||
141 | dev_dbg(&client->dev, "%s: 0x%x\n", __func__, cmd); | ||
142 | |||
143 | buf[0] = FRAME_START; | ||
144 | buf[1] = 1; /* data size, command only */ | ||
145 | buf[2] = cmd; | ||
146 | |||
147 | mutex_lock(&ts->access_mutex); | ||
148 | ret = i2c_master_send(client, &buf[0], ARRAY_SIZE(buf)); | ||
149 | mutex_unlock(&ts->access_mutex); | ||
150 | if (ret < 0) { | ||
151 | dev_err(&client->dev, "i2c send data request error: %d\n", ret); | ||
152 | return ret; | ||
153 | } | ||
154 | |||
155 | return 0; | ||
156 | } | ||
157 | |||
158 | static int zforce_send_wait(struct zforce_ts *ts, const char *buf, int len) | ||
159 | { | ||
160 | struct i2c_client *client = ts->client; | ||
161 | int ret; | ||
162 | |||
163 | ret = mutex_trylock(&ts->command_mutex); | ||
164 | if (!ret) { | ||
165 | dev_err(&client->dev, "already waiting for a command\n"); | ||
166 | return -EBUSY; | ||
167 | } | ||
168 | |||
169 | dev_dbg(&client->dev, "sending %d bytes for command 0x%x\n", | ||
170 | buf[1], buf[2]); | ||
171 | |||
172 | ts->command_waiting = buf[2]; | ||
173 | |||
174 | mutex_lock(&ts->access_mutex); | ||
175 | ret = i2c_master_send(client, buf, len); | ||
176 | mutex_unlock(&ts->access_mutex); | ||
177 | if (ret < 0) { | ||
178 | dev_err(&client->dev, "i2c send data request error: %d\n", ret); | ||
179 | goto unlock; | ||
180 | } | ||
181 | |||
182 | dev_dbg(&client->dev, "waiting for result for command 0x%x\n", buf[2]); | ||
183 | |||
184 | if (wait_for_completion_timeout(&ts->command_done, WAIT_TIMEOUT) == 0) { | ||
185 | ret = -ETIME; | ||
186 | goto unlock; | ||
187 | } | ||
188 | |||
189 | ret = ts->command_result; | ||
190 | |||
191 | unlock: | ||
192 | mutex_unlock(&ts->command_mutex); | ||
193 | return ret; | ||
194 | } | ||
195 | |||
196 | static int zforce_command_wait(struct zforce_ts *ts, u8 cmd) | ||
197 | { | ||
198 | struct i2c_client *client = ts->client; | ||
199 | char buf[3]; | ||
200 | int ret; | ||
201 | |||
202 | dev_dbg(&client->dev, "%s: 0x%x\n", __func__, cmd); | ||
203 | |||
204 | buf[0] = FRAME_START; | ||
205 | buf[1] = 1; /* data size, command only */ | ||
206 | buf[2] = cmd; | ||
207 | |||
208 | ret = zforce_send_wait(ts, &buf[0], ARRAY_SIZE(buf)); | ||
209 | if (ret < 0) { | ||
210 | dev_err(&client->dev, "i2c send data request error: %d\n", ret); | ||
211 | return ret; | ||
212 | } | ||
213 | |||
214 | return 0; | ||
215 | } | ||
216 | |||
217 | static int zforce_resolution(struct zforce_ts *ts, u16 x, u16 y) | ||
218 | { | ||
219 | struct i2c_client *client = ts->client; | ||
220 | char buf[7] = { FRAME_START, 5, COMMAND_RESOLUTION, | ||
221 | (x & 0xff), ((x >> 8) & 0xff), | ||
222 | (y & 0xff), ((y >> 8) & 0xff) }; | ||
223 | |||
224 | dev_dbg(&client->dev, "set resolution to (%d,%d)\n", x, y); | ||
225 | |||
226 | return zforce_send_wait(ts, &buf[0], ARRAY_SIZE(buf)); | ||
227 | } | ||
228 | |||
229 | static int zforce_scan_frequency(struct zforce_ts *ts, u16 idle, u16 finger, | ||
230 | u16 stylus) | ||
231 | { | ||
232 | struct i2c_client *client = ts->client; | ||
233 | char buf[9] = { FRAME_START, 7, COMMAND_SCANFREQ, | ||
234 | (idle & 0xff), ((idle >> 8) & 0xff), | ||
235 | (finger & 0xff), ((finger >> 8) & 0xff), | ||
236 | (stylus & 0xff), ((stylus >> 8) & 0xff) }; | ||
237 | |||
238 | dev_dbg(&client->dev, "set scan frequency to (idle: %d, finger: %d, stylus: %d)\n", | ||
239 | idle, finger, stylus); | ||
240 | |||
241 | return zforce_send_wait(ts, &buf[0], ARRAY_SIZE(buf)); | ||
242 | } | ||
243 | |||
244 | static int zforce_setconfig(struct zforce_ts *ts, char b1) | ||
245 | { | ||
246 | struct i2c_client *client = ts->client; | ||
247 | char buf[7] = { FRAME_START, 5, COMMAND_SETCONFIG, | ||
248 | b1, 0, 0, 0 }; | ||
249 | |||
250 | dev_dbg(&client->dev, "set config to (%d)\n", b1); | ||
251 | |||
252 | return zforce_send_wait(ts, &buf[0], ARRAY_SIZE(buf)); | ||
253 | } | ||
254 | |||
255 | static int zforce_start(struct zforce_ts *ts) | ||
256 | { | ||
257 | struct i2c_client *client = ts->client; | ||
258 | const struct zforce_ts_platdata *pdata = dev_get_platdata(&client->dev); | ||
259 | int ret; | ||
260 | |||
261 | dev_dbg(&client->dev, "starting device\n"); | ||
262 | |||
263 | ret = zforce_command_wait(ts, COMMAND_INITIALIZE); | ||
264 | if (ret) { | ||
265 | dev_err(&client->dev, "Unable to initialize, %d\n", ret); | ||
266 | return ret; | ||
267 | } | ||
268 | |||
269 | ret = zforce_resolution(ts, pdata->x_max, pdata->y_max); | ||
270 | if (ret) { | ||
271 | dev_err(&client->dev, "Unable to set resolution, %d\n", ret); | ||
272 | goto error; | ||
273 | } | ||
274 | |||
275 | ret = zforce_scan_frequency(ts, 10, 50, 50); | ||
276 | if (ret) { | ||
277 | dev_err(&client->dev, "Unable to set scan frequency, %d\n", | ||
278 | ret); | ||
279 | goto error; | ||
280 | } | ||
281 | |||
282 | if (zforce_setconfig(ts, SETCONFIG_DUALTOUCH)) { | ||
283 | dev_err(&client->dev, "Unable to set config\n"); | ||
284 | goto error; | ||
285 | } | ||
286 | |||
287 | /* start sending touch events */ | ||
288 | ret = zforce_command(ts, COMMAND_DATAREQUEST); | ||
289 | if (ret) { | ||
290 | dev_err(&client->dev, "Unable to request data\n"); | ||
291 | goto error; | ||
292 | } | ||
293 | |||
294 | /* | ||
295 | * Per NN, initial cal. take max. of 200msec. | ||
296 | * Allow time to complete this calibration | ||
297 | */ | ||
298 | msleep(200); | ||
299 | |||
300 | return 0; | ||
301 | |||
302 | error: | ||
303 | zforce_command_wait(ts, COMMAND_DEACTIVATE); | ||
304 | return ret; | ||
305 | } | ||
306 | |||
307 | static int zforce_stop(struct zforce_ts *ts) | ||
308 | { | ||
309 | struct i2c_client *client = ts->client; | ||
310 | int ret; | ||
311 | |||
312 | dev_dbg(&client->dev, "stopping device\n"); | ||
313 | |||
314 | /* Deactivates touch sensing and puts the device into sleep. */ | ||
315 | ret = zforce_command_wait(ts, COMMAND_DEACTIVATE); | ||
316 | if (ret != 0) { | ||
317 | dev_err(&client->dev, "could not deactivate device, %d\n", | ||
318 | ret); | ||
319 | return ret; | ||
320 | } | ||
321 | |||
322 | return 0; | ||
323 | } | ||
324 | |||
325 | static int zforce_touch_event(struct zforce_ts *ts, u8 *payload) | ||
326 | { | ||
327 | struct i2c_client *client = ts->client; | ||
328 | const struct zforce_ts_platdata *pdata = dev_get_platdata(&client->dev); | ||
329 | struct zforce_point point; | ||
330 | int count, i, num = 0; | ||
331 | |||
332 | count = payload[0]; | ||
333 | if (count > ZFORCE_REPORT_POINTS) { | ||
334 | dev_warn(&client->dev, "to many coordinates %d, expected max %d\n", | ||
335 | count, ZFORCE_REPORT_POINTS); | ||
336 | count = ZFORCE_REPORT_POINTS; | ||
337 | } | ||
338 | |||
339 | for (i = 0; i < count; i++) { | ||
340 | point.coord_x = | ||
341 | payload[9 * i + 2] << 8 | payload[9 * i + 1]; | ||
342 | point.coord_y = | ||
343 | payload[9 * i + 4] << 8 | payload[9 * i + 3]; | ||
344 | |||
345 | if (point.coord_x > pdata->x_max || | ||
346 | point.coord_y > pdata->y_max) { | ||
347 | dev_warn(&client->dev, "coordinates (%d,%d) invalid\n", | ||
348 | point.coord_x, point.coord_y); | ||
349 | point.coord_x = point.coord_y = 0; | ||
350 | } | ||
351 | |||
352 | point.state = payload[9 * i + 5] & 0x03; | ||
353 | point.id = (payload[9 * i + 5] & 0xfc) >> 2; | ||
354 | |||
355 | /* determine touch major, minor and orientation */ | ||
356 | point.area_major = max(payload[9 * i + 6], | ||
357 | payload[9 * i + 7]); | ||
358 | point.area_minor = min(payload[9 * i + 6], | ||
359 | payload[9 * i + 7]); | ||
360 | point.orientation = payload[9 * i + 6] > payload[9 * i + 7]; | ||
361 | |||
362 | point.pressure = payload[9 * i + 8]; | ||
363 | point.prblty = payload[9 * i + 9]; | ||
364 | |||
365 | dev_dbg(&client->dev, | ||
366 | "point %d/%d: state %d, id %d, pressure %d, prblty %d, x %d, y %d, amajor %d, aminor %d, ori %d\n", | ||
367 | i, count, point.state, point.id, | ||
368 | point.pressure, point.prblty, | ||
369 | point.coord_x, point.coord_y, | ||
370 | point.area_major, point.area_minor, | ||
371 | point.orientation); | ||
372 | |||
373 | /* the zforce id starts with "1", so needs to be decreased */ | ||
374 | input_mt_slot(ts->input, point.id - 1); | ||
375 | |||
376 | input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, | ||
377 | point.state != STATE_UP); | ||
378 | |||
379 | if (point.state != STATE_UP) { | ||
380 | input_report_abs(ts->input, ABS_MT_POSITION_X, | ||
381 | point.coord_x); | ||
382 | input_report_abs(ts->input, ABS_MT_POSITION_Y, | ||
383 | point.coord_y); | ||
384 | input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, | ||
385 | point.area_major); | ||
386 | input_report_abs(ts->input, ABS_MT_TOUCH_MINOR, | ||
387 | point.area_minor); | ||
388 | input_report_abs(ts->input, ABS_MT_ORIENTATION, | ||
389 | point.orientation); | ||
390 | num++; | ||
391 | } | ||
392 | } | ||
393 | |||
394 | input_mt_sync_frame(ts->input); | ||
395 | |||
396 | input_mt_report_finger_count(ts->input, num); | ||
397 | |||
398 | input_sync(ts->input); | ||
399 | |||
400 | return 0; | ||
401 | } | ||
402 | |||
403 | static int zforce_read_packet(struct zforce_ts *ts, u8 *buf) | ||
404 | { | ||
405 | struct i2c_client *client = ts->client; | ||
406 | int ret; | ||
407 | |||
408 | mutex_lock(&ts->access_mutex); | ||
409 | |||
410 | /* read 2 byte message header */ | ||
411 | ret = i2c_master_recv(client, buf, 2); | ||
412 | if (ret < 0) { | ||
413 | dev_err(&client->dev, "error reading header: %d\n", ret); | ||
414 | goto unlock; | ||
415 | } | ||
416 | |||
417 | if (buf[PAYLOAD_HEADER] != FRAME_START) { | ||
418 | dev_err(&client->dev, "invalid frame start: %d\n", buf[0]); | ||
419 | ret = -EIO; | ||
420 | goto unlock; | ||
421 | } | ||
422 | |||
423 | if (buf[PAYLOAD_LENGTH] <= 0 || buf[PAYLOAD_LENGTH] > 255) { | ||
424 | dev_err(&client->dev, "invalid payload length: %d\n", | ||
425 | buf[PAYLOAD_LENGTH]); | ||
426 | ret = -EIO; | ||
427 | goto unlock; | ||
428 | } | ||
429 | |||
430 | /* read the message */ | ||
431 | ret = i2c_master_recv(client, &buf[PAYLOAD_BODY], buf[PAYLOAD_LENGTH]); | ||
432 | if (ret < 0) { | ||
433 | dev_err(&client->dev, "error reading payload: %d\n", ret); | ||
434 | goto unlock; | ||
435 | } | ||
436 | |||
437 | dev_dbg(&client->dev, "read %d bytes for response command 0x%x\n", | ||
438 | buf[PAYLOAD_LENGTH], buf[PAYLOAD_BODY]); | ||
439 | |||
440 | unlock: | ||
441 | mutex_unlock(&ts->access_mutex); | ||
442 | return ret; | ||
443 | } | ||
444 | |||
445 | static void zforce_complete(struct zforce_ts *ts, int cmd, int result) | ||
446 | { | ||
447 | struct i2c_client *client = ts->client; | ||
448 | |||
449 | if (ts->command_waiting == cmd) { | ||
450 | dev_dbg(&client->dev, "completing command 0x%x\n", cmd); | ||
451 | ts->command_result = result; | ||
452 | complete(&ts->command_done); | ||
453 | } else { | ||
454 | dev_dbg(&client->dev, "command %d not for us\n", cmd); | ||
455 | } | ||
456 | } | ||
457 | |||
458 | static irqreturn_t zforce_interrupt(int irq, void *dev_id) | ||
459 | { | ||
460 | struct zforce_ts *ts = dev_id; | ||
461 | struct i2c_client *client = ts->client; | ||
462 | const struct zforce_ts_platdata *pdata = dev_get_platdata(&client->dev); | ||
463 | int ret; | ||
464 | u8 payload_buffer[512]; | ||
465 | u8 *payload; | ||
466 | |||
467 | /* | ||
468 | * When suspended, emit a wakeup signal if necessary and return. | ||
469 | * Due to the level-interrupt we will get re-triggered later. | ||
470 | */ | ||
471 | if (ts->suspended) { | ||
472 | if (device_may_wakeup(&client->dev)) | ||
473 | pm_wakeup_event(&client->dev, 500); | ||
474 | msleep(20); | ||
475 | return IRQ_HANDLED; | ||
476 | } | ||
477 | |||
478 | dev_dbg(&client->dev, "handling interrupt\n"); | ||
479 | |||
480 | /* Don't emit wakeup events from commands run by zforce_suspend */ | ||
481 | if (!ts->suspending && device_may_wakeup(&client->dev)) | ||
482 | pm_stay_awake(&client->dev); | ||
483 | |||
484 | while (!gpio_get_value(pdata->gpio_int)) { | ||
485 | ret = zforce_read_packet(ts, payload_buffer); | ||
486 | if (ret < 0) { | ||
487 | dev_err(&client->dev, "could not read packet, ret: %d\n", | ||
488 | ret); | ||
489 | break; | ||
490 | } | ||
491 | |||
492 | payload = &payload_buffer[PAYLOAD_BODY]; | ||
493 | |||
494 | switch (payload[RESPONSE_ID]) { | ||
495 | case NOTIFICATION_TOUCH: | ||
496 | /* | ||
497 | * Always report touch-events received while | ||
498 | * suspending, when being a wakeup source | ||
499 | */ | ||
500 | if (ts->suspending && device_may_wakeup(&client->dev)) | ||
501 | pm_wakeup_event(&client->dev, 500); | ||
502 | zforce_touch_event(ts, &payload[RESPONSE_DATA]); | ||
503 | break; | ||
504 | |||
505 | case NOTIFICATION_BOOTCOMPLETE: | ||
506 | ts->boot_complete = payload[RESPONSE_DATA]; | ||
507 | zforce_complete(ts, payload[RESPONSE_ID], 0); | ||
508 | break; | ||
509 | |||
510 | case RESPONSE_INITIALIZE: | ||
511 | case RESPONSE_DEACTIVATE: | ||
512 | case RESPONSE_SETCONFIG: | ||
513 | case RESPONSE_RESOLUTION: | ||
514 | case RESPONSE_SCANFREQ: | ||
515 | zforce_complete(ts, payload[RESPONSE_ID], | ||
516 | payload[RESPONSE_DATA]); | ||
517 | break; | ||
518 | |||
519 | case RESPONSE_STATUS: | ||
520 | /* | ||
521 | * Version Payload Results | ||
522 | * [2:major] [2:minor] [2:build] [2:rev] | ||
523 | */ | ||
524 | ts->version_major = (payload[RESPONSE_DATA + 1] << 8) | | ||
525 | payload[RESPONSE_DATA]; | ||
526 | ts->version_minor = (payload[RESPONSE_DATA + 3] << 8) | | ||
527 | payload[RESPONSE_DATA + 2]; | ||
528 | ts->version_build = (payload[RESPONSE_DATA + 5] << 8) | | ||
529 | payload[RESPONSE_DATA + 4]; | ||
530 | ts->version_rev = (payload[RESPONSE_DATA + 7] << 8) | | ||
531 | payload[RESPONSE_DATA + 6]; | ||
532 | dev_dbg(&ts->client->dev, "Firmware Version %04x:%04x %04x:%04x\n", | ||
533 | ts->version_major, ts->version_minor, | ||
534 | ts->version_build, ts->version_rev); | ||
535 | |||
536 | zforce_complete(ts, payload[RESPONSE_ID], 0); | ||
537 | break; | ||
538 | |||
539 | case NOTIFICATION_INVALID_COMMAND: | ||
540 | dev_err(&ts->client->dev, "invalid command: 0x%x\n", | ||
541 | payload[RESPONSE_DATA]); | ||
542 | break; | ||
543 | |||
544 | default: | ||
545 | dev_err(&ts->client->dev, "unrecognized response id: 0x%x\n", | ||
546 | payload[RESPONSE_ID]); | ||
547 | break; | ||
548 | } | ||
549 | } | ||
550 | |||
551 | if (!ts->suspending && device_may_wakeup(&client->dev)) | ||
552 | pm_relax(&client->dev); | ||
553 | |||
554 | dev_dbg(&client->dev, "finished interrupt\n"); | ||
555 | |||
556 | return IRQ_HANDLED; | ||
557 | } | ||
558 | |||
559 | static int zforce_input_open(struct input_dev *dev) | ||
560 | { | ||
561 | struct zforce_ts *ts = input_get_drvdata(dev); | ||
562 | int ret; | ||
563 | |||
564 | ret = zforce_start(ts); | ||
565 | if (ret) | ||
566 | return ret; | ||
567 | |||
568 | return 0; | ||
569 | } | ||
570 | |||
571 | static void zforce_input_close(struct input_dev *dev) | ||
572 | { | ||
573 | struct zforce_ts *ts = input_get_drvdata(dev); | ||
574 | struct i2c_client *client = ts->client; | ||
575 | int ret; | ||
576 | |||
577 | ret = zforce_stop(ts); | ||
578 | if (ret) | ||
579 | dev_warn(&client->dev, "stopping zforce failed\n"); | ||
580 | |||
581 | return; | ||
582 | } | ||
583 | |||
584 | #ifdef CONFIG_PM_SLEEP | ||
585 | static int zforce_suspend(struct device *dev) | ||
586 | { | ||
587 | struct i2c_client *client = to_i2c_client(dev); | ||
588 | struct zforce_ts *ts = i2c_get_clientdata(client); | ||
589 | struct input_dev *input = ts->input; | ||
590 | int ret = 0; | ||
591 | |||
592 | mutex_lock(&input->mutex); | ||
593 | ts->suspending = true; | ||
594 | |||
595 | /* | ||
596 | * When configured as a wakeup source device should always wake | ||
597 | * the system, therefore start device if necessary. | ||
598 | */ | ||
599 | if (device_may_wakeup(&client->dev)) { | ||
600 | dev_dbg(&client->dev, "suspend while being a wakeup source\n"); | ||
601 | |||
602 | /* Need to start device, if not open, to be a wakeup source. */ | ||
603 | if (!input->users) { | ||
604 | ret = zforce_start(ts); | ||
605 | if (ret) | ||
606 | goto unlock; | ||
607 | } | ||
608 | |||
609 | enable_irq_wake(client->irq); | ||
610 | } else if (input->users) { | ||
611 | dev_dbg(&client->dev, "suspend without being a wakeup source\n"); | ||
612 | |||
613 | ret = zforce_stop(ts); | ||
614 | if (ret) | ||
615 | goto unlock; | ||
616 | |||
617 | disable_irq(client->irq); | ||
618 | } | ||
619 | |||
620 | ts->suspended = true; | ||
621 | |||
622 | unlock: | ||
623 | ts->suspending = false; | ||
624 | mutex_unlock(&input->mutex); | ||
625 | |||
626 | return ret; | ||
627 | } | ||
628 | |||
629 | static int zforce_resume(struct device *dev) | ||
630 | { | ||
631 | struct i2c_client *client = to_i2c_client(dev); | ||
632 | struct zforce_ts *ts = i2c_get_clientdata(client); | ||
633 | struct input_dev *input = ts->input; | ||
634 | int ret = 0; | ||
635 | |||
636 | mutex_lock(&input->mutex); | ||
637 | |||
638 | ts->suspended = false; | ||
639 | |||
640 | if (device_may_wakeup(&client->dev)) { | ||
641 | dev_dbg(&client->dev, "resume from being a wakeup source\n"); | ||
642 | |||
643 | disable_irq_wake(client->irq); | ||
644 | |||
645 | /* need to stop device if it was not open on suspend */ | ||
646 | if (!input->users) { | ||
647 | ret = zforce_stop(ts); | ||
648 | if (ret) | ||
649 | goto unlock; | ||
650 | } | ||
651 | } else if (input->users) { | ||
652 | dev_dbg(&client->dev, "resume without being a wakeup source\n"); | ||
653 | |||
654 | enable_irq(client->irq); | ||
655 | |||
656 | ret = zforce_start(ts); | ||
657 | if (ret < 0) | ||
658 | goto unlock; | ||
659 | } | ||
660 | |||
661 | unlock: | ||
662 | mutex_unlock(&input->mutex); | ||
663 | |||
664 | return ret; | ||
665 | } | ||
666 | #endif | ||
667 | |||
668 | static SIMPLE_DEV_PM_OPS(zforce_pm_ops, zforce_suspend, zforce_resume); | ||
669 | |||
670 | static void zforce_reset(void *data) | ||
671 | { | ||
672 | struct zforce_ts *ts = data; | ||
673 | |||
674 | gpio_set_value(ts->pdata->gpio_rst, 0); | ||
675 | } | ||
676 | |||
677 | static int zforce_probe(struct i2c_client *client, | ||
678 | const struct i2c_device_id *id) | ||
679 | { | ||
680 | const struct zforce_ts_platdata *pdata = dev_get_platdata(&client->dev); | ||
681 | struct zforce_ts *ts; | ||
682 | struct input_dev *input_dev; | ||
683 | int ret; | ||
684 | |||
685 | if (!pdata) | ||
686 | return -EINVAL; | ||
687 | |||
688 | ts = devm_kzalloc(&client->dev, sizeof(struct zforce_ts), GFP_KERNEL); | ||
689 | if (!ts) | ||
690 | return -ENOMEM; | ||
691 | |||
692 | ret = devm_gpio_request_one(&client->dev, pdata->gpio_int, GPIOF_IN, | ||
693 | "zforce_ts_int"); | ||
694 | if (ret) { | ||
695 | dev_err(&client->dev, "request of gpio %d failed, %d\n", | ||
696 | pdata->gpio_int, ret); | ||
697 | return ret; | ||
698 | } | ||
699 | |||
700 | ret = devm_gpio_request_one(&client->dev, pdata->gpio_rst, | ||
701 | GPIOF_OUT_INIT_LOW, "zforce_ts_rst"); | ||
702 | if (ret) { | ||
703 | dev_err(&client->dev, "request of gpio %d failed, %d\n", | ||
704 | pdata->gpio_rst, ret); | ||
705 | return ret; | ||
706 | } | ||
707 | |||
708 | ret = devm_add_action(&client->dev, zforce_reset, ts); | ||
709 | if (ret) { | ||
710 | dev_err(&client->dev, "failed to register reset action, %d\n", | ||
711 | ret); | ||
712 | return ret; | ||
713 | } | ||
714 | |||
715 | snprintf(ts->phys, sizeof(ts->phys), | ||
716 | "%s/input0", dev_name(&client->dev)); | ||
717 | |||
718 | input_dev = devm_input_allocate_device(&client->dev); | ||
719 | if (!input_dev) { | ||
720 | dev_err(&client->dev, "could not allocate input device\n"); | ||
721 | return -ENOMEM; | ||
722 | } | ||
723 | |||
724 | mutex_init(&ts->access_mutex); | ||
725 | mutex_init(&ts->command_mutex); | ||
726 | |||
727 | ts->pdata = pdata; | ||
728 | ts->client = client; | ||
729 | ts->input = input_dev; | ||
730 | |||
731 | input_dev->name = "Neonode zForce touchscreen"; | ||
732 | input_dev->phys = ts->phys; | ||
733 | input_dev->id.bustype = BUS_I2C; | ||
734 | |||
735 | input_dev->open = zforce_input_open; | ||
736 | input_dev->close = zforce_input_close; | ||
737 | |||
738 | __set_bit(EV_KEY, input_dev->evbit); | ||
739 | __set_bit(EV_SYN, input_dev->evbit); | ||
740 | __set_bit(EV_ABS, input_dev->evbit); | ||
741 | |||
742 | /* For multi touch */ | ||
743 | input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, | ||
744 | pdata->x_max, 0, 0); | ||
745 | input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, | ||
746 | pdata->y_max, 0, 0); | ||
747 | |||
748 | input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, | ||
749 | ZFORCE_MAX_AREA, 0, 0); | ||
750 | input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR, 0, | ||
751 | ZFORCE_MAX_AREA, 0, 0); | ||
752 | input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 0, 1, 0, 0); | ||
753 | input_mt_init_slots(input_dev, ZFORCE_REPORT_POINTS, INPUT_MT_DIRECT); | ||
754 | |||
755 | input_set_drvdata(ts->input, ts); | ||
756 | |||
757 | init_completion(&ts->command_done); | ||
758 | |||
759 | /* | ||
760 | * The zforce pulls the interrupt low when it has data ready. | ||
761 | * After it is triggered the isr thread runs until all the available | ||
762 | * packets have been read and the interrupt is high again. | ||
763 | * Therefore we can trigger the interrupt anytime it is low and do | ||
764 | * not need to limit it to the interrupt edge. | ||
765 | */ | ||
766 | ret = devm_request_threaded_irq(&client->dev, client->irq, NULL, | ||
767 | zforce_interrupt, | ||
768 | IRQF_TRIGGER_LOW | IRQF_ONESHOT, | ||
769 | input_dev->name, ts); | ||
770 | if (ret) { | ||
771 | dev_err(&client->dev, "irq %d request failed\n", client->irq); | ||
772 | return ret; | ||
773 | } | ||
774 | |||
775 | i2c_set_clientdata(client, ts); | ||
776 | |||
777 | /* let the controller boot */ | ||
778 | gpio_set_value(pdata->gpio_rst, 1); | ||
779 | |||
780 | ts->command_waiting = NOTIFICATION_BOOTCOMPLETE; | ||
781 | if (wait_for_completion_timeout(&ts->command_done, WAIT_TIMEOUT) == 0) | ||
782 | dev_warn(&client->dev, "bootcomplete timed out\n"); | ||
783 | |||
784 | /* need to start device to get version information */ | ||
785 | ret = zforce_command_wait(ts, COMMAND_INITIALIZE); | ||
786 | if (ret) { | ||
787 | dev_err(&client->dev, "unable to initialize, %d\n", ret); | ||
788 | return ret; | ||
789 | } | ||
790 | |||
791 | /* this gets the firmware version among other informations */ | ||
792 | ret = zforce_command_wait(ts, COMMAND_STATUS); | ||
793 | if (ret < 0) { | ||
794 | dev_err(&client->dev, "couldn't get status, %d\n", ret); | ||
795 | zforce_stop(ts); | ||
796 | return ret; | ||
797 | } | ||
798 | |||
799 | /* stop device and put it into sleep until it is opened */ | ||
800 | ret = zforce_stop(ts); | ||
801 | if (ret < 0) | ||
802 | return ret; | ||
803 | |||
804 | device_set_wakeup_capable(&client->dev, true); | ||
805 | |||
806 | ret = input_register_device(input_dev); | ||
807 | if (ret) { | ||
808 | dev_err(&client->dev, "could not register input device, %d\n", | ||
809 | ret); | ||
810 | return ret; | ||
811 | } | ||
812 | |||
813 | return 0; | ||
814 | } | ||
815 | |||
816 | static struct i2c_device_id zforce_idtable[] = { | ||
817 | { "zforce-ts", 0 }, | ||
818 | { } | ||
819 | }; | ||
820 | MODULE_DEVICE_TABLE(i2c, zforce_idtable); | ||
821 | |||
822 | static struct i2c_driver zforce_driver = { | ||
823 | .driver = { | ||
824 | .owner = THIS_MODULE, | ||
825 | .name = "zforce-ts", | ||
826 | .pm = &zforce_pm_ops, | ||
827 | }, | ||
828 | .probe = zforce_probe, | ||
829 | .id_table = zforce_idtable, | ||
830 | }; | ||
831 | |||
832 | module_i2c_driver(zforce_driver); | ||
833 | |||
834 | MODULE_AUTHOR("Heiko Stuebner <heiko@sntech.de>"); | ||
835 | MODULE_DESCRIPTION("zForce TouchScreen Driver"); | ||
836 | MODULE_LICENSE("GPL"); | ||
837 |
include/linux/platform_data/zforce_ts.h
File was created | 1 | /* drivers/input/touchscreen/zforce.c | |
2 | * | ||
3 | * Copyright (C) 2012-2013 MundoReader S.L. | ||
4 | * | ||
5 | * This software is licensed under the terms of the GNU General Public | ||
6 | * License version 2, as published by the Free Software Foundation, and | ||
7 | * may be copied, distributed, and modified under those terms. | ||
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 | #ifndef _LINUX_INPUT_ZFORCE_TS_H | ||
16 | #define _LINUX_INPUT_ZFORCE_TS_H | ||
17 | |||
18 | struct zforce_ts_platdata { | ||
19 | int gpio_int; | ||
20 | int gpio_rst; | ||
21 | |||
22 | unsigned int x_max; | ||
23 | unsigned int y_max; | ||
24 | }; | ||
25 | |||
26 | #endif /* _LINUX_INPUT_ZFORCE_TS_H */ | ||
27 |