This source file includes following definitions.
- ts_dmi_add_props
- ts_dmi_notifier_call
- ts_dmi_init
1
2
3
4
5
6
7
8
9
10
11 #include <linux/acpi.h>
12 #include <linux/device.h>
13 #include <linux/dmi.h>
14 #include <linux/i2c.h>
15 #include <linux/notifier.h>
16 #include <linux/property.h>
17 #include <linux/string.h>
18
19 struct ts_dmi_data {
20 const char *acpi_name;
21 const struct property_entry *properties;
22 };
23
24
25
26 static const struct property_entry chuwi_hi8_props[] = {
27 PROPERTY_ENTRY_U32("touchscreen-size-x", 1665),
28 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
29 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
30 PROPERTY_ENTRY_BOOL("silead,home-button"),
31 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi8.fw"),
32 { }
33 };
34
35 static const struct ts_dmi_data chuwi_hi8_data = {
36 .acpi_name = "MSSL0001:00",
37 .properties = chuwi_hi8_props,
38 };
39
40 static const struct property_entry chuwi_hi8_air_props[] = {
41 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728),
42 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
43 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
44 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-chuwi-hi8-air.fw"),
45 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
46 { }
47 };
48
49 static const struct ts_dmi_data chuwi_hi8_air_data = {
50 .acpi_name = "MSSL1680:00",
51 .properties = chuwi_hi8_air_props,
52 };
53
54 static const struct property_entry chuwi_hi8_pro_props[] = {
55 PROPERTY_ENTRY_U32("touchscreen-min-x", 6),
56 PROPERTY_ENTRY_U32("touchscreen-min-y", 3),
57 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728),
58 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
59 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
60 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-chuwi-hi8-pro.fw"),
61 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
62 PROPERTY_ENTRY_BOOL("silead,home-button"),
63 { }
64 };
65
66 static const struct ts_dmi_data chuwi_hi8_pro_data = {
67 .acpi_name = "MSSL1680:00",
68 .properties = chuwi_hi8_pro_props,
69 };
70
71 static const struct property_entry chuwi_hi10_air_props[] = {
72 PROPERTY_ENTRY_U32("touchscreen-size-x", 1981),
73 PROPERTY_ENTRY_U32("touchscreen-size-y", 1271),
74 PROPERTY_ENTRY_U32("touchscreen-min-x", 99),
75 PROPERTY_ENTRY_U32("touchscreen-min-y", 9),
76 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
77 PROPERTY_ENTRY_U32("touchscreen-fuzz-x", 5),
78 PROPERTY_ENTRY_U32("touchscreen-fuzz-y", 4),
79 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10-air.fw"),
80 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
81 PROPERTY_ENTRY_BOOL("silead,home-button"),
82 { }
83 };
84
85 static const struct ts_dmi_data chuwi_hi10_air_data = {
86 .acpi_name = "MSSL1680:00",
87 .properties = chuwi_hi10_air_props,
88 };
89
90 static const struct property_entry chuwi_hi10_plus_props[] = {
91 PROPERTY_ENTRY_U32("touchscreen-min-x", 0),
92 PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
93 PROPERTY_ENTRY_U32("touchscreen-size-x", 1914),
94 PROPERTY_ENTRY_U32("touchscreen-size-y", 1283),
95 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10plus.fw"),
96 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
97 PROPERTY_ENTRY_BOOL("silead,home-button"),
98 { }
99 };
100
101 static const struct ts_dmi_data chuwi_hi10_plus_data = {
102 .acpi_name = "MSSL0017:00",
103 .properties = chuwi_hi10_plus_props,
104 };
105
106 static const struct property_entry chuwi_vi8_props[] = {
107 PROPERTY_ENTRY_U32("touchscreen-min-x", 4),
108 PROPERTY_ENTRY_U32("touchscreen-min-y", 6),
109 PROPERTY_ENTRY_U32("touchscreen-size-x", 1724),
110 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
111 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
112 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-chuwi-vi8.fw"),
113 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
114 PROPERTY_ENTRY_BOOL("silead,home-button"),
115 { }
116 };
117
118 static const struct ts_dmi_data chuwi_vi8_data = {
119 .acpi_name = "MSSL1680:00",
120 .properties = chuwi_vi8_props,
121 };
122
123 static const struct property_entry chuwi_vi10_props[] = {
124 PROPERTY_ENTRY_U32("touchscreen-min-x", 0),
125 PROPERTY_ENTRY_U32("touchscreen-min-y", 4),
126 PROPERTY_ENTRY_U32("touchscreen-size-x", 1858),
127 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280),
128 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-chuwi-vi10.fw"),
129 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
130 PROPERTY_ENTRY_BOOL("silead,home-button"),
131 { }
132 };
133
134 static const struct ts_dmi_data chuwi_vi10_data = {
135 .acpi_name = "MSSL0002:00",
136 .properties = chuwi_vi10_props,
137 };
138
139 static const struct property_entry chuwi_surbook_mini_props[] = {
140 PROPERTY_ENTRY_U32("touchscreen-min-x", 88),
141 PROPERTY_ENTRY_U32("touchscreen-min-y", 13),
142 PROPERTY_ENTRY_U32("touchscreen-size-x", 2040),
143 PROPERTY_ENTRY_U32("touchscreen-size-y", 1524),
144 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-surbook-mini.fw"),
145 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
146 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
147 { }
148 };
149
150 static const struct ts_dmi_data chuwi_surbook_mini_data = {
151 .acpi_name = "MSSL1680:00",
152 .properties = chuwi_surbook_mini_props,
153 };
154
155 static const struct property_entry connect_tablet9_props[] = {
156 PROPERTY_ENTRY_U32("touchscreen-min-x", 9),
157 PROPERTY_ENTRY_U32("touchscreen-min-y", 10),
158 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664),
159 PROPERTY_ENTRY_U32("touchscreen-size-y", 880),
160 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
161 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
162 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-connect-tablet9.fw"),
163 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
164 { }
165 };
166
167 static const struct ts_dmi_data connect_tablet9_data = {
168 .acpi_name = "MSSL1680:00",
169 .properties = connect_tablet9_props,
170 };
171
172 static const struct property_entry cube_iwork8_air_props[] = {
173 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
174 PROPERTY_ENTRY_U32("touchscreen-min-y", 3),
175 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664),
176 PROPERTY_ENTRY_U32("touchscreen-size-y", 896),
177 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
178 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-cube-iwork8-air.fw"),
179 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
180 { }
181 };
182
183 static const struct ts_dmi_data cube_iwork8_air_data = {
184 .acpi_name = "MSSL1680:00",
185 .properties = cube_iwork8_air_props,
186 };
187
188 static const struct property_entry cube_knote_i1101_props[] = {
189 PROPERTY_ENTRY_U32("touchscreen-min-x", 20),
190 PROPERTY_ENTRY_U32("touchscreen-min-y", 22),
191 PROPERTY_ENTRY_U32("touchscreen-size-x", 1961),
192 PROPERTY_ENTRY_U32("touchscreen-size-y", 1513),
193 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-cube-knote-i1101.fw"),
194 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
195 PROPERTY_ENTRY_BOOL("silead,home-button"),
196 { }
197 };
198
199 static const struct ts_dmi_data cube_knote_i1101_data = {
200 .acpi_name = "MSSL1680:00",
201 .properties = cube_knote_i1101_props,
202 };
203
204 static const struct property_entry dexp_ursus_7w_props[] = {
205 PROPERTY_ENTRY_U32("touchscreen-size-x", 890),
206 PROPERTY_ENTRY_U32("touchscreen-size-y", 630),
207 PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-dexp-ursus-7w.fw"),
208 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
209 PROPERTY_ENTRY_BOOL("silead,home-button"),
210 { }
211 };
212
213 static const struct ts_dmi_data dexp_ursus_7w_data = {
214 .acpi_name = "MSSL1680:00",
215 .properties = dexp_ursus_7w_props,
216 };
217
218 static const struct property_entry digma_citi_e200_props[] = {
219 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
220 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
221 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
222 PROPERTY_ENTRY_STRING("firmware-name",
223 "gsl1686-digma_citi_e200.fw"),
224 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
225 PROPERTY_ENTRY_BOOL("silead,home-button"),
226 { }
227 };
228
229 static const struct ts_dmi_data digma_citi_e200_data = {
230 .acpi_name = "MSSL1680:00",
231 .properties = digma_citi_e200_props,
232 };
233
234 static const struct property_entry gp_electronic_t701_props[] = {
235 PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
236 PROPERTY_ENTRY_U32("touchscreen-size-y", 640),
237 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
238 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
239 PROPERTY_ENTRY_STRING("firmware-name",
240 "gsl1680-gp-electronic-t701.fw"),
241 { }
242 };
243
244 static const struct ts_dmi_data gp_electronic_t701_data = {
245 .acpi_name = "MSSL1680:00",
246 .properties = gp_electronic_t701_props,
247 };
248
249 static const struct property_entry irbis_tw90_props[] = {
250 PROPERTY_ENTRY_U32("touchscreen-size-x", 1720),
251 PROPERTY_ENTRY_U32("touchscreen-size-y", 1138),
252 PROPERTY_ENTRY_U32("touchscreen-min-x", 8),
253 PROPERTY_ENTRY_U32("touchscreen-min-y", 14),
254 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
255 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
256 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-irbis_tw90.fw"),
257 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
258 PROPERTY_ENTRY_BOOL("silead,home-button"),
259 { }
260 };
261
262 static const struct ts_dmi_data irbis_tw90_data = {
263 .acpi_name = "MSSL1680:00",
264 .properties = irbis_tw90_props,
265 };
266
267 static const struct property_entry itworks_tw891_props[] = {
268 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
269 PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
270 PROPERTY_ENTRY_U32("touchscreen-size-x", 1600),
271 PROPERTY_ENTRY_U32("touchscreen-size-y", 896),
272 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
273 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
274 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-itworks-tw891.fw"),
275 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
276 { }
277 };
278
279 static const struct ts_dmi_data itworks_tw891_data = {
280 .acpi_name = "MSSL1680:00",
281 .properties = itworks_tw891_props,
282 };
283
284 static const struct property_entry jumper_ezpad_6_pro_props[] = {
285 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
286 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
287 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-pro.fw"),
288 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
289 PROPERTY_ENTRY_BOOL("silead,home-button"),
290 { }
291 };
292
293 static const struct ts_dmi_data jumper_ezpad_6_pro_data = {
294 .acpi_name = "MSSL1680:00",
295 .properties = jumper_ezpad_6_pro_props,
296 };
297
298 static const struct property_entry jumper_ezpad_6_pro_b_props[] = {
299 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
300 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
301 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-pro-b.fw"),
302 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
303 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
304 PROPERTY_ENTRY_BOOL("silead,home-button"),
305 { }
306 };
307
308 static const struct ts_dmi_data jumper_ezpad_6_pro_b_data = {
309 .acpi_name = "MSSL1680:00",
310 .properties = jumper_ezpad_6_pro_b_props,
311 };
312
313 static const struct property_entry jumper_ezpad_mini3_props[] = {
314 PROPERTY_ENTRY_U32("touchscreen-min-x", 23),
315 PROPERTY_ENTRY_U32("touchscreen-min-y", 16),
316 PROPERTY_ENTRY_U32("touchscreen-size-x", 1700),
317 PROPERTY_ENTRY_U32("touchscreen-size-y", 1138),
318 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
319 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-jumper-ezpad-mini3.fw"),
320 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
321 { }
322 };
323
324 static const struct ts_dmi_data jumper_ezpad_mini3_data = {
325 .acpi_name = "MSSL1680:00",
326 .properties = jumper_ezpad_mini3_props,
327 };
328
329 static const struct property_entry myria_my8307_props[] = {
330 PROPERTY_ENTRY_U32("touchscreen-size-x", 1720),
331 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
332 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
333 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
334 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
335 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-myria-my8307.fw"),
336 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
337 PROPERTY_ENTRY_BOOL("silead,home-button"),
338 { }
339 };
340
341 static const struct ts_dmi_data myria_my8307_data = {
342 .acpi_name = "MSSL1680:00",
343 .properties = myria_my8307_props,
344 };
345
346 static const struct property_entry onda_obook_20_plus_props[] = {
347 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728),
348 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
349 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
350 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
351 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
352 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-onda-obook-20-plus.fw"),
353 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
354 PROPERTY_ENTRY_BOOL("silead,home-button"),
355 { }
356 };
357
358 static const struct ts_dmi_data onda_obook_20_plus_data = {
359 .acpi_name = "MSSL1680:00",
360 .properties = onda_obook_20_plus_props,
361 };
362
363 static const struct property_entry onda_v80_plus_v3_props[] = {
364 PROPERTY_ENTRY_U32("touchscreen-min-x", 22),
365 PROPERTY_ENTRY_U32("touchscreen-min-y", 15),
366 PROPERTY_ENTRY_U32("touchscreen-size-x", 1698),
367 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
368 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
369 PROPERTY_ENTRY_STRING("firmware-name",
370 "gsl3676-onda-v80-plus-v3.fw"),
371 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
372 PROPERTY_ENTRY_BOOL("silead,home-button"),
373 { }
374 };
375
376 static const struct ts_dmi_data onda_v80_plus_v3_data = {
377 .acpi_name = "MSSL1680:00",
378 .properties = onda_v80_plus_v3_props,
379 };
380
381 static const struct property_entry onda_v820w_32g_props[] = {
382 PROPERTY_ENTRY_U32("touchscreen-size-x", 1665),
383 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
384 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
385 PROPERTY_ENTRY_STRING("firmware-name",
386 "gsl1680-onda-v820w-32g.fw"),
387 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
388 PROPERTY_ENTRY_BOOL("silead,home-button"),
389 { }
390 };
391
392 static const struct ts_dmi_data onda_v820w_32g_data = {
393 .acpi_name = "MSSL1680:00",
394 .properties = onda_v820w_32g_props,
395 };
396
397 static const struct property_entry onda_v891w_v1_props[] = {
398 PROPERTY_ENTRY_U32("touchscreen-min-x", 46),
399 PROPERTY_ENTRY_U32("touchscreen-min-y", 8),
400 PROPERTY_ENTRY_U32("touchscreen-size-x", 1676),
401 PROPERTY_ENTRY_U32("touchscreen-size-y", 1130),
402 PROPERTY_ENTRY_STRING("firmware-name",
403 "gsl3680-onda-v891w-v1.fw"),
404 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
405 PROPERTY_ENTRY_BOOL("silead,home-button"),
406 { }
407 };
408
409 static const struct ts_dmi_data onda_v891w_v1_data = {
410 .acpi_name = "MSSL1680:00",
411 .properties = onda_v891w_v1_props,
412 };
413
414 static const struct property_entry onda_v891w_v3_props[] = {
415 PROPERTY_ENTRY_U32("touchscreen-min-x", 35),
416 PROPERTY_ENTRY_U32("touchscreen-min-y", 15),
417 PROPERTY_ENTRY_U32("touchscreen-size-x", 1625),
418 PROPERTY_ENTRY_U32("touchscreen-size-y", 1135),
419 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
420 PROPERTY_ENTRY_STRING("firmware-name",
421 "gsl3676-onda-v891w-v3.fw"),
422 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
423 PROPERTY_ENTRY_BOOL("silead,home-button"),
424 { }
425 };
426
427 static const struct ts_dmi_data onda_v891w_v3_data = {
428 .acpi_name = "MSSL1680:00",
429 .properties = onda_v891w_v3_props,
430 };
431
432 static const struct property_entry pipo_w2s_props[] = {
433 PROPERTY_ENTRY_U32("touchscreen-size-x", 1660),
434 PROPERTY_ENTRY_U32("touchscreen-size-y", 880),
435 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
436 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
437 PROPERTY_ENTRY_STRING("firmware-name",
438 "gsl1680-pipo-w2s.fw"),
439 { }
440 };
441
442 static const struct ts_dmi_data pipo_w2s_data = {
443 .acpi_name = "MSSL1680:00",
444 .properties = pipo_w2s_props,
445 };
446
447 static const struct property_entry pov_mobii_wintab_p800w_v20_props[] = {
448 PROPERTY_ENTRY_U32("touchscreen-min-x", 32),
449 PROPERTY_ENTRY_U32("touchscreen-min-y", 16),
450 PROPERTY_ENTRY_U32("touchscreen-size-x", 1692),
451 PROPERTY_ENTRY_U32("touchscreen-size-y", 1146),
452 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
453 PROPERTY_ENTRY_STRING("firmware-name",
454 "gsl3680-pov-mobii-wintab-p800w-v20.fw"),
455 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
456 PROPERTY_ENTRY_BOOL("silead,home-button"),
457 { }
458 };
459
460 static const struct ts_dmi_data pov_mobii_wintab_p800w_v20_data = {
461 .acpi_name = "MSSL1680:00",
462 .properties = pov_mobii_wintab_p800w_v20_props,
463 };
464
465 static const struct property_entry pov_mobii_wintab_p800w_v21_props[] = {
466 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
467 PROPERTY_ENTRY_U32("touchscreen-min-y", 8),
468 PROPERTY_ENTRY_U32("touchscreen-size-x", 1794),
469 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
470 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
471 PROPERTY_ENTRY_STRING("firmware-name",
472 "gsl3692-pov-mobii-wintab-p800w.fw"),
473 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
474 PROPERTY_ENTRY_BOOL("silead,home-button"),
475 { }
476 };
477
478 static const struct ts_dmi_data pov_mobii_wintab_p800w_v21_data = {
479 .acpi_name = "MSSL1680:00",
480 .properties = pov_mobii_wintab_p800w_v21_props,
481 };
482
483 static const struct property_entry pov_mobii_wintab_p1006w_v10_props[] = {
484 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
485 PROPERTY_ENTRY_U32("touchscreen-min-y", 3),
486 PROPERTY_ENTRY_U32("touchscreen-size-x", 1984),
487 PROPERTY_ENTRY_U32("touchscreen-size-y", 1520),
488 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
489 PROPERTY_ENTRY_STRING("firmware-name",
490 "gsl3692-pov-mobii-wintab-p1006w-v10.fw"),
491 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
492 PROPERTY_ENTRY_BOOL("silead,home-button"),
493 { }
494 };
495
496 static const struct ts_dmi_data pov_mobii_wintab_p1006w_v10_data = {
497 .acpi_name = "MSSL1680:00",
498 .properties = pov_mobii_wintab_p1006w_v10_props,
499 };
500
501 static const struct property_entry teclast_x3_plus_props[] = {
502 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
503 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
504 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-teclast-x3-plus.fw"),
505 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
506 PROPERTY_ENTRY_BOOL("silead,home-button"),
507 { }
508 };
509
510 static const struct ts_dmi_data teclast_x3_plus_data = {
511 .acpi_name = "MSSL1680:00",
512 .properties = teclast_x3_plus_props,
513 };
514
515 static const struct property_entry teclast_x98plus2_props[] = {
516 PROPERTY_ENTRY_U32("touchscreen-size-x", 2048),
517 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280),
518 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
519 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
520 PROPERTY_ENTRY_STRING("firmware-name",
521 "gsl1686-teclast_x98plus2.fw"),
522 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
523 { }
524 };
525
526 static const struct ts_dmi_data teclast_x98plus2_data = {
527 .acpi_name = "MSSL1680:00",
528 .properties = teclast_x98plus2_props,
529 };
530
531 static const struct property_entry trekstor_primebook_c11_props[] = {
532 PROPERTY_ENTRY_U32("touchscreen-size-x", 1970),
533 PROPERTY_ENTRY_U32("touchscreen-size-y", 1530),
534 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
535 PROPERTY_ENTRY_STRING("firmware-name",
536 "gsl1680-trekstor-primebook-c11.fw"),
537 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
538 PROPERTY_ENTRY_BOOL("silead,home-button"),
539 { }
540 };
541
542 static const struct ts_dmi_data trekstor_primebook_c11_data = {
543 .acpi_name = "MSSL1680:00",
544 .properties = trekstor_primebook_c11_props,
545 };
546
547 static const struct property_entry trekstor_primebook_c13_props[] = {
548 PROPERTY_ENTRY_U32("touchscreen-size-x", 2624),
549 PROPERTY_ENTRY_U32("touchscreen-size-y", 1920),
550 PROPERTY_ENTRY_STRING("firmware-name",
551 "gsl1680-trekstor-primebook-c13.fw"),
552 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
553 PROPERTY_ENTRY_BOOL("silead,home-button"),
554 { }
555 };
556
557 static const struct ts_dmi_data trekstor_primebook_c13_data = {
558 .acpi_name = "MSSL1680:00",
559 .properties = trekstor_primebook_c13_props,
560 };
561
562 static const struct property_entry trekstor_primetab_t13b_props[] = {
563 PROPERTY_ENTRY_U32("touchscreen-size-x", 2500),
564 PROPERTY_ENTRY_U32("touchscreen-size-y", 1900),
565 PROPERTY_ENTRY_STRING("firmware-name",
566 "gsl1680-trekstor-primetab-t13b.fw"),
567 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
568 PROPERTY_ENTRY_BOOL("silead,home-button"),
569 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
570 { }
571 };
572
573 static const struct ts_dmi_data trekstor_primetab_t13b_data = {
574 .acpi_name = "MSSL1680:00",
575 .properties = trekstor_primetab_t13b_props,
576 };
577
578 static const struct property_entry trekstor_surftab_twin_10_1_props[] = {
579 PROPERTY_ENTRY_U32("touchscreen-size-x", 1900),
580 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280),
581 PROPERTY_ENTRY_U32("touchscreen-inverted-y", 1),
582 PROPERTY_ENTRY_STRING("firmware-name",
583 "gsl3670-surftab-twin-10-1-st10432-8.fw"),
584 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
585 { }
586 };
587
588 static const struct ts_dmi_data trekstor_surftab_twin_10_1_data = {
589 .acpi_name = "MSSL1680:00",
590 .properties = trekstor_surftab_twin_10_1_props,
591 };
592
593 static const struct property_entry trekstor_surftab_wintron70_props[] = {
594 PROPERTY_ENTRY_U32("touchscreen-min-x", 12),
595 PROPERTY_ENTRY_U32("touchscreen-min-y", 8),
596 PROPERTY_ENTRY_U32("touchscreen-size-x", 884),
597 PROPERTY_ENTRY_U32("touchscreen-size-y", 632),
598 PROPERTY_ENTRY_STRING("firmware-name",
599 "gsl1686-surftab-wintron70-st70416-6.fw"),
600 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
601 PROPERTY_ENTRY_BOOL("silead,home-button"),
602 { }
603 };
604
605 static const struct ts_dmi_data trekstor_surftab_wintron70_data = {
606 .acpi_name = "MSSL1680:00",
607 .properties = trekstor_surftab_wintron70_props,
608 };
609
610
611 static const struct dmi_system_id touchscreen_dmi_table[] = {
612 {
613
614 .driver_data = (void *)&chuwi_hi8_data,
615 .matches = {
616 DMI_MATCH(DMI_SYS_VENDOR, "ilife"),
617 DMI_MATCH(DMI_PRODUCT_NAME, "S806"),
618 },
619 },
620 {
621
622 .driver_data = (void *)&chuwi_hi8_data,
623 .matches = {
624 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
625 DMI_MATCH(DMI_PRODUCT_NAME, "BayTrail"),
626 DMI_MATCH(DMI_BIOS_VERSION, "H1D_S806_206"),
627 },
628 },
629 {
630
631 .driver_data = (void *)&chuwi_hi8_air_data,
632 .matches = {
633 DMI_MATCH(DMI_BOARD_VENDOR, "Default string"),
634 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
635 DMI_MATCH(DMI_PRODUCT_NAME, "Hi8 Air"),
636 },
637 },
638 {
639
640 .driver_data = (void *)&chuwi_hi8_pro_data,
641 .matches = {
642 DMI_MATCH(DMI_SYS_VENDOR, "Hampoo"),
643 DMI_MATCH(DMI_PRODUCT_NAME, "X1D3_C806N"),
644 },
645 },
646 {
647
648 .driver_data = (void *)&chuwi_hi10_air_data,
649 .matches = {
650 DMI_MATCH(DMI_SYS_VENDOR, "CHUWI INNOVATION AND TECHNOLOGY(SHENZHEN)CO.LTD"),
651 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
652 DMI_MATCH(DMI_PRODUCT_SKU, "P1W6_C109D_B"),
653 },
654 },
655 {
656
657 .driver_data = (void *)&chuwi_hi10_plus_data,
658 .matches = {
659 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
660 DMI_MATCH(DMI_PRODUCT_NAME, "Hi10 plus tablet"),
661 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
662 },
663 },
664 {
665
666 .driver_data = (void *)&chuwi_vi8_data,
667 .matches = {
668 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
669 DMI_MATCH(DMI_PRODUCT_NAME, "i86"),
670 DMI_MATCH(DMI_BIOS_VERSION, "CHUWI.D86JLBNR"),
671 },
672 },
673 {
674
675 .driver_data = (void *)&chuwi_vi10_data,
676 .matches = {
677 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
678 DMI_MATCH(DMI_BOARD_NAME, "BYT-PF02"),
679 DMI_MATCH(DMI_SYS_VENDOR, "ilife"),
680 DMI_MATCH(DMI_PRODUCT_NAME, "S165"),
681 },
682 },
683 {
684
685 .driver_data = (void *)&chuwi_surbook_mini_data,
686 .matches = {
687 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
688 DMI_MATCH(DMI_PRODUCT_NAME, "C3W6_AP108_4G"),
689 },
690 },
691 {
692
693 .driver_data = (void *)&connect_tablet9_data,
694 .matches = {
695 DMI_MATCH(DMI_SYS_VENDOR, "Connect"),
696 DMI_MATCH(DMI_PRODUCT_NAME, "Tablet 9"),
697 },
698 },
699 {
700
701 .driver_data = (void *)&cube_iwork8_air_data,
702 .matches = {
703 DMI_MATCH(DMI_SYS_VENDOR, "cube"),
704 DMI_MATCH(DMI_PRODUCT_NAME, "i1-TF"),
705 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
706 },
707 },
708 {
709
710 .driver_data = (void *)&cube_knote_i1101_data,
711 .matches = {
712 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
713 DMI_MATCH(DMI_BOARD_NAME, "L1W6_I1101"),
714 DMI_MATCH(DMI_SYS_VENDOR, "ALLDOCUBE"),
715 DMI_MATCH(DMI_PRODUCT_NAME, "i1101"),
716 },
717 },
718 {
719
720 .driver_data = (void *)&dexp_ursus_7w_data,
721 .matches = {
722 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
723 DMI_MATCH(DMI_PRODUCT_NAME, "7W"),
724 },
725 },
726 {
727
728 .driver_data = (void *)&digma_citi_e200_data,
729 .matches = {
730 DMI_MATCH(DMI_SYS_VENDOR, "Digma"),
731 DMI_MATCH(DMI_PRODUCT_NAME, "CITI E200"),
732 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
733 },
734 },
735 {
736
737 .driver_data = (void *)&gp_electronic_t701_data,
738 .matches = {
739 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
740 DMI_MATCH(DMI_PRODUCT_NAME, "T701"),
741 DMI_MATCH(DMI_BIOS_VERSION, "BYT70A.YNCHENG.WIN.007"),
742 },
743 },
744 {
745
746 .driver_data = (void *)&trekstor_surftab_wintron70_data,
747 .matches = {
748 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
749 DMI_MATCH(DMI_PRODUCT_NAME, "i71c"),
750 DMI_MATCH(DMI_BIOS_VERSION, "itWORKS.G.WI71C.JGBMRB"),
751 },
752 },
753 {
754
755 .driver_data = (void *)&irbis_tw90_data,
756 .matches = {
757 DMI_MATCH(DMI_SYS_VENDOR, "IRBIS"),
758 DMI_MATCH(DMI_PRODUCT_NAME, "TW90"),
759 },
760 },
761 {
762
763 .driver_data = (void *)&itworks_tw891_data,
764 .matches = {
765 DMI_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
766 DMI_MATCH(DMI_PRODUCT_NAME, "TW891"),
767 },
768 },
769 {
770
771 .driver_data = (void *)&jumper_ezpad_6_pro_data,
772 .matches = {
773 DMI_MATCH(DMI_SYS_VENDOR, "Jumper"),
774 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"),
775 DMI_MATCH(DMI_BIOS_VERSION, "5.12"),
776
777 DMI_MATCH(DMI_BIOS_DATE, "08/18/2017"),
778 },
779 },
780 {
781
782 .driver_data = (void *)&jumper_ezpad_6_pro_b_data,
783 .matches = {
784 DMI_MATCH(DMI_SYS_VENDOR, "Jumper"),
785 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"),
786 DMI_MATCH(DMI_BIOS_VERSION, "5.12"),
787
788 DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"),
789 },
790 },
791 {
792
793 .driver_data = (void *)&jumper_ezpad_mini3_data,
794 .matches = {
795 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
796
797 DMI_MATCH(DMI_BIOS_VERSION, "jumperx.T87.KFBNEEA"),
798 },
799 },
800 {
801
802 .driver_data = (void *)&trekstor_primebook_c11_data,
803 .matches = {
804 DMI_MATCH(DMI_SYS_VENDOR, "MEDIACOM"),
805 DMI_MATCH(DMI_PRODUCT_NAME, "FlexBook edge11 - M-FBE11"),
806 },
807 },
808 {
809
810 .driver_data = (void *)&myria_my8307_data,
811 .matches = {
812 DMI_MATCH(DMI_SYS_VENDOR, "Complet Electro Serv"),
813 DMI_MATCH(DMI_PRODUCT_NAME, "MY8307"),
814 },
815 },
816 {
817
818 .driver_data = (void *)&onda_obook_20_plus_data,
819 .matches = {
820 DMI_MATCH(DMI_SYS_VENDOR, "ONDA"),
821 DMI_MATCH(DMI_PRODUCT_NAME, "OBOOK 20 PLUS"),
822 },
823 },
824 {
825
826 .driver_data = (void *)&onda_v80_plus_v3_data,
827 .matches = {
828 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONDA"),
829 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "V80 PLUS")
830 },
831 },
832 {
833
834 .driver_data = (void *)&onda_v820w_32g_data,
835 .matches = {
836 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "ONDA"),
837 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "V820w DualOS")
838 },
839 },
840 {
841
842 .driver_data = (void *)&onda_v891w_v1_data,
843 .matches = {
844 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "ONDA"),
845 DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONDA Tablet"),
846 DMI_EXACT_MATCH(DMI_BOARD_VERSION, "V001"),
847
848 DMI_EXACT_MATCH(DMI_BIOS_VERSION, "ONDA.W89EBBN08"),
849 },
850 },
851 {
852
853 .driver_data = (void *)&onda_v891w_v3_data,
854 .matches = {
855 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
856 DMI_MATCH(DMI_PRODUCT_NAME, "ONDA Tablet"),
857 DMI_MATCH(DMI_BIOS_VERSION, "ONDA.D890HBBNR0A"),
858 },
859 },
860 {
861
862 .driver_data = (void *)&pipo_w2s_data,
863 .matches = {
864 DMI_MATCH(DMI_SYS_VENDOR, "PIPO"),
865 DMI_MATCH(DMI_PRODUCT_NAME, "W2S"),
866 },
867 },
868 {
869
870 .driver_data = (void *)&trekstor_surftab_wintron70_data,
871 .matches = {
872 DMI_MATCH(DMI_SYS_VENDOR, "Shenzhen PLOYER"),
873 DMI_MATCH(DMI_PRODUCT_NAME, "MOMO7W"),
874
875 DMI_MATCH(DMI_BIOS_VERSION, "MOMO.G.WI71C.MABMRBA02"),
876 },
877 },
878 {
879
880 .driver_data = (void *)&pov_mobii_wintab_p800w_v20_data,
881 .matches = {
882 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
883 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
884 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1014"),
885
886 DMI_MATCH(DMI_BIOS_DATE, "10/24/2014"),
887 },
888 },
889 {
890
891 .driver_data = (void *)&pov_mobii_wintab_p800w_v21_data,
892 .matches = {
893 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
894 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
895 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"),
896
897 DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
898 },
899 },
900 {
901
902 .driver_data = (void *)&pov_mobii_wintab_p1006w_v10_data,
903 .matches = {
904 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"),
905 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"),
906
907 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"),
908 DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"),
909 },
910 },
911 {
912
913 .driver_data = (void *)&teclast_x3_plus_data,
914 .matches = {
915 DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"),
916 DMI_MATCH(DMI_PRODUCT_NAME, "X3 Plus"),
917 DMI_MATCH(DMI_BOARD_NAME, "X3 Plus"),
918 },
919 },
920 {
921
922 .driver_data = (void *)&teclast_x98plus2_data,
923 .matches = {
924 DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"),
925 DMI_MATCH(DMI_PRODUCT_NAME, "X98 Plus II"),
926 },
927 },
928 {
929
930 .driver_data = (void *)&trekstor_primebook_c11_data,
931 .matches = {
932 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
933 DMI_MATCH(DMI_PRODUCT_NAME, "Primebook C11"),
934 },
935 },
936 {
937
938 .driver_data = (void *)&trekstor_primebook_c11_data,
939 .matches = {
940 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
941 DMI_MATCH(DMI_PRODUCT_NAME, "PRIMEBOOK C11B"),
942 },
943 },
944 {
945
946 .driver_data = (void *)&trekstor_primebook_c13_data,
947 .matches = {
948 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
949 DMI_MATCH(DMI_PRODUCT_NAME, "Primebook C13"),
950 },
951 },
952 {
953
954 .driver_data = (void *)&trekstor_primetab_t13b_data,
955 .matches = {
956 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
957 DMI_MATCH(DMI_PRODUCT_NAME, "Primetab T13B"),
958 },
959 },
960 {
961
962 .driver_data = (void *)&trekstor_surftab_twin_10_1_data,
963 .matches = {
964 DMI_MATCH(DMI_SYS_VENDOR, "TrekStor"),
965 DMI_MATCH(DMI_PRODUCT_NAME, "SurfTab twin 10.1"),
966 },
967 },
968 {
969
970 .driver_data = (void *)&trekstor_surftab_wintron70_data,
971 .matches = {
972 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
973 DMI_MATCH(DMI_PRODUCT_NAME, "ST70416-6"),
974
975 DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA04"),
976 },
977 },
978 {
979
980 .driver_data = (void *)&trekstor_surftab_wintron70_data,
981 .matches = {
982 DMI_MATCH(DMI_SYS_VENDOR, "TrekStor"),
983 DMI_MATCH(DMI_PRODUCT_NAME,
984 "SurfTab wintron 7.0 ST70416-6"),
985
986 DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA05"),
987 },
988 },
989 {
990
991 .driver_data = (void *)&chuwi_vi8_data,
992 .matches = {
993 DMI_MATCH(DMI_SYS_VENDOR, "YOURS"),
994 DMI_MATCH(DMI_PRODUCT_NAME, "Y8W81"),
995 },
996 },
997 { },
998 };
999
1000 static const struct ts_dmi_data *ts_data;
1001
1002 static void ts_dmi_add_props(struct i2c_client *client)
1003 {
1004 struct device *dev = &client->dev;
1005 int error;
1006
1007 if (has_acpi_companion(dev) &&
1008 !strncmp(ts_data->acpi_name, client->name, I2C_NAME_SIZE)) {
1009 error = device_add_properties(dev, ts_data->properties);
1010 if (error)
1011 dev_err(dev, "failed to add properties: %d\n", error);
1012 }
1013 }
1014
1015 static int ts_dmi_notifier_call(struct notifier_block *nb,
1016 unsigned long action, void *data)
1017 {
1018 struct device *dev = data;
1019 struct i2c_client *client;
1020
1021 switch (action) {
1022 case BUS_NOTIFY_ADD_DEVICE:
1023 client = i2c_verify_client(dev);
1024 if (client)
1025 ts_dmi_add_props(client);
1026 break;
1027
1028 default:
1029 break;
1030 }
1031
1032 return 0;
1033 }
1034
1035 static struct notifier_block ts_dmi_notifier = {
1036 .notifier_call = ts_dmi_notifier_call,
1037 };
1038
1039 static int __init ts_dmi_init(void)
1040 {
1041 const struct dmi_system_id *dmi_id;
1042 int error;
1043
1044 dmi_id = dmi_first_match(touchscreen_dmi_table);
1045 if (!dmi_id)
1046 return 0;
1047
1048 ts_data = dmi_id->driver_data;
1049
1050 error = bus_register_notifier(&i2c_bus_type, &ts_dmi_notifier);
1051 if (error)
1052 pr_err("%s: failed to register i2c bus notifier: %d\n",
1053 __func__, error);
1054
1055 return error;
1056 }
1057
1058
1059
1060
1061
1062
1063 arch_initcall(ts_dmi_init);