blob: b662cb2d7cd514b16b9fc0f8a6bc49dea90a1704 [file] [log] [blame]
Thomas Gleixner2874c5f2019-05-27 08:55:01 +02001// SPDX-License-Identifier: GPL-2.0-or-later
Hans de Goedecef9dd82017-01-23 18:35:30 +01002/*
Hans de Goede74421782018-06-08 23:45:58 +02003 * Touchscreen driver DMI based configuration code
Hans de Goedecef9dd82017-01-23 18:35:30 +01004 *
5 * Copyright (c) 2017 Red Hat Inc.
6 *
Hans de Goedecef9dd82017-01-23 18:35:30 +01007 * Red Hat authors:
8 * Hans de Goede <hdegoede@redhat.com>
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
Hans de Goede74421782018-06-08 23:45:58 +020019struct ts_dmi_data {
Hans de Goedecef9dd82017-01-23 18:35:30 +010020 const char *acpi_name;
Hans de Goedeae311152017-03-22 16:55:53 +010021 const struct property_entry *properties;
Hans de Goedecef9dd82017-01-23 18:35:30 +010022};
23
Hans de Goede6a655a02018-06-08 23:45:56 +020024/* NOTE: Please keep all entries sorted alphabetically */
25
26static 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
Hans de Goede74421782018-06-08 23:45:58 +020035static const struct ts_dmi_data chuwi_hi8_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +020036 .acpi_name = "MSSL0001:00",
37 .properties = chuwi_hi8_props,
38};
39
Kai Renzigbbb97d72019-02-03 19:34:23 +010040static 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
49static const struct ts_dmi_data chuwi_hi8_air_data = {
50 .acpi_name = "MSSL1680:00",
51 .properties = chuwi_hi8_air_props,
52};
53
Hans de Goede6a655a02018-06-08 23:45:56 +020054static const struct property_entry chuwi_hi8_pro_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +020055 PROPERTY_ENTRY_U32("touchscreen-min-x", 6),
56 PROPERTY_ENTRY_U32("touchscreen-min-y", 3),
Hans de Goede6a655a02018-06-08 23:45:56 +020057 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"),
Hans de Goede41049162018-10-20 12:21:00 +020061 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
Hans de Goede6a655a02018-06-08 23:45:56 +020062 PROPERTY_ENTRY_BOOL("silead,home-button"),
63 { }
64};
65
Hans de Goede74421782018-06-08 23:45:58 +020066static const struct ts_dmi_data chuwi_hi8_pro_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +020067 .acpi_name = "MSSL1680:00",
68 .properties = chuwi_hi8_pro_props,
69};
70
Christian Oderb98dc492019-03-03 14:47:27 +010071static 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
85static const struct ts_dmi_data chuwi_hi10_air_data = {
86 .acpi_name = "MSSL1680:00",
87 .properties = chuwi_hi10_air_props,
88};
89
Hans de Goede6a655a02018-06-08 23:45:56 +020090static const struct property_entry chuwi_vi8_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +020091 PROPERTY_ENTRY_U32("touchscreen-min-x", 4),
92 PROPERTY_ENTRY_U32("touchscreen-min-y", 6),
Hans de Goede6a655a02018-06-08 23:45:56 +020093 PROPERTY_ENTRY_U32("touchscreen-size-x", 1724),
94 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
95 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
96 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-chuwi-vi8.fw"),
97 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
98 PROPERTY_ENTRY_BOOL("silead,home-button"),
99 { }
100};
101
Hans de Goede74421782018-06-08 23:45:58 +0200102static const struct ts_dmi_data chuwi_vi8_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200103 .acpi_name = "MSSL1680:00",
104 .properties = chuwi_vi8_props,
105};
106
Hans de Goedeb4c86812018-06-08 23:45:57 +0200107static const struct property_entry chuwi_vi10_props[] = {
108 PROPERTY_ENTRY_U32("touchscreen-min-x", 0),
109 PROPERTY_ENTRY_U32("touchscreen-min-y", 4),
110 PROPERTY_ENTRY_U32("touchscreen-size-x", 1858),
111 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280),
112 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-chuwi-vi10.fw"),
113 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
114 PROPERTY_ENTRY_BOOL("silead,home-button"),
115 { }
116};
117
Hans de Goede74421782018-06-08 23:45:58 +0200118static const struct ts_dmi_data chuwi_vi10_data = {
Hans de Goedeb4c86812018-06-08 23:45:57 +0200119 .acpi_name = "MSSL0002:00",
120 .properties = chuwi_vi10_props,
121};
122
Hans de Goedec72d95e2018-07-01 11:32:56 +0200123static const struct property_entry connect_tablet9_props[] = {
124 PROPERTY_ENTRY_U32("touchscreen-min-x", 9),
Hans de Goede41049162018-10-20 12:21:00 +0200125 PROPERTY_ENTRY_U32("touchscreen-min-y", 10),
Hans de Goedec72d95e2018-07-01 11:32:56 +0200126 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664),
Hans de Goede41049162018-10-20 12:21:00 +0200127 PROPERTY_ENTRY_U32("touchscreen-size-y", 880),
Hans de Goedec72d95e2018-07-01 11:32:56 +0200128 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
129 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
130 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-connect-tablet9.fw"),
131 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
132 { }
133};
134
135static const struct ts_dmi_data connect_tablet9_data = {
136 .acpi_name = "MSSL1680:00",
137 .properties = connect_tablet9_props,
138};
139
Hans de Goedeae311152017-03-22 16:55:53 +0100140static const struct property_entry cube_iwork8_air_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +0200141 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
142 PROPERTY_ENTRY_U32("touchscreen-min-y", 3),
143 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664),
144 PROPERTY_ENTRY_U32("touchscreen-size-y", 896),
Hans de Goedecef9dd82017-01-23 18:35:30 +0100145 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
146 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-cube-iwork8-air.fw"),
147 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
148 { }
149};
150
Hans de Goede74421782018-06-08 23:45:58 +0200151static const struct ts_dmi_data cube_iwork8_air_data = {
Hans de Goedecef9dd82017-01-23 18:35:30 +0100152 .acpi_name = "MSSL1680:00",
153 .properties = cube_iwork8_air_props,
154};
155
youling257cda59152018-07-31 17:32:56 +0800156static const struct property_entry cube_knote_i1101_props[] = {
157 PROPERTY_ENTRY_U32("touchscreen-min-x", 20),
158 PROPERTY_ENTRY_U32("touchscreen-min-y", 22),
159 PROPERTY_ENTRY_U32("touchscreen-size-x", 1961),
160 PROPERTY_ENTRY_U32("touchscreen-size-y", 1513),
161 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-cube-knote-i1101.fw"),
162 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
163 PROPERTY_ENTRY_BOOL("silead,home-button"),
164 { }
165};
166
167static const struct ts_dmi_data cube_knote_i1101_data = {
168 .acpi_name = "MSSL1680:00",
169 .properties = cube_knote_i1101_props,
170};
171
Hans de Goede6b8e7d82017-03-22 16:55:54 +0100172static const struct property_entry dexp_ursus_7w_props[] = {
173 PROPERTY_ENTRY_U32("touchscreen-size-x", 890),
174 PROPERTY_ENTRY_U32("touchscreen-size-y", 630),
175 PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-dexp-ursus-7w.fw"),
176 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
Hans de Goedeaaa40962017-10-19 09:17:28 +0200177 PROPERTY_ENTRY_BOOL("silead,home-button"),
Hans de Goede6b8e7d82017-03-22 16:55:54 +0100178 { }
179};
180
Hans de Goede74421782018-06-08 23:45:58 +0200181static const struct ts_dmi_data dexp_ursus_7w_data = {
Hans de Goede6b8e7d82017-03-22 16:55:54 +0100182 .acpi_name = "MSSL1680:00",
183 .properties = dexp_ursus_7w_props,
184};
185
Hans de Goede6a655a02018-06-08 23:45:56 +0200186static const struct property_entry digma_citi_e200_props[] = {
187 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
188 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
189 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
Bernhard Übelackerf4c12d42017-11-26 19:32:58 +0100190 PROPERTY_ENTRY_STRING("firmware-name",
Hans de Goede6a655a02018-06-08 23:45:56 +0200191 "gsl1686-digma_citi_e200.fw"),
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200192 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
Hans de Goedeaaa40962017-10-19 09:17:28 +0200193 PROPERTY_ENTRY_BOOL("silead,home-button"),
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200194 { }
195};
196
Hans de Goede74421782018-06-08 23:45:58 +0200197static const struct ts_dmi_data digma_citi_e200_data = {
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200198 .acpi_name = "MSSL1680:00",
Hans de Goede6a655a02018-06-08 23:45:56 +0200199 .properties = digma_citi_e200_props,
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200200};
201
Hans de Goeded9ca30b2017-05-07 14:35:15 +0200202static const struct property_entry gp_electronic_t701_props[] = {
203 PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
204 PROPERTY_ENTRY_U32("touchscreen-size-y", 640),
Hans de Goede5c24c052017-10-19 09:44:14 +0200205 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
206 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
Hans de Goeded9ca30b2017-05-07 14:35:15 +0200207 PROPERTY_ENTRY_STRING("firmware-name",
208 "gsl1680-gp-electronic-t701.fw"),
209 { }
210};
211
Hans de Goede74421782018-06-08 23:45:58 +0200212static const struct ts_dmi_data gp_electronic_t701_data = {
Hans de Goeded9ca30b2017-05-07 14:35:15 +0200213 .acpi_name = "MSSL1680:00",
214 .properties = gp_electronic_t701_props,
215};
216
Hans de Goede6a655a02018-06-08 23:45:56 +0200217static const struct property_entry itworks_tw891_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +0200218 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
219 PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
Hans de Goede6a655a02018-06-08 23:45:56 +0200220 PROPERTY_ENTRY_U32("touchscreen-size-x", 1600),
Hans de Goede41049162018-10-20 12:21:00 +0200221 PROPERTY_ENTRY_U32("touchscreen-size-y", 896),
Hans de Goede6a655a02018-06-08 23:45:56 +0200222 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
223 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
224 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-itworks-tw891.fw"),
Hans de Goede41049162018-10-20 12:21:00 +0200225 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
Hans de Goede6a655a02018-06-08 23:45:56 +0200226 { }
227};
228
Hans de Goede74421782018-06-08 23:45:58 +0200229static const struct ts_dmi_data itworks_tw891_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200230 .acpi_name = "MSSL1680:00",
231 .properties = itworks_tw891_props,
232};
233
234static const struct property_entry jumper_ezpad_6_pro_props[] = {
235 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
236 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
237 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-pro.fw"),
238 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
239 PROPERTY_ENTRY_BOOL("silead,home-button"),
240 { }
241};
242
Hans de Goede74421782018-06-08 23:45:58 +0200243static const struct ts_dmi_data jumper_ezpad_6_pro_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200244 .acpi_name = "MSSL1680:00",
245 .properties = jumper_ezpad_6_pro_props,
246};
247
Benjamin Renz504a4352019-04-29 17:46:57 +0200248static const struct property_entry jumper_ezpad_6_pro_b_props[] = {
249 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
250 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
251 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-pro-b.fw"),
252 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
253 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
254 PROPERTY_ENTRY_BOOL("silead,home-button"),
255 { }
256};
257
258static const struct ts_dmi_data jumper_ezpad_6_pro_b_data = {
259 .acpi_name = "MSSL1680:00",
260 .properties = jumper_ezpad_6_pro_b_props,
261};
262
Hans de Goede6a655a02018-06-08 23:45:56 +0200263static const struct property_entry jumper_ezpad_mini3_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +0200264 PROPERTY_ENTRY_U32("touchscreen-min-x", 23),
265 PROPERTY_ENTRY_U32("touchscreen-min-y", 16),
Hans de Goede6a655a02018-06-08 23:45:56 +0200266 PROPERTY_ENTRY_U32("touchscreen-size-x", 1700),
Hans de Goede41049162018-10-20 12:21:00 +0200267 PROPERTY_ENTRY_U32("touchscreen-size-y", 1138),
Hans de Goede6a655a02018-06-08 23:45:56 +0200268 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
269 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-jumper-ezpad-mini3.fw"),
270 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
271 { }
272};
273
Hans de Goede74421782018-06-08 23:45:58 +0200274static const struct ts_dmi_data jumper_ezpad_mini3_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200275 .acpi_name = "MSSL1680:00",
276 .properties = jumper_ezpad_mini3_props,
277};
278
Gabriel Lazare79e74a2019-03-15 15:31:14 +0200279static const struct property_entry myria_my8307_props[] = {
280 PROPERTY_ENTRY_U32("touchscreen-size-x", 1720),
281 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
282 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
283 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
284 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
285 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-myria-my8307.fw"),
286 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
287 PROPERTY_ENTRY_BOOL("silead,home-button"),
288 { }
289};
290
291static const struct ts_dmi_data myria_my8307_data = {
292 .acpi_name = "MSSL1680:00",
293 .properties = myria_my8307_props,
294};
295
Hans de Goede6a655a02018-06-08 23:45:56 +0200296static const struct property_entry onda_obook_20_plus_props[] = {
297 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728),
298 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
299 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
300 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
301 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
302 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-onda-obook-20-plus.fw"),
303 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
304 PROPERTY_ENTRY_BOOL("silead,home-button"),
305 { }
306};
307
Hans de Goede74421782018-06-08 23:45:58 +0200308static const struct ts_dmi_data onda_obook_20_plus_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200309 .acpi_name = "MSSL1680:00",
310 .properties = onda_obook_20_plus_props,
311};
312
Hans de Goede01b6b7e2018-10-10 15:16:40 +0200313static const struct property_entry onda_v80_plus_v3_props[] = {
314 PROPERTY_ENTRY_U32("touchscreen-min-x", 22),
315 PROPERTY_ENTRY_U32("touchscreen-min-y", 15),
316 PROPERTY_ENTRY_U32("touchscreen-size-x", 1698),
317 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
318 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
319 PROPERTY_ENTRY_STRING("firmware-name",
320 "gsl3676-onda-v80-plus-v3.fw"),
321 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
322 PROPERTY_ENTRY_BOOL("silead,home-button"),
323 { }
324};
325
326static const struct ts_dmi_data onda_v80_plus_v3_data = {
327 .acpi_name = "MSSL1680:00",
328 .properties = onda_v80_plus_v3_props,
329};
330
Jun Bo Biee08f572018-07-01 17:47:14 -0400331static const struct property_entry onda_v820w_32g_props[] = {
332 PROPERTY_ENTRY_U32("touchscreen-size-x", 1665),
333 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
334 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
335 PROPERTY_ENTRY_STRING("firmware-name",
336 "gsl1680-onda-v820w-32g.fw"),
337 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
338 PROPERTY_ENTRY_BOOL("silead,home-button"),
339 { }
340};
341
342static const struct ts_dmi_data onda_v820w_32g_data = {
343 .acpi_name = "MSSL1680:00",
344 .properties = onda_v820w_32g_props,
345};
346
Hans de Goede6a655a02018-06-08 23:45:56 +0200347static const struct property_entry onda_v891w_v1_props[] = {
348 PROPERTY_ENTRY_U32("touchscreen-min-x", 46),
349 PROPERTY_ENTRY_U32("touchscreen-min-y", 8),
350 PROPERTY_ENTRY_U32("touchscreen-size-x", 1676),
351 PROPERTY_ENTRY_U32("touchscreen-size-y", 1130),
352 PROPERTY_ENTRY_STRING("firmware-name",
353 "gsl3680-onda-v891w-v1.fw"),
354 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
355 PROPERTY_ENTRY_BOOL("silead,home-button"),
356 { }
357};
358
Hans de Goede74421782018-06-08 23:45:58 +0200359static const struct ts_dmi_data onda_v891w_v1_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200360 .acpi_name = "MSSL1680:00",
361 .properties = onda_v891w_v1_props,
362};
363
youling257c0d73082018-06-18 15:11:44 +0200364static const struct property_entry onda_v891w_v3_props[] = {
365 PROPERTY_ENTRY_U32("touchscreen-min-x", 35),
366 PROPERTY_ENTRY_U32("touchscreen-min-y", 15),
367 PROPERTY_ENTRY_U32("touchscreen-size-x", 1625),
368 PROPERTY_ENTRY_U32("touchscreen-size-y", 1135),
369 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
370 PROPERTY_ENTRY_STRING("firmware-name",
371 "gsl3676-onda-v891w-v3.fw"),
372 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
373 PROPERTY_ENTRY_BOOL("silead,home-button"),
374 { }
375};
376
377static const struct ts_dmi_data onda_v891w_v3_data = {
378 .acpi_name = "MSSL1680:00",
379 .properties = onda_v891w_v3_props,
380};
381
Hans de Goede13fadfa2017-06-15 08:48:32 +0200382static const struct property_entry pipo_w2s_props[] = {
383 PROPERTY_ENTRY_U32("touchscreen-size-x", 1660),
384 PROPERTY_ENTRY_U32("touchscreen-size-y", 880),
385 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
386 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
387 PROPERTY_ENTRY_STRING("firmware-name",
388 "gsl1680-pipo-w2s.fw"),
389 { }
390};
391
Hans de Goede74421782018-06-08 23:45:58 +0200392static const struct ts_dmi_data pipo_w2s_data = {
Hans de Goede13fadfa2017-06-15 08:48:32 +0200393 .acpi_name = "MSSL1680:00",
394 .properties = pipo_w2s_props,
395};
396
Hans de Goede3cd33db2018-05-30 12:43:40 +0200397static const struct property_entry pov_mobii_wintab_p800w_v20_props[] = {
398 PROPERTY_ENTRY_U32("touchscreen-min-x", 32),
399 PROPERTY_ENTRY_U32("touchscreen-min-y", 16),
400 PROPERTY_ENTRY_U32("touchscreen-size-x", 1692),
401 PROPERTY_ENTRY_U32("touchscreen-size-y", 1146),
402 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
403 PROPERTY_ENTRY_STRING("firmware-name",
404 "gsl3680-pov-mobii-wintab-p800w-v20.fw"),
405 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
406 PROPERTY_ENTRY_BOOL("silead,home-button"),
407 { }
408};
409
Hans de Goede74421782018-06-08 23:45:58 +0200410static const struct ts_dmi_data pov_mobii_wintab_p800w_v20_data = {
Hans de Goede3cd33db2018-05-30 12:43:40 +0200411 .acpi_name = "MSSL1680:00",
412 .properties = pov_mobii_wintab_p800w_v20_props,
413};
414
415static const struct property_entry pov_mobii_wintab_p800w_v21_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +0200416 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
417 PROPERTY_ENTRY_U32("touchscreen-min-y", 8),
418 PROPERTY_ENTRY_U32("touchscreen-size-x", 1794),
419 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
Hans de Goedef4d342c2017-06-15 08:48:31 +0200420 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
421 PROPERTY_ENTRY_STRING("firmware-name",
422 "gsl3692-pov-mobii-wintab-p800w.fw"),
Hans de Goede41049162018-10-20 12:21:00 +0200423 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
Hans de Goedeaaa40962017-10-19 09:17:28 +0200424 PROPERTY_ENTRY_BOOL("silead,home-button"),
Hans de Goedef4d342c2017-06-15 08:48:31 +0200425 { }
426};
427
Hans de Goede74421782018-06-08 23:45:58 +0200428static const struct ts_dmi_data pov_mobii_wintab_p800w_v21_data = {
Hans de Goedef4d342c2017-06-15 08:48:31 +0200429 .acpi_name = "MSSL1680:00",
Hans de Goede3cd33db2018-05-30 12:43:40 +0200430 .properties = pov_mobii_wintab_p800w_v21_props,
Hans de Goedef4d342c2017-06-15 08:48:31 +0200431};
432
Hans de Goede8335ebc2018-12-20 22:21:50 +0100433static const struct property_entry pov_mobii_wintab_p1006w_v10_props[] = {
434 PROPERTY_ENTRY_U32("touchscreen-min-x", 1),
435 PROPERTY_ENTRY_U32("touchscreen-min-y", 3),
436 PROPERTY_ENTRY_U32("touchscreen-size-x", 1984),
437 PROPERTY_ENTRY_U32("touchscreen-size-y", 1520),
438 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
439 PROPERTY_ENTRY_STRING("firmware-name",
440 "gsl3692-pov-mobii-wintab-p1006w-v10.fw"),
441 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
442 PROPERTY_ENTRY_BOOL("silead,home-button"),
443 { }
444};
445
446static const struct ts_dmi_data pov_mobii_wintab_p1006w_v10_data = {
447 .acpi_name = "MSSL1680:00",
448 .properties = pov_mobii_wintab_p1006w_v10_props,
449};
450
Hans de Goede6a655a02018-06-08 23:45:56 +0200451static const struct property_entry teclast_x3_plus_props[] = {
Sergey Tshovrebov3fcf2b22017-10-27 12:27:07 +0200452 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980),
453 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500),
Hans de Goede6a655a02018-06-08 23:45:56 +0200454 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-teclast-x3-plus.fw"),
Sergey Tshovrebov3fcf2b22017-10-27 12:27:07 +0200455 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
456 PROPERTY_ENTRY_BOOL("silead,home-button"),
457 { }
458};
459
Hans de Goede74421782018-06-08 23:45:58 +0200460static const struct ts_dmi_data teclast_x3_plus_data = {
Sergey Tshovrebov3fcf2b22017-10-27 12:27:07 +0200461 .acpi_name = "MSSL1680:00",
Hans de Goede6a655a02018-06-08 23:45:56 +0200462 .properties = teclast_x3_plus_props,
Hans de Goede2aeb2c32017-12-25 13:45:25 +0100463};
464
Paul Cercueila346aa22018-01-02 19:39:27 +0100465static const struct property_entry teclast_x98plus2_props[] = {
466 PROPERTY_ENTRY_U32("touchscreen-size-x", 2048),
467 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280),
468 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
469 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
470 PROPERTY_ENTRY_STRING("firmware-name",
471 "gsl1686-teclast_x98plus2.fw"),
472 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
473 { }
474};
475
Hans de Goede74421782018-06-08 23:45:58 +0200476static const struct ts_dmi_data teclast_x98plus2_data = {
Paul Cercueila346aa22018-01-02 19:39:27 +0100477 .acpi_name = "MSSL1680:00",
478 .properties = teclast_x98plus2_props,
479};
480
Hans de Goedecacad0b2018-10-04 14:34:45 +0200481static const struct property_entry trekstor_primebook_c11_props[] = {
482 PROPERTY_ENTRY_U32("touchscreen-size-x", 1970),
483 PROPERTY_ENTRY_U32("touchscreen-size-y", 1530),
484 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
485 PROPERTY_ENTRY_STRING("firmware-name",
486 "gsl1680-trekstor-primebook-c11.fw"),
487 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
488 PROPERTY_ENTRY_BOOL("silead,home-button"),
489 { }
490};
491
492static const struct ts_dmi_data trekstor_primebook_c11_data = {
493 .acpi_name = "MSSL1680:00",
494 .properties = trekstor_primebook_c11_props,
495};
496
Hans de Goede6a655a02018-06-08 23:45:56 +0200497static const struct property_entry trekstor_primebook_c13_props[] = {
498 PROPERTY_ENTRY_U32("touchscreen-size-x", 2624),
499 PROPERTY_ENTRY_U32("touchscreen-size-y", 1920),
Hans de Goedeadf762d2018-05-30 12:43:41 +0200500 PROPERTY_ENTRY_STRING("firmware-name",
Hans de Goede6a655a02018-06-08 23:45:56 +0200501 "gsl1680-trekstor-primebook-c13.fw"),
Hans de Goedeadf762d2018-05-30 12:43:41 +0200502 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
503 PROPERTY_ENTRY_BOOL("silead,home-button"),
504 { }
505};
506
Hans de Goede74421782018-06-08 23:45:58 +0200507static const struct ts_dmi_data trekstor_primebook_c13_data = {
Hans de Goedeadf762d2018-05-30 12:43:41 +0200508 .acpi_name = "MSSL1680:00",
Hans de Goede6a655a02018-06-08 23:45:56 +0200509 .properties = trekstor_primebook_c13_props,
Hans de Goedeadf762d2018-05-30 12:43:41 +0200510};
511
Marian Cepok30394a82018-10-08 09:25:05 +0200512static const struct property_entry trekstor_primetab_t13b_props[] = {
513 PROPERTY_ENTRY_U32("touchscreen-size-x", 2500),
514 PROPERTY_ENTRY_U32("touchscreen-size-y", 1900),
515 PROPERTY_ENTRY_STRING("firmware-name",
516 "gsl1680-trekstor-primetab-t13b.fw"),
517 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
518 PROPERTY_ENTRY_BOOL("silead,home-button"),
519 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
520 { }
521};
522
523static const struct ts_dmi_data trekstor_primetab_t13b_data = {
524 .acpi_name = "MSSL1680:00",
525 .properties = trekstor_primetab_t13b_props,
526};
527
Hans de Goede6a655a02018-06-08 23:45:56 +0200528static const struct property_entry trekstor_surftab_twin_10_1_props[] = {
529 PROPERTY_ENTRY_U32("touchscreen-size-x", 1900),
530 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280),
531 PROPERTY_ENTRY_U32("touchscreen-inverted-y", 1),
532 PROPERTY_ENTRY_STRING("firmware-name",
533 "gsl3670-surftab-twin-10-1-st10432-8.fw"),
534 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
535 { }
536};
537
Hans de Goede74421782018-06-08 23:45:58 +0200538static const struct ts_dmi_data trekstor_surftab_twin_10_1_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200539 .acpi_name = "MSSL1680:00",
540 .properties = trekstor_surftab_twin_10_1_props,
541};
542
543static const struct property_entry trekstor_surftab_wintron70_props[] = {
Hans de Goede41049162018-10-20 12:21:00 +0200544 PROPERTY_ENTRY_U32("touchscreen-min-x", 12),
545 PROPERTY_ENTRY_U32("touchscreen-min-y", 8),
Hans de Goede6a655a02018-06-08 23:45:56 +0200546 PROPERTY_ENTRY_U32("touchscreen-size-x", 884),
547 PROPERTY_ENTRY_U32("touchscreen-size-y", 632),
548 PROPERTY_ENTRY_STRING("firmware-name",
549 "gsl1686-surftab-wintron70-st70416-6.fw"),
550 PROPERTY_ENTRY_U32("silead,max-fingers", 10),
551 PROPERTY_ENTRY_BOOL("silead,home-button"),
552 { }
553};
554
Hans de Goede74421782018-06-08 23:45:58 +0200555static const struct ts_dmi_data trekstor_surftab_wintron70_data = {
Hans de Goede6a655a02018-06-08 23:45:56 +0200556 .acpi_name = "MSSL1680:00",
557 .properties = trekstor_surftab_wintron70_props,
558};
559
560/* NOTE: Please keep this table sorted alphabetically */
Hans de Goede74421782018-06-08 23:45:58 +0200561static const struct dmi_system_id touchscreen_dmi_table[] = {
Hans de Goedecef9dd82017-01-23 18:35:30 +0100562 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200563 /* Chuwi Hi8 */
564 .driver_data = (void *)&chuwi_hi8_data,
565 .matches = {
566 DMI_MATCH(DMI_SYS_VENDOR, "ilife"),
567 DMI_MATCH(DMI_PRODUCT_NAME, "S806"),
568 },
569 },
570 {
571 /* Chuwi Hi8 (H1D_S806_206) */
572 .driver_data = (void *)&chuwi_hi8_data,
573 .matches = {
574 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
575 DMI_MATCH(DMI_PRODUCT_NAME, "BayTrail"),
576 DMI_MATCH(DMI_BIOS_VERSION, "H1D_S806_206"),
577 },
578 },
579 {
Kai Renzigbbb97d72019-02-03 19:34:23 +0100580 /* Chuwi Hi8 Air (CWI543) */
581 .driver_data = (void *)&chuwi_hi8_air_data,
582 .matches = {
583 DMI_MATCH(DMI_BOARD_VENDOR, "Default string"),
584 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
585 DMI_MATCH(DMI_PRODUCT_NAME, "Hi8 Air"),
586 },
587 },
588 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200589 /* Chuwi Hi8 Pro (CWI513) */
590 .driver_data = (void *)&chuwi_hi8_pro_data,
591 .matches = {
592 DMI_MATCH(DMI_SYS_VENDOR, "Hampoo"),
593 DMI_MATCH(DMI_PRODUCT_NAME, "X1D3_C806N"),
594 },
595 },
596 {
Christian Oderb98dc492019-03-03 14:47:27 +0100597 /* Chuwi Hi10 Air */
598 .driver_data = (void *)&chuwi_hi10_air_data,
599 .matches = {
600 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
601 DMI_MATCH(DMI_PRODUCT_SKU, "P1W6_C109D_B"),
602 },
603 },
604 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200605 /* Chuwi Vi8 (CWI506) */
606 .driver_data = (void *)&chuwi_vi8_data,
607 .matches = {
608 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
609 DMI_MATCH(DMI_PRODUCT_NAME, "i86"),
610 DMI_MATCH(DMI_BIOS_VERSION, "CHUWI.D86JLBNR"),
611 },
612 },
613 {
Hans de Goedeb4c86812018-06-08 23:45:57 +0200614 /* Chuwi Vi10 (CWI505) */
615 .driver_data = (void *)&chuwi_vi10_data,
616 .matches = {
617 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
618 DMI_MATCH(DMI_BOARD_NAME, "BYT-PF02"),
619 DMI_MATCH(DMI_SYS_VENDOR, "ilife"),
620 DMI_MATCH(DMI_PRODUCT_NAME, "S165"),
621 },
622 },
623 {
Hans de Goedec72d95e2018-07-01 11:32:56 +0200624 /* Connect Tablet 9 */
625 .driver_data = (void *)&connect_tablet9_data,
626 .matches = {
627 DMI_MATCH(DMI_SYS_VENDOR, "Connect"),
628 DMI_MATCH(DMI_PRODUCT_NAME, "Tablet 9"),
629 },
630 },
631 {
Hans de Goedecef9dd82017-01-23 18:35:30 +0100632 /* CUBE iwork8 Air */
633 .driver_data = (void *)&cube_iwork8_air_data,
634 .matches = {
635 DMI_MATCH(DMI_SYS_VENDOR, "cube"),
636 DMI_MATCH(DMI_PRODUCT_NAME, "i1-TF"),
637 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
638 },
639 },
640 {
youling257cda59152018-07-31 17:32:56 +0800641 /* Cube KNote i1101 */
642 .driver_data = (void *)&cube_knote_i1101_data,
643 .matches = {
644 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
645 DMI_MATCH(DMI_BOARD_NAME, "L1W6_I1101"),
646 DMI_MATCH(DMI_SYS_VENDOR, "ALLDOCUBE"),
647 DMI_MATCH(DMI_PRODUCT_NAME, "i1101"),
648 },
649 },
650 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200651 /* DEXP Ursus 7W */
652 .driver_data = (void *)&dexp_ursus_7w_data,
Hans de Goedecef9dd82017-01-23 18:35:30 +0100653 .matches = {
654 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
Hans de Goede6a655a02018-06-08 23:45:56 +0200655 DMI_MATCH(DMI_PRODUCT_NAME, "7W"),
656 },
657 },
658 {
659 /* Digma Citi E200 */
660 .driver_data = (void *)&digma_citi_e200_data,
661 .matches = {
662 DMI_MATCH(DMI_SYS_VENDOR, "Digma"),
663 DMI_MATCH(DMI_PRODUCT_NAME, "CITI E200"),
664 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
665 },
666 },
667 {
668 /* GP-electronic T701 */
669 .driver_data = (void *)&gp_electronic_t701_data,
670 .matches = {
671 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
672 DMI_MATCH(DMI_PRODUCT_NAME, "T701"),
673 DMI_MATCH(DMI_BIOS_VERSION, "BYT70A.YNCHENG.WIN.007"),
674 },
675 },
676 {
677 /* I.T.Works TW701 (same hardware as the Trekstor ST70416-6) */
678 .driver_data = (void *)&trekstor_surftab_wintron70_data,
679 .matches = {
680 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
681 DMI_MATCH(DMI_PRODUCT_NAME, "i71c"),
682 DMI_MATCH(DMI_BIOS_VERSION, "itWORKS.G.WI71C.JGBMRB"),
683 },
684 },
685 {
686 /* I.T.Works TW891 */
687 .driver_data = (void *)&itworks_tw891_data,
688 .matches = {
689 DMI_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
690 DMI_MATCH(DMI_PRODUCT_NAME, "TW891"),
Hans de Goedecef9dd82017-01-23 18:35:30 +0100691 },
692 },
Hans de Goede6b8e7d82017-03-22 16:55:54 +0100693 {
Hans de Goede828615f2018-05-30 12:43:39 +0200694 /* Jumper EZpad 6 Pro */
695 .driver_data = (void *)&jumper_ezpad_6_pro_data,
696 .matches = {
697 DMI_MATCH(DMI_SYS_VENDOR, "Jumper"),
698 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"),
699 DMI_MATCH(DMI_BIOS_VERSION, "5.12"),
700 /* Above matches are too generic, add bios-date match */
701 DMI_MATCH(DMI_BIOS_DATE, "08/18/2017"),
702 },
703 },
704 {
Benjamin Renz504a4352019-04-29 17:46:57 +0200705 /* Jumper EZpad 6 Pro B */
706 .driver_data = (void *)&jumper_ezpad_6_pro_b_data,
707 .matches = {
708 DMI_MATCH(DMI_SYS_VENDOR, "Jumper"),
709 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"),
710 DMI_MATCH(DMI_BIOS_VERSION, "5.12"),
711 /* Above matches are too generic, add bios-date match */
712 DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"),
713 },
714 },
715 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200716 /* Jumper EZpad mini3 */
717 .driver_data = (void *)&jumper_ezpad_mini3_data,
Hans de Goede6b8e7d82017-03-22 16:55:54 +0100718 .matches = {
719 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
Hans de Goede6a655a02018-06-08 23:45:56 +0200720 /* jumperx.T87.KFBNEEA02 with the version-nr dropped */
721 DMI_MATCH(DMI_BIOS_VERSION, "jumperx.T87.KFBNEEA"),
722 },
723 },
724 {
Hans de Goedef25b6302018-12-04 10:20:04 +0100725 /* Mediacom Flexbook Edge 11 (same hw as TS Primebook C11) */
726 .driver_data = (void *)&trekstor_primebook_c11_data,
727 .matches = {
728 DMI_MATCH(DMI_SYS_VENDOR, "MEDIACOM"),
729 DMI_MATCH(DMI_PRODUCT_NAME, "FlexBook edge11 - M-FBE11"),
730 },
731 },
732 {
Gabriel Lazare79e74a2019-03-15 15:31:14 +0200733 /* Myria MY8307 */
734 .driver_data = (void *)&myria_my8307_data,
735 .matches = {
736 DMI_MATCH(DMI_SYS_VENDOR, "Complet Electro Serv"),
737 DMI_MATCH(DMI_PRODUCT_NAME, "MY8307"),
738 },
739 },
740 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200741 /* Onda oBook 20 Plus */
742 .driver_data = (void *)&onda_obook_20_plus_data,
743 .matches = {
744 DMI_MATCH(DMI_SYS_VENDOR, "ONDA"),
745 DMI_MATCH(DMI_PRODUCT_NAME, "OBOOK 20 PLUS"),
746 },
747 },
748 {
Hans de Goede01b6b7e2018-10-10 15:16:40 +0200749 /* ONDA V80 plus v3 (P80PSBG9V3A01501) */
750 .driver_data = (void *)&onda_v80_plus_v3_data,
751 .matches = {
752 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONDA"),
753 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "V80 PLUS")
754 },
755 },
756 {
Jun Bo Biee08f572018-07-01 17:47:14 -0400757 /* ONDA V820w DualOS */
758 .driver_data = (void *)&onda_v820w_32g_data,
759 .matches = {
760 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "ONDA"),
761 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "V820w DualOS")
762 },
763 },
764 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200765 /* ONDA V891w revision P891WBEBV1B00 aka v1 */
766 .driver_data = (void *)&onda_v891w_v1_data,
767 .matches = {
768 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "ONDA"),
769 DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONDA Tablet"),
770 DMI_EXACT_MATCH(DMI_BOARD_VERSION, "V001"),
771 /* Exact match, different versions need different fw */
772 DMI_EXACT_MATCH(DMI_BIOS_VERSION, "ONDA.W89EBBN08"),
773 },
774 },
775 {
youling257c0d73082018-06-18 15:11:44 +0200776 /* ONDA V891w Dual OS P891DCF2V1A01274 64GB */
777 .driver_data = (void *)&onda_v891w_v3_data,
778 .matches = {
779 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
780 DMI_MATCH(DMI_PRODUCT_NAME, "ONDA Tablet"),
781 DMI_MATCH(DMI_BIOS_VERSION, "ONDA.D890HBBNR0A"),
782 },
783 },
784 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200785 /* Pipo W2S */
786 .driver_data = (void *)&pipo_w2s_data,
787 .matches = {
788 DMI_MATCH(DMI_SYS_VENDOR, "PIPO"),
789 DMI_MATCH(DMI_PRODUCT_NAME, "W2S"),
790 },
791 },
792 {
793 /* Ployer Momo7w (same hardware as the Trekstor ST70416-6) */
794 .driver_data = (void *)&trekstor_surftab_wintron70_data,
795 .matches = {
796 DMI_MATCH(DMI_SYS_VENDOR, "Shenzhen PLOYER"),
797 DMI_MATCH(DMI_PRODUCT_NAME, "MOMO7W"),
798 /* Exact match, different versions need different fw */
799 DMI_MATCH(DMI_BIOS_VERSION, "MOMO.G.WI71C.MABMRBA02"),
800 },
801 },
802 {
803 /* Point of View mobii wintab p800w (v2.0) */
804 .driver_data = (void *)&pov_mobii_wintab_p800w_v20_data,
805 .matches = {
806 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
807 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
808 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1014"),
809 /* Above matches are too generic, add bios-date match */
810 DMI_MATCH(DMI_BIOS_DATE, "10/24/2014"),
811 },
812 },
813 {
814 /* Point of View mobii wintab p800w (v2.1) */
815 .driver_data = (void *)&pov_mobii_wintab_p800w_v21_data,
816 .matches = {
817 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
818 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
819 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"),
820 /* Above matches are too generic, add bios-date match */
821 DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
822 },
823 },
824 {
Hans de Goede8335ebc2018-12-20 22:21:50 +0100825 /* Point of View mobii wintab p1006w (v1.0) */
826 .driver_data = (void *)&pov_mobii_wintab_p1006w_v10_data,
827 .matches = {
828 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"),
829 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"),
830 /* Note 105b is Foxcon's USB/PCI vendor id */
831 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"),
832 DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"),
833 },
834 },
835 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200836 /* Teclast X3 Plus */
837 .driver_data = (void *)&teclast_x3_plus_data,
838 .matches = {
839 DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"),
840 DMI_MATCH(DMI_PRODUCT_NAME, "X3 Plus"),
841 DMI_MATCH(DMI_BOARD_NAME, "X3 Plus"),
842 },
843 },
844 {
845 /* Teclast X98 Plus II */
846 .driver_data = (void *)&teclast_x98plus2_data,
847 .matches = {
848 DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"),
849 DMI_MATCH(DMI_PRODUCT_NAME, "X98 Plus II"),
850 },
851 },
852 {
Hans de Goedecacad0b2018-10-04 14:34:45 +0200853 /* Trekstor Primebook C11 */
854 .driver_data = (void *)&trekstor_primebook_c11_data,
855 .matches = {
856 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
857 DMI_MATCH(DMI_PRODUCT_NAME, "Primebook C11"),
858 },
859 },
860 {
Hans de Goede6a655a02018-06-08 23:45:56 +0200861 /* Trekstor Primebook C13 */
862 .driver_data = (void *)&trekstor_primebook_c13_data,
863 .matches = {
864 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
865 DMI_MATCH(DMI_PRODUCT_NAME, "Primebook C13"),
Hans de Goede6b8e7d82017-03-22 16:55:54 +0100866 },
867 },
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200868 {
Marian Cepok30394a82018-10-08 09:25:05 +0200869 /* Trekstor Primetab T13B */
870 .driver_data = (void *)&trekstor_primetab_t13b_data,
871 .matches = {
872 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"),
873 DMI_MATCH(DMI_PRODUCT_NAME, "Primetab T13B"),
874 },
875 },
876 {
Bernhard Übelackerf4c12d42017-11-26 19:32:58 +0100877 /* TrekStor SurfTab twin 10.1 ST10432-8 */
Hans de Goeded6b0d7d2018-06-08 23:45:55 +0200878 .driver_data = (void *)&trekstor_surftab_twin_10_1_data,
Bernhard Übelackerf4c12d42017-11-26 19:32:58 +0100879 .matches = {
880 DMI_MATCH(DMI_SYS_VENDOR, "TrekStor"),
881 DMI_MATCH(DMI_PRODUCT_NAME, "SurfTab twin 10.1"),
882 },
883 },
884 {
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200885 /* Trekstor Surftab Wintron 7.0 ST70416-6 */
Hans de Goeded6b0d7d2018-06-08 23:45:55 +0200886 .driver_data = (void *)&trekstor_surftab_wintron70_data,
Hans de Goede5b7bb3a2017-04-09 11:07:44 +0200887 .matches = {
888 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
889 DMI_MATCH(DMI_PRODUCT_NAME, "ST70416-6"),
890 /* Exact match, different versions need different fw */
891 DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA04"),
892 },
893 },
Hans de Goeded9ca30b2017-05-07 14:35:15 +0200894 {
Hans de Goede4245c152018-01-16 20:24:15 +0100895 /* Trekstor Surftab Wintron 7.0 ST70416-6, newer BIOS */
Hans de Goeded6b0d7d2018-06-08 23:45:55 +0200896 .driver_data = (void *)&trekstor_surftab_wintron70_data,
Hans de Goede4245c152018-01-16 20:24:15 +0100897 .matches = {
898 DMI_MATCH(DMI_SYS_VENDOR, "TrekStor"),
899 DMI_MATCH(DMI_PRODUCT_NAME,
900 "SurfTab wintron 7.0 ST70416-6"),
901 /* Exact match, different versions need different fw */
902 DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA05"),
903 },
904 },
905 {
Hans de Goede24e2bb32018-03-09 15:03:58 +0100906 /* Yours Y8W81, same case and touchscreen as Chuwi Vi8 */
907 .driver_data = (void *)&chuwi_vi8_data,
908 .matches = {
909 DMI_MATCH(DMI_SYS_VENDOR, "YOURS"),
910 DMI_MATCH(DMI_PRODUCT_NAME, "Y8W81"),
911 },
912 },
Hans de Goedecef9dd82017-01-23 18:35:30 +0100913 { },
914};
915
Hans de Goede74421782018-06-08 23:45:58 +0200916static const struct ts_dmi_data *ts_data;
Dmitry Torokhovf22265b2017-04-03 20:25:14 -0700917
Hans de Goede74421782018-06-08 23:45:58 +0200918static void ts_dmi_add_props(struct i2c_client *client)
Hans de Goedecef9dd82017-01-23 18:35:30 +0100919{
Dmitry Torokhove1053962017-04-03 20:25:13 -0700920 struct device *dev = &client->dev;
Hans de Goedecef9dd82017-01-23 18:35:30 +0100921 int error;
922
Hans de Goedecef9dd82017-01-23 18:35:30 +0100923 if (has_acpi_companion(dev) &&
Hans de Goede74421782018-06-08 23:45:58 +0200924 !strncmp(ts_data->acpi_name, client->name, I2C_NAME_SIZE)) {
925 error = device_add_properties(dev, ts_data->properties);
Hans de Goedecef9dd82017-01-23 18:35:30 +0100926 if (error)
927 dev_err(dev, "failed to add properties: %d\n", error);
928 }
929}
930
Hans de Goede74421782018-06-08 23:45:58 +0200931static int ts_dmi_notifier_call(struct notifier_block *nb,
Hans de Goedecef9dd82017-01-23 18:35:30 +0100932 unsigned long action, void *data)
933{
934 struct device *dev = data;
Dmitry Torokhove1053962017-04-03 20:25:13 -0700935 struct i2c_client *client;
Hans de Goedecef9dd82017-01-23 18:35:30 +0100936
937 switch (action) {
938 case BUS_NOTIFY_ADD_DEVICE:
Dmitry Torokhove1053962017-04-03 20:25:13 -0700939 client = i2c_verify_client(dev);
940 if (client)
Hans de Goede74421782018-06-08 23:45:58 +0200941 ts_dmi_add_props(client);
Hans de Goedecef9dd82017-01-23 18:35:30 +0100942 break;
943
944 default:
945 break;
946 }
947
948 return 0;
949}
950
Hans de Goede74421782018-06-08 23:45:58 +0200951static struct notifier_block ts_dmi_notifier = {
952 .notifier_call = ts_dmi_notifier_call,
Hans de Goedecef9dd82017-01-23 18:35:30 +0100953};
954
Hans de Goede74421782018-06-08 23:45:58 +0200955static int __init ts_dmi_init(void)
Hans de Goedecef9dd82017-01-23 18:35:30 +0100956{
Dmitry Torokhovf22265b2017-04-03 20:25:14 -0700957 const struct dmi_system_id *dmi_id;
Hans de Goedecef9dd82017-01-23 18:35:30 +0100958 int error;
959
Hans de Goede74421782018-06-08 23:45:58 +0200960 dmi_id = dmi_first_match(touchscreen_dmi_table);
Dmitry Torokhovf22265b2017-04-03 20:25:14 -0700961 if (!dmi_id)
962 return 0; /* Not an error */
963
Hans de Goede74421782018-06-08 23:45:58 +0200964 ts_data = dmi_id->driver_data;
Dmitry Torokhovf22265b2017-04-03 20:25:14 -0700965
Hans de Goede74421782018-06-08 23:45:58 +0200966 error = bus_register_notifier(&i2c_bus_type, &ts_dmi_notifier);
Hans de Goedecef9dd82017-01-23 18:35:30 +0100967 if (error)
968 pr_err("%s: failed to register i2c bus notifier: %d\n",
969 __func__, error);
970
971 return error;
972}
973
974/*
975 * We are registering out notifier after i2c core is initialized and i2c bus
976 * itself is ready (which happens at postcore initcall level), but before
977 * ACPI starts enumerating devices (at subsys initcall level).
978 */
Hans de Goede74421782018-06-08 23:45:58 +0200979arch_initcall(ts_dmi_init);