1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Touchscreen driver DMI based configuration code 4 * 5 * Copyright (c) 2017 Red Hat Inc. 6 * 7 * 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/efi_embedded_fw.h> 15#include <linux/i2c.h> 16#include <linux/notifier.h> 17#include <linux/property.h> 18#include <linux/string.h> 19 20struct ts_dmi_data { 21 /* The EFI embedded-fw code expects this to be the first member! */ 22 struct efi_embedded_fw_desc embedded_fw; 23 const char *acpi_name; 24 const struct property_entry *properties; 25}; 26 27/* NOTE: Please keep all entries sorted alphabetically */ 28 29static const struct property_entry chuwi_hi8_props[] = { 30 PROPERTY_ENTRY_U32("touchscreen-size-x", 1665), 31 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 32 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 33 PROPERTY_ENTRY_BOOL("silead,home-button"), 34 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi8.fw"), 35 { } 36}; 37 38static const struct ts_dmi_data chuwi_hi8_data = { 39 .acpi_name = "MSSL0001:00", 40 .properties = chuwi_hi8_props, 41}; 42 43static const struct property_entry chuwi_hi8_air_props[] = { 44 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), 45 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148), 46 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 47 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-chuwi-hi8-air.fw"), 48 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 49 { } 50}; 51 52static const struct ts_dmi_data chuwi_hi8_air_data = { 53 .acpi_name = "MSSL1680:00", 54 .properties = chuwi_hi8_air_props, 55}; 56 57static const struct property_entry chuwi_hi8_pro_props[] = { 58 PROPERTY_ENTRY_U32("touchscreen-min-x", 6), 59 PROPERTY_ENTRY_U32("touchscreen-min-y", 3), 60 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), 61 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148), 62 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 63 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-chuwi-hi8-pro.fw"), 64 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 65 PROPERTY_ENTRY_BOOL("silead,home-button"), 66 { } 67}; 68 69static const struct ts_dmi_data chuwi_hi8_pro_data = { 70 .embedded_fw = { 71 .name = "silead/gsl3680-chuwi-hi8-pro.fw", 72 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 73 .length = 39864, 74 .sha256 = { 0xc0, 0x88, 0xc5, 0xef, 0xd1, 0x70, 0x77, 0x59, 75 0x4e, 0xe9, 0xc4, 0xd8, 0x2e, 0xcd, 0xbf, 0x95, 76 0x32, 0xd9, 0x03, 0x28, 0x0d, 0x48, 0x9f, 0x92, 77 0x35, 0x37, 0xf6, 0x8b, 0x2a, 0xe4, 0x73, 0xff }, 78 }, 79 .acpi_name = "MSSL1680:00", 80 .properties = chuwi_hi8_pro_props, 81}; 82 83static const struct property_entry chuwi_hi10_air_props[] = { 84 PROPERTY_ENTRY_U32("touchscreen-size-x", 1981), 85 PROPERTY_ENTRY_U32("touchscreen-size-y", 1271), 86 PROPERTY_ENTRY_U32("touchscreen-min-x", 99), 87 PROPERTY_ENTRY_U32("touchscreen-min-y", 9), 88 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 89 PROPERTY_ENTRY_U32("touchscreen-fuzz-x", 5), 90 PROPERTY_ENTRY_U32("touchscreen-fuzz-y", 4), 91 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10-air.fw"), 92 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 93 PROPERTY_ENTRY_BOOL("silead,home-button"), 94 { } 95}; 96 97static const struct ts_dmi_data chuwi_hi10_air_data = { 98 .acpi_name = "MSSL1680:00", 99 .properties = chuwi_hi10_air_props, 100}; 101 102static const struct property_entry chuwi_hi10_plus_props[] = { 103 PROPERTY_ENTRY_U32("touchscreen-min-x", 12), 104 PROPERTY_ENTRY_U32("touchscreen-min-y", 10), 105 PROPERTY_ENTRY_U32("touchscreen-size-x", 1908), 106 PROPERTY_ENTRY_U32("touchscreen-size-y", 1270), 107 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10plus.fw"), 108 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 109 PROPERTY_ENTRY_BOOL("silead,home-button"), 110 { } 111}; 112 113static const struct ts_dmi_data chuwi_hi10_plus_data = { 114 .embedded_fw = { 115 .name = "silead/gsl1680-chuwi-hi10plus.fw", 116 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 117 .length = 34056, 118 .sha256 = { 0xfd, 0x0a, 0x08, 0x08, 0x3c, 0xa6, 0x34, 0x4e, 119 0x2c, 0x49, 0x9c, 0xcd, 0x7d, 0x44, 0x9d, 0x38, 120 0x10, 0x68, 0xb5, 0xbd, 0xb7, 0x2a, 0x63, 0xb5, 121 0x67, 0x0b, 0x96, 0xbd, 0x89, 0x67, 0x85, 0x09 }, 122 }, 123 .acpi_name = "MSSL0017:00", 124 .properties = chuwi_hi10_plus_props, 125}; 126 127static const struct property_entry chuwi_hi10_pro_props[] = { 128 PROPERTY_ENTRY_U32("touchscreen-min-x", 8), 129 PROPERTY_ENTRY_U32("touchscreen-min-y", 8), 130 PROPERTY_ENTRY_U32("touchscreen-size-x", 1912), 131 PROPERTY_ENTRY_U32("touchscreen-size-y", 1272), 132 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 133 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10-pro.fw"), 134 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 135 PROPERTY_ENTRY_BOOL("silead,home-button"), 136 { } 137}; 138 139static const struct ts_dmi_data chuwi_hi10_pro_data = { 140 .embedded_fw = { 141 .name = "silead/gsl1680-chuwi-hi10-pro.fw", 142 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 143 .length = 42504, 144 .sha256 = { 0xdb, 0x92, 0x68, 0xa8, 0xdb, 0x81, 0x31, 0x00, 145 0x1f, 0x58, 0x89, 0xdb, 0x19, 0x1b, 0x15, 0x8c, 146 0x05, 0x14, 0xf4, 0x95, 0xba, 0x15, 0x45, 0x98, 147 0x42, 0xa3, 0xbb, 0x65, 0xe3, 0x30, 0xa5, 0x93 }, 148 }, 149 .acpi_name = "MSSL1680:00", 150 .properties = chuwi_hi10_pro_props, 151}; 152 153static const struct property_entry chuwi_hibook_props[] = { 154 PROPERTY_ENTRY_U32("touchscreen-min-x", 30), 155 PROPERTY_ENTRY_U32("touchscreen-min-y", 4), 156 PROPERTY_ENTRY_U32("touchscreen-size-x", 1892), 157 PROPERTY_ENTRY_U32("touchscreen-size-y", 1276), 158 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 159 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 160 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hibook.fw"), 161 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 162 PROPERTY_ENTRY_BOOL("silead,home-button"), 163 { } 164}; 165 166static const struct ts_dmi_data chuwi_hibook_data = { 167 .embedded_fw = { 168 .name = "silead/gsl1680-chuwi-hibook.fw", 169 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 170 .length = 40392, 171 .sha256 = { 0xf7, 0xc0, 0xe8, 0x5a, 0x6c, 0xf2, 0xeb, 0x8d, 172 0x12, 0xc4, 0x45, 0xbf, 0x55, 0x13, 0x4c, 0x1a, 173 0x13, 0x04, 0x31, 0x08, 0x65, 0x73, 0xf7, 0xa8, 174 0x1b, 0x7d, 0x59, 0xc9, 0xe6, 0x97, 0xf7, 0x38 }, 175 }, 176 .acpi_name = "MSSL0017:00", 177 .properties = chuwi_hibook_props, 178}; 179 180static const struct property_entry chuwi_vi8_props[] = { 181 PROPERTY_ENTRY_U32("touchscreen-min-x", 4), 182 PROPERTY_ENTRY_U32("touchscreen-min-y", 6), 183 PROPERTY_ENTRY_U32("touchscreen-size-x", 1724), 184 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 185 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 186 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-chuwi-vi8.fw"), 187 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 188 PROPERTY_ENTRY_BOOL("silead,home-button"), 189 { } 190}; 191 192static const struct ts_dmi_data chuwi_vi8_data = { 193 .acpi_name = "MSSL1680:00", 194 .properties = chuwi_vi8_props, 195}; 196 197static const struct ts_dmi_data chuwi_vi8_plus_data = { 198 .embedded_fw = { 199 .name = "chipone/icn8505-HAMP0002.fw", 200 .prefix = { 0xb0, 0x07, 0x00, 0x00, 0xe4, 0x07, 0x00, 0x00 }, 201 .length = 35012, 202 .sha256 = { 0x93, 0xe5, 0x49, 0xe0, 0xb6, 0xa2, 0xb4, 0xb3, 203 0x88, 0x96, 0x34, 0x97, 0x5e, 0xa8, 0x13, 0x78, 204 0x72, 0x98, 0xb8, 0x29, 0xeb, 0x5c, 0xa7, 0xf1, 205 0x25, 0x13, 0x43, 0xf4, 0x30, 0x7c, 0xfc, 0x7c }, 206 }, 207}; 208 209static const struct property_entry chuwi_vi10_props[] = { 210 PROPERTY_ENTRY_U32("touchscreen-min-x", 0), 211 PROPERTY_ENTRY_U32("touchscreen-min-y", 4), 212 PROPERTY_ENTRY_U32("touchscreen-size-x", 1858), 213 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280), 214 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-chuwi-vi10.fw"), 215 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 216 PROPERTY_ENTRY_BOOL("silead,home-button"), 217 { } 218}; 219 220static const struct ts_dmi_data chuwi_vi10_data = { 221 .acpi_name = "MSSL0002:00", 222 .properties = chuwi_vi10_props, 223}; 224 225static const struct property_entry chuwi_surbook_mini_props[] = { 226 PROPERTY_ENTRY_U32("touchscreen-min-x", 88), 227 PROPERTY_ENTRY_U32("touchscreen-min-y", 13), 228 PROPERTY_ENTRY_U32("touchscreen-size-x", 2040), 229 PROPERTY_ENTRY_U32("touchscreen-size-y", 1524), 230 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-surbook-mini.fw"), 231 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 232 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 233 { } 234}; 235 236static const struct ts_dmi_data chuwi_surbook_mini_data = { 237 .acpi_name = "MSSL1680:00", 238 .properties = chuwi_surbook_mini_props, 239}; 240 241static const struct property_entry connect_tablet9_props[] = { 242 PROPERTY_ENTRY_U32("touchscreen-min-x", 9), 243 PROPERTY_ENTRY_U32("touchscreen-min-y", 10), 244 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664), 245 PROPERTY_ENTRY_U32("touchscreen-size-y", 880), 246 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 247 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 248 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-connect-tablet9.fw"), 249 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 250 { } 251}; 252 253static const struct ts_dmi_data connect_tablet9_data = { 254 .acpi_name = "MSSL1680:00", 255 .properties = connect_tablet9_props, 256}; 257 258static const struct property_entry csl_panther_tab_hd_props[] = { 259 PROPERTY_ENTRY_U32("touchscreen-min-x", 1), 260 PROPERTY_ENTRY_U32("touchscreen-min-y", 20), 261 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980), 262 PROPERTY_ENTRY_U32("touchscreen-size-y", 1526), 263 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 264 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 265 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-csl-panther-tab-hd.fw"), 266 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 267 { } 268}; 269 270static const struct ts_dmi_data csl_panther_tab_hd_data = { 271 .acpi_name = "MSSL1680:00", 272 .properties = csl_panther_tab_hd_props, 273}; 274 275static const struct property_entry cube_iwork8_air_props[] = { 276 PROPERTY_ENTRY_U32("touchscreen-min-x", 1), 277 PROPERTY_ENTRY_U32("touchscreen-min-y", 3), 278 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664), 279 PROPERTY_ENTRY_U32("touchscreen-size-y", 896), 280 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 281 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-cube-iwork8-air.fw"), 282 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 283 { } 284}; 285 286static const struct ts_dmi_data cube_iwork8_air_data = { 287 .embedded_fw = { 288 .name = "silead/gsl3670-cube-iwork8-air.fw", 289 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 290 .length = 38808, 291 .sha256 = { 0xff, 0x62, 0x2d, 0xd1, 0x8a, 0x78, 0x04, 0x7b, 292 0x33, 0x06, 0xb0, 0x4f, 0x7f, 0x02, 0x08, 0x9c, 293 0x96, 0xd4, 0x9f, 0x04, 0xe1, 0x47, 0x25, 0x25, 294 0x60, 0x77, 0x41, 0x33, 0xeb, 0x12, 0x82, 0xfc }, 295 }, 296 .acpi_name = "MSSL1680:00", 297 .properties = cube_iwork8_air_props, 298}; 299 300static const struct property_entry cube_knote_i1101_props[] = { 301 PROPERTY_ENTRY_U32("touchscreen-min-x", 20), 302 PROPERTY_ENTRY_U32("touchscreen-min-y", 22), 303 PROPERTY_ENTRY_U32("touchscreen-size-x", 1961), 304 PROPERTY_ENTRY_U32("touchscreen-size-y", 1513), 305 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-cube-knote-i1101.fw"), 306 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 307 PROPERTY_ENTRY_BOOL("silead,home-button"), 308 { } 309}; 310 311static const struct ts_dmi_data cube_knote_i1101_data = { 312 .acpi_name = "MSSL1680:00", 313 .properties = cube_knote_i1101_props, 314}; 315 316static const struct property_entry dexp_ursus_7w_props[] = { 317 PROPERTY_ENTRY_U32("touchscreen-size-x", 890), 318 PROPERTY_ENTRY_U32("touchscreen-size-y", 630), 319 PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-dexp-ursus-7w.fw"), 320 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 321 PROPERTY_ENTRY_BOOL("silead,home-button"), 322 { } 323}; 324 325static const struct ts_dmi_data dexp_ursus_7w_data = { 326 .acpi_name = "MSSL1680:00", 327 .properties = dexp_ursus_7w_props, 328}; 329 330static const struct property_entry dexp_ursus_kx210i_props[] = { 331 PROPERTY_ENTRY_U32("touchscreen-min-x", 5), 332 PROPERTY_ENTRY_U32("touchscreen-min-y", 2), 333 PROPERTY_ENTRY_U32("touchscreen-size-x", 1720), 334 PROPERTY_ENTRY_U32("touchscreen-size-y", 1137), 335 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-dexp-ursus-kx210i.fw"), 336 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 337 PROPERTY_ENTRY_BOOL("silead,home-button"), 338 { } 339}; 340 341static const struct ts_dmi_data dexp_ursus_kx210i_data = { 342 .acpi_name = "MSSL1680:00", 343 .properties = dexp_ursus_kx210i_props, 344}; 345 346static const struct property_entry digma_citi_e200_props[] = { 347 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980), 348 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500), 349 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 350 PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-digma_citi_e200.fw"), 351 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 352 PROPERTY_ENTRY_BOOL("silead,home-button"), 353 { } 354}; 355 356static const struct ts_dmi_data digma_citi_e200_data = { 357 .acpi_name = "MSSL1680:00", 358 .properties = digma_citi_e200_props, 359}; 360 361static const struct property_entry estar_beauty_hd_props[] = { 362 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 363 { } 364}; 365 366static const struct ts_dmi_data estar_beauty_hd_data = { 367 .acpi_name = "GDIX1001:00", 368 .properties = estar_beauty_hd_props, 369}; 370 371/* Generic props + data for upside-down mounted GDIX1001 touchscreens */ 372static const struct property_entry gdix1001_upside_down_props[] = { 373 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 374 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 375 { } 376}; 377 378static const struct ts_dmi_data gdix1001_00_upside_down_data = { 379 .acpi_name = "GDIX1001:00", 380 .properties = gdix1001_upside_down_props, 381}; 382 383static const struct ts_dmi_data gdix1001_01_upside_down_data = { 384 .acpi_name = "GDIX1001:01", 385 .properties = gdix1001_upside_down_props, 386}; 387 388static const struct property_entry glavey_tm800a550l_props[] = { 389 PROPERTY_ENTRY_STRING("firmware-name", "gt912-glavey-tm800a550l.fw"), 390 PROPERTY_ENTRY_STRING("goodix,config-name", "gt912-glavey-tm800a550l.cfg"), 391 PROPERTY_ENTRY_U32("goodix,main-clk", 54), 392 { } 393}; 394 395static const struct ts_dmi_data glavey_tm800a550l_data = { 396 .acpi_name = "GDIX1001:00", 397 .properties = glavey_tm800a550l_props, 398}; 399 400static const struct ts_dmi_data gdix1002_00_upside_down_data = { 401 .acpi_name = "GDIX1002:00", 402 .properties = gdix1001_upside_down_props, 403}; 404 405static const struct property_entry gp_electronic_t701_props[] = { 406 PROPERTY_ENTRY_U32("touchscreen-size-x", 960), 407 PROPERTY_ENTRY_U32("touchscreen-size-y", 640), 408 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 409 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 410 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-gp-electronic-t701.fw"), 411 { } 412}; 413 414static const struct ts_dmi_data gp_electronic_t701_data = { 415 .acpi_name = "MSSL1680:00", 416 .properties = gp_electronic_t701_props, 417}; 418 419static const struct property_entry irbis_tw90_props[] = { 420 PROPERTY_ENTRY_U32("touchscreen-size-x", 1720), 421 PROPERTY_ENTRY_U32("touchscreen-size-y", 1138), 422 PROPERTY_ENTRY_U32("touchscreen-min-x", 8), 423 PROPERTY_ENTRY_U32("touchscreen-min-y", 14), 424 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 425 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 426 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-irbis_tw90.fw"), 427 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 428 PROPERTY_ENTRY_BOOL("silead,home-button"), 429 { } 430}; 431 432static const struct ts_dmi_data irbis_tw90_data = { 433 .acpi_name = "MSSL1680:00", 434 .properties = irbis_tw90_props, 435}; 436 437static const struct property_entry irbis_tw118_props[] = { 438 PROPERTY_ENTRY_U32("touchscreen-min-x", 20), 439 PROPERTY_ENTRY_U32("touchscreen-min-y", 30), 440 PROPERTY_ENTRY_U32("touchscreen-size-x", 1960), 441 PROPERTY_ENTRY_U32("touchscreen-size-y", 1510), 442 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-irbis-tw118.fw"), 443 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 444 { } 445}; 446 447static const struct ts_dmi_data irbis_tw118_data = { 448 .acpi_name = "MSSL1680:00", 449 .properties = irbis_tw118_props, 450}; 451 452static const struct property_entry itworks_tw891_props[] = { 453 PROPERTY_ENTRY_U32("touchscreen-min-x", 1), 454 PROPERTY_ENTRY_U32("touchscreen-min-y", 5), 455 PROPERTY_ENTRY_U32("touchscreen-size-x", 1600), 456 PROPERTY_ENTRY_U32("touchscreen-size-y", 896), 457 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 458 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 459 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-itworks-tw891.fw"), 460 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 461 { } 462}; 463 464static const struct ts_dmi_data itworks_tw891_data = { 465 .acpi_name = "MSSL1680:00", 466 .properties = itworks_tw891_props, 467}; 468 469static const struct property_entry jumper_ezpad_6_pro_props[] = { 470 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980), 471 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500), 472 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-pro.fw"), 473 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 474 PROPERTY_ENTRY_BOOL("silead,home-button"), 475 { } 476}; 477 478static const struct ts_dmi_data jumper_ezpad_6_pro_data = { 479 .acpi_name = "MSSL1680:00", 480 .properties = jumper_ezpad_6_pro_props, 481}; 482 483static const struct property_entry jumper_ezpad_6_pro_b_props[] = { 484 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980), 485 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500), 486 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-pro-b.fw"), 487 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 488 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 489 PROPERTY_ENTRY_BOOL("silead,home-button"), 490 { } 491}; 492 493static const struct ts_dmi_data jumper_ezpad_6_pro_b_data = { 494 .acpi_name = "MSSL1680:00", 495 .properties = jumper_ezpad_6_pro_b_props, 496}; 497 498static const struct property_entry jumper_ezpad_6_m4_props[] = { 499 PROPERTY_ENTRY_U32("touchscreen-min-x", 35), 500 PROPERTY_ENTRY_U32("touchscreen-min-y", 15), 501 PROPERTY_ENTRY_U32("touchscreen-size-x", 1950), 502 PROPERTY_ENTRY_U32("touchscreen-size-y", 1525), 503 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-jumper-ezpad-6-m4.fw"), 504 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 505 PROPERTY_ENTRY_BOOL("silead,home-button"), 506 { } 507}; 508 509static const struct ts_dmi_data jumper_ezpad_6_m4_data = { 510 .acpi_name = "MSSL1680:00", 511 .properties = jumper_ezpad_6_m4_props, 512}; 513 514static const struct property_entry jumper_ezpad_mini3_props[] = { 515 PROPERTY_ENTRY_U32("touchscreen-min-x", 23), 516 PROPERTY_ENTRY_U32("touchscreen-min-y", 16), 517 PROPERTY_ENTRY_U32("touchscreen-size-x", 1700), 518 PROPERTY_ENTRY_U32("touchscreen-size-y", 1138), 519 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 520 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-jumper-ezpad-mini3.fw"), 521 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 522 { } 523}; 524 525static const struct ts_dmi_data jumper_ezpad_mini3_data = { 526 .acpi_name = "MSSL1680:00", 527 .properties = jumper_ezpad_mini3_props, 528}; 529 530static const struct property_entry mpman_converter9_props[] = { 531 PROPERTY_ENTRY_U32("touchscreen-min-x", 8), 532 PROPERTY_ENTRY_U32("touchscreen-min-y", 8), 533 PROPERTY_ENTRY_U32("touchscreen-size-x", 1664), 534 PROPERTY_ENTRY_U32("touchscreen-size-y", 880), 535 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 536 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 537 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-mpman-converter9.fw"), 538 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 539 { } 540}; 541 542static const struct ts_dmi_data mpman_converter9_data = { 543 .acpi_name = "MSSL1680:00", 544 .properties = mpman_converter9_props, 545}; 546 547static const struct property_entry mpman_mpwin895cl_props[] = { 548 PROPERTY_ENTRY_U32("touchscreen-min-x", 3), 549 PROPERTY_ENTRY_U32("touchscreen-min-y", 9), 550 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), 551 PROPERTY_ENTRY_U32("touchscreen-size-y", 1150), 552 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 553 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-mpman-mpwin895cl.fw"), 554 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 555 PROPERTY_ENTRY_BOOL("silead,home-button"), 556 { } 557}; 558 559static const struct ts_dmi_data mpman_mpwin895cl_data = { 560 .acpi_name = "MSSL1680:00", 561 .properties = mpman_mpwin895cl_props, 562}; 563 564static const struct property_entry myria_my8307_props[] = { 565 PROPERTY_ENTRY_U32("touchscreen-size-x", 1720), 566 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 567 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 568 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 569 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 570 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-myria-my8307.fw"), 571 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 572 PROPERTY_ENTRY_BOOL("silead,home-button"), 573 { } 574}; 575 576static const struct ts_dmi_data myria_my8307_data = { 577 .acpi_name = "MSSL1680:00", 578 .properties = myria_my8307_props, 579}; 580 581static const struct property_entry onda_obook_20_plus_props[] = { 582 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), 583 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148), 584 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 585 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 586 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 587 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-onda-obook-20-plus.fw"), 588 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 589 PROPERTY_ENTRY_BOOL("silead,home-button"), 590 { } 591}; 592 593static const struct ts_dmi_data onda_obook_20_plus_data = { 594 .acpi_name = "MSSL1680:00", 595 .properties = onda_obook_20_plus_props, 596}; 597 598static const struct property_entry onda_v80_plus_v3_props[] = { 599 PROPERTY_ENTRY_U32("touchscreen-min-x", 22), 600 PROPERTY_ENTRY_U32("touchscreen-min-y", 15), 601 PROPERTY_ENTRY_U32("touchscreen-size-x", 1698), 602 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 603 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 604 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-onda-v80-plus-v3.fw"), 605 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 606 PROPERTY_ENTRY_BOOL("silead,home-button"), 607 { } 608}; 609 610static const struct ts_dmi_data onda_v80_plus_v3_data = { 611 .embedded_fw = { 612 .name = "silead/gsl3676-onda-v80-plus-v3.fw", 613 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 614 .length = 37224, 615 .sha256 = { 0x8f, 0xbd, 0x8f, 0x0c, 0x6b, 0xba, 0x5b, 0xf5, 616 0xa3, 0xc7, 0xa3, 0xc0, 0x4f, 0xcd, 0xdf, 0x32, 617 0xcc, 0xe4, 0x70, 0xd6, 0x46, 0x9c, 0xd7, 0xa7, 618 0x4b, 0x82, 0x3f, 0xab, 0xc7, 0x90, 0xea, 0x23 }, 619 }, 620 .acpi_name = "MSSL1680:00", 621 .properties = onda_v80_plus_v3_props, 622}; 623 624static const struct property_entry onda_v820w_32g_props[] = { 625 PROPERTY_ENTRY_U32("touchscreen-size-x", 1665), 626 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 627 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 628 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-onda-v820w-32g.fw"), 629 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 630 PROPERTY_ENTRY_BOOL("silead,home-button"), 631 { } 632}; 633 634static const struct ts_dmi_data onda_v820w_32g_data = { 635 .acpi_name = "MSSL1680:00", 636 .properties = onda_v820w_32g_props, 637}; 638 639static const struct property_entry onda_v891_v5_props[] = { 640 PROPERTY_ENTRY_U32("touchscreen-size-x", 1715), 641 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 642 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 643 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 644 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 645 PROPERTY_ENTRY_STRING("firmware-name", 646 "gsl3676-onda-v891-v5.fw"), 647 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 648 PROPERTY_ENTRY_BOOL("silead,home-button"), 649 { } 650}; 651 652static const struct ts_dmi_data onda_v891_v5_data = { 653 .acpi_name = "MSSL1680:00", 654 .properties = onda_v891_v5_props, 655}; 656 657static const struct property_entry onda_v891w_v1_props[] = { 658 PROPERTY_ENTRY_U32("touchscreen-min-x", 46), 659 PROPERTY_ENTRY_U32("touchscreen-min-y", 8), 660 PROPERTY_ENTRY_U32("touchscreen-size-x", 1676), 661 PROPERTY_ENTRY_U32("touchscreen-size-y", 1130), 662 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-onda-v891w-v1.fw"), 663 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 664 PROPERTY_ENTRY_BOOL("silead,home-button"), 665 { } 666}; 667 668static const struct ts_dmi_data onda_v891w_v1_data = { 669 .acpi_name = "MSSL1680:00", 670 .properties = onda_v891w_v1_props, 671}; 672 673static const struct property_entry onda_v891w_v3_props[] = { 674 PROPERTY_ENTRY_U32("touchscreen-min-x", 35), 675 PROPERTY_ENTRY_U32("touchscreen-min-y", 15), 676 PROPERTY_ENTRY_U32("touchscreen-size-x", 1625), 677 PROPERTY_ENTRY_U32("touchscreen-size-y", 1135), 678 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 679 PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-onda-v891w-v3.fw"), 680 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 681 PROPERTY_ENTRY_BOOL("silead,home-button"), 682 { } 683}; 684 685static const struct ts_dmi_data onda_v891w_v3_data = { 686 .acpi_name = "MSSL1680:00", 687 .properties = onda_v891w_v3_props, 688}; 689 690static const struct property_entry pipo_w2s_props[] = { 691 PROPERTY_ENTRY_U32("touchscreen-size-x", 1660), 692 PROPERTY_ENTRY_U32("touchscreen-size-y", 880), 693 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 694 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 695 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-pipo-w2s.fw"), 696 { } 697}; 698 699static const struct ts_dmi_data pipo_w2s_data = { 700 .embedded_fw = { 701 .name = "silead/gsl1680-pipo-w2s.fw", 702 .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 }, 703 .length = 39072, 704 .sha256 = { 0xd0, 0x58, 0xc4, 0x7d, 0x55, 0x2d, 0x62, 0x18, 705 0xd1, 0x6a, 0x71, 0x73, 0x0b, 0x3f, 0xbe, 0x60, 706 0xbb, 0x45, 0x8c, 0x52, 0x27, 0xb7, 0x18, 0xf4, 707 0x31, 0x00, 0x6a, 0x49, 0x76, 0xd8, 0x7c, 0xd3 }, 708 }, 709 .acpi_name = "MSSL1680:00", 710 .properties = pipo_w2s_props, 711}; 712 713static const struct property_entry pipo_w11_props[] = { 714 PROPERTY_ENTRY_U32("touchscreen-min-x", 1), 715 PROPERTY_ENTRY_U32("touchscreen-min-y", 15), 716 PROPERTY_ENTRY_U32("touchscreen-size-x", 1984), 717 PROPERTY_ENTRY_U32("touchscreen-size-y", 1532), 718 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-pipo-w11.fw"), 719 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 720 PROPERTY_ENTRY_BOOL("silead,home-button"), 721 { } 722}; 723 724static const struct ts_dmi_data pipo_w11_data = { 725 .acpi_name = "MSSL1680:00", 726 .properties = pipo_w11_props, 727}; 728 729static const struct property_entry positivo_c4128b_props[] = { 730 PROPERTY_ENTRY_U32("touchscreen-min-x", 4), 731 PROPERTY_ENTRY_U32("touchscreen-min-y", 13), 732 PROPERTY_ENTRY_U32("touchscreen-size-x", 1915), 733 PROPERTY_ENTRY_U32("touchscreen-size-y", 1269), 734 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-positivo-c4128b.fw"), 735 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 736 { } 737}; 738 739static const struct ts_dmi_data positivo_c4128b_data = { 740 .acpi_name = "MSSL1680:00", 741 .properties = positivo_c4128b_props, 742}; 743 744static const struct property_entry pov_mobii_wintab_p800w_v20_props[] = { 745 PROPERTY_ENTRY_U32("touchscreen-min-x", 32), 746 PROPERTY_ENTRY_U32("touchscreen-min-y", 16), 747 PROPERTY_ENTRY_U32("touchscreen-size-x", 1692), 748 PROPERTY_ENTRY_U32("touchscreen-size-y", 1146), 749 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 750 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-pov-mobii-wintab-p800w-v20.fw"), 751 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 752 PROPERTY_ENTRY_BOOL("silead,home-button"), 753 { } 754}; 755 756static const struct ts_dmi_data pov_mobii_wintab_p800w_v20_data = { 757 .acpi_name = "MSSL1680:00", 758 .properties = pov_mobii_wintab_p800w_v20_props, 759}; 760 761static const struct property_entry pov_mobii_wintab_p800w_v21_props[] = { 762 PROPERTY_ENTRY_U32("touchscreen-min-x", 1), 763 PROPERTY_ENTRY_U32("touchscreen-min-y", 8), 764 PROPERTY_ENTRY_U32("touchscreen-size-x", 1794), 765 PROPERTY_ENTRY_U32("touchscreen-size-y", 1148), 766 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 767 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-pov-mobii-wintab-p800w.fw"), 768 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 769 PROPERTY_ENTRY_BOOL("silead,home-button"), 770 { } 771}; 772 773static const struct ts_dmi_data pov_mobii_wintab_p800w_v21_data = { 774 .acpi_name = "MSSL1680:00", 775 .properties = pov_mobii_wintab_p800w_v21_props, 776}; 777 778static const struct property_entry pov_mobii_wintab_p1006w_v10_props[] = { 779 PROPERTY_ENTRY_U32("touchscreen-min-x", 1), 780 PROPERTY_ENTRY_U32("touchscreen-min-y", 3), 781 PROPERTY_ENTRY_U32("touchscreen-size-x", 1984), 782 PROPERTY_ENTRY_U32("touchscreen-size-y", 1520), 783 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 784 PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-pov-mobii-wintab-p1006w-v10.fw"), 785 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 786 PROPERTY_ENTRY_BOOL("silead,home-button"), 787 { } 788}; 789 790static const struct ts_dmi_data pov_mobii_wintab_p1006w_v10_data = { 791 .acpi_name = "MSSL1680:00", 792 .properties = pov_mobii_wintab_p1006w_v10_props, 793}; 794 795static const struct property_entry predia_basic_props[] = { 796 PROPERTY_ENTRY_U32("touchscreen-min-x", 3), 797 PROPERTY_ENTRY_U32("touchscreen-min-y", 10), 798 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), 799 PROPERTY_ENTRY_U32("touchscreen-size-y", 1144), 800 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 801 PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-predia-basic.fw"), 802 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 803 PROPERTY_ENTRY_BOOL("silead,home-button"), 804 { } 805}; 806 807static const struct ts_dmi_data predia_basic_data = { 808 .acpi_name = "MSSL1680:00", 809 .properties = predia_basic_props, 810}; 811 812static const struct property_entry rca_cambio_w101_v2_props[] = { 813 PROPERTY_ENTRY_U32("touchscreen-min-x", 4), 814 PROPERTY_ENTRY_U32("touchscreen-min-y", 20), 815 PROPERTY_ENTRY_U32("touchscreen-size-x", 1644), 816 PROPERTY_ENTRY_U32("touchscreen-size-y", 874), 817 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 818 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-rca-cambio-w101-v2.fw"), 819 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 820 { } 821}; 822 823static const struct ts_dmi_data rca_cambio_w101_v2_data = { 824 .acpi_name = "MSSL1680:00", 825 .properties = rca_cambio_w101_v2_props, 826}; 827 828static const struct property_entry rwc_nanote_p8_props[] = { 829 PROPERTY_ENTRY_U32("touchscreen-min-y", 46), 830 PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), 831 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 832 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 833 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-rwc-nanote-p8.fw"), 834 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 835 { } 836}; 837 838static const struct ts_dmi_data rwc_nanote_p8_data = { 839 .acpi_name = "MSSL1680:00", 840 .properties = rwc_nanote_p8_props, 841}; 842 843static const struct property_entry schneider_sct101ctm_props[] = { 844 PROPERTY_ENTRY_U32("touchscreen-size-x", 1715), 845 PROPERTY_ENTRY_U32("touchscreen-size-y", 1140), 846 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 847 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 848 PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), 849 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-schneider-sct101ctm.fw"), 850 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 851 PROPERTY_ENTRY_BOOL("silead,home-button"), 852 { } 853}; 854 855static const struct ts_dmi_data schneider_sct101ctm_data = { 856 .acpi_name = "MSSL1680:00", 857 .properties = schneider_sct101ctm_props, 858}; 859 860static const struct property_entry techbite_arc_11_6_props[] = { 861 PROPERTY_ENTRY_U32("touchscreen-min-x", 5), 862 PROPERTY_ENTRY_U32("touchscreen-min-y", 7), 863 PROPERTY_ENTRY_U32("touchscreen-size-x", 1981), 864 PROPERTY_ENTRY_U32("touchscreen-size-y", 1270), 865 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 866 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-techbite-arc-11-6.fw"), 867 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 868 { } 869}; 870 871static const struct ts_dmi_data techbite_arc_11_6_data = { 872 .acpi_name = "MSSL1680:00", 873 .properties = techbite_arc_11_6_props, 874}; 875 876static const struct property_entry teclast_x3_plus_props[] = { 877 PROPERTY_ENTRY_U32("touchscreen-size-x", 1980), 878 PROPERTY_ENTRY_U32("touchscreen-size-y", 1500), 879 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-teclast-x3-plus.fw"), 880 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 881 PROPERTY_ENTRY_BOOL("silead,home-button"), 882 { } 883}; 884 885static const struct ts_dmi_data teclast_x3_plus_data = { 886 .acpi_name = "MSSL1680:00", 887 .properties = teclast_x3_plus_props, 888}; 889 890static const struct property_entry teclast_x98plus2_props[] = { 891 PROPERTY_ENTRY_U32("touchscreen-size-x", 2048), 892 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280), 893 PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"), 894 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 895 PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-teclast_x98plus2.fw"), 896 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 897 { } 898}; 899 900static const struct ts_dmi_data teclast_x98plus2_data = { 901 .acpi_name = "MSSL1680:00", 902 .properties = teclast_x98plus2_props, 903}; 904 905static const struct property_entry trekstor_primebook_c11_props[] = { 906 PROPERTY_ENTRY_U32("touchscreen-size-x", 1970), 907 PROPERTY_ENTRY_U32("touchscreen-size-y", 1530), 908 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 909 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-trekstor-primebook-c11.fw"), 910 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 911 PROPERTY_ENTRY_BOOL("silead,home-button"), 912 { } 913}; 914 915static const struct ts_dmi_data trekstor_primebook_c11_data = { 916 .acpi_name = "MSSL1680:00", 917 .properties = trekstor_primebook_c11_props, 918}; 919 920static const struct property_entry trekstor_primebook_c13_props[] = { 921 PROPERTY_ENTRY_U32("touchscreen-size-x", 2624), 922 PROPERTY_ENTRY_U32("touchscreen-size-y", 1920), 923 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-trekstor-primebook-c13.fw"), 924 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 925 PROPERTY_ENTRY_BOOL("silead,home-button"), 926 { } 927}; 928 929static const struct ts_dmi_data trekstor_primebook_c13_data = { 930 .acpi_name = "MSSL1680:00", 931 .properties = trekstor_primebook_c13_props, 932}; 933 934static const struct property_entry trekstor_primetab_t13b_props[] = { 935 PROPERTY_ENTRY_U32("touchscreen-size-x", 2500), 936 PROPERTY_ENTRY_U32("touchscreen-size-y", 1900), 937 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-trekstor-primetab-t13b.fw"), 938 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 939 PROPERTY_ENTRY_BOOL("silead,home-button"), 940 PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"), 941 { } 942}; 943 944static const struct ts_dmi_data trekstor_primetab_t13b_data = { 945 .acpi_name = "MSSL1680:00", 946 .properties = trekstor_primetab_t13b_props, 947}; 948 949static const struct property_entry trekstor_surftab_twin_10_1_props[] = { 950 PROPERTY_ENTRY_U32("touchscreen-min-x", 20), 951 PROPERTY_ENTRY_U32("touchscreen-min-y", 0), 952 PROPERTY_ENTRY_U32("touchscreen-size-x", 1890), 953 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280), 954 PROPERTY_ENTRY_U32("touchscreen-inverted-y", 1), 955 PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-surftab-twin-10-1-st10432-8.fw"), 956 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 957 PROPERTY_ENTRY_BOOL("silead,home-button"), 958 { } 959}; 960 961static const struct ts_dmi_data trekstor_surftab_twin_10_1_data = { 962 .acpi_name = "MSSL1680:00", 963 .properties = trekstor_surftab_twin_10_1_props, 964}; 965 966static const struct property_entry trekstor_surftab_wintron70_props[] = { 967 PROPERTY_ENTRY_U32("touchscreen-min-x", 12), 968 PROPERTY_ENTRY_U32("touchscreen-min-y", 8), 969 PROPERTY_ENTRY_U32("touchscreen-size-x", 884), 970 PROPERTY_ENTRY_U32("touchscreen-size-y", 632), 971 PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-surftab-wintron70-st70416-6.fw"), 972 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 973 PROPERTY_ENTRY_BOOL("silead,home-button"), 974 { } 975}; 976 977static const struct ts_dmi_data trekstor_surftab_wintron70_data = { 978 .acpi_name = "MSSL1680:00", 979 .properties = trekstor_surftab_wintron70_props, 980}; 981 982static const struct property_entry vinga_twizzle_j116_props[] = { 983 PROPERTY_ENTRY_U32("touchscreen-size-x", 1920), 984 PROPERTY_ENTRY_U32("touchscreen-size-y", 1280), 985 PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-vinga-twizzle_j116.fw"), 986 PROPERTY_ENTRY_U32("silead,max-fingers", 10), 987 PROPERTY_ENTRY_BOOL("silead,home-button"), 988 { } 989}; 990 991static const struct ts_dmi_data vinga_twizzle_j116_data = { 992 .acpi_name = "MSSL1680:00", 993 .properties = vinga_twizzle_j116_props, 994}; 995 996/* NOTE: Please keep this table sorted alphabetically */ 997const struct dmi_system_id touchscreen_dmi_table[] = { 998 { 999 /* Chuwi Hi8 */ 1000 .driver_data = (void *)&chuwi_hi8_data, 1001 .matches = { 1002 DMI_MATCH(DMI_SYS_VENDOR, "ilife"), 1003 DMI_MATCH(DMI_PRODUCT_NAME, "S806"), 1004 }, 1005 }, 1006 { 1007 /* Chuwi Hi8 (H1D_S806_206) */ 1008 .driver_data = (void *)&chuwi_hi8_data, 1009 .matches = { 1010 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1011 DMI_MATCH(DMI_PRODUCT_NAME, "BayTrail"), 1012 DMI_MATCH(DMI_BIOS_VERSION, "H1D_S806_206"), 1013 }, 1014 }, 1015 { 1016 /* Chuwi Hi8 Air (CWI543) */ 1017 .driver_data = (void *)&chuwi_hi8_air_data, 1018 .matches = { 1019 DMI_MATCH(DMI_BOARD_VENDOR, "Default string"), 1020 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1021 DMI_MATCH(DMI_PRODUCT_NAME, "Hi8 Air"), 1022 }, 1023 }, 1024 { 1025 /* Chuwi Hi8 Pro (CWI513) */ 1026 .driver_data = (void *)&chuwi_hi8_pro_data, 1027 .matches = { 1028 DMI_MATCH(DMI_SYS_VENDOR, "Hampoo"), 1029 DMI_MATCH(DMI_PRODUCT_NAME, "X1D3_C806N"), 1030 }, 1031 }, 1032 { 1033 /* Chuwi Hi10 Air */ 1034 .driver_data = (void *)&chuwi_hi10_air_data, 1035 .matches = { 1036 DMI_MATCH(DMI_SYS_VENDOR, "CHUWI INNOVATION AND TECHNOLOGY(SHENZHEN)CO.LTD"), 1037 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1038 DMI_MATCH(DMI_PRODUCT_SKU, "P1W6_C109D_B"), 1039 }, 1040 }, 1041 { 1042 /* Chuwi Hi10 Plus (CWI527) */ 1043 .driver_data = (void *)&chuwi_hi10_plus_data, 1044 .matches = { 1045 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 1046 DMI_MATCH(DMI_PRODUCT_NAME, "Hi10 plus tablet"), 1047 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1048 }, 1049 }, 1050 { 1051 /* Chuwi Hi10 Prus (CWI597) */ 1052 .driver_data = (void *)&chuwi_hi10_pro_data, 1053 .matches = { 1054 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 1055 DMI_MATCH(DMI_PRODUCT_NAME, "Hi10 pro tablet"), 1056 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1057 }, 1058 }, 1059 { 1060 /* Chuwi HiBook (CWI514) */ 1061 .driver_data = (void *)&chuwi_hibook_data, 1062 .matches = { 1063 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 1064 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1065 /* Above matches are too generic, add bios-date match */ 1066 DMI_MATCH(DMI_BIOS_DATE, "05/07/2016"), 1067 }, 1068 }, 1069 { 1070 /* Chuwi Vi8 (CWI501) */ 1071 .driver_data = (void *)&chuwi_vi8_data, 1072 .matches = { 1073 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1074 DMI_MATCH(DMI_PRODUCT_NAME, "i86"), 1075 DMI_MATCH(DMI_BIOS_VERSION, "CHUWI.W86JLBNR01"), 1076 }, 1077 }, 1078 { 1079 /* Chuwi Vi8 (CWI506) */ 1080 .driver_data = (void *)&chuwi_vi8_data, 1081 .matches = { 1082 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1083 DMI_MATCH(DMI_PRODUCT_NAME, "i86"), 1084 DMI_MATCH(DMI_BIOS_VERSION, "CHUWI.D86JLBNR"), 1085 }, 1086 }, 1087 { 1088 /* Chuwi Vi8 Plus (CWI519) */ 1089 .driver_data = (void *)&chuwi_vi8_plus_data, 1090 .matches = { 1091 DMI_MATCH(DMI_SYS_VENDOR, "Hampoo"), 1092 DMI_MATCH(DMI_PRODUCT_NAME, "D2D3_Vi8A1"), 1093 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1094 }, 1095 }, 1096 { 1097 /* Chuwi Vi10 (CWI505) */ 1098 .driver_data = (void *)&chuwi_vi10_data, 1099 .matches = { 1100 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 1101 DMI_MATCH(DMI_BOARD_NAME, "BYT-PF02"), 1102 DMI_MATCH(DMI_SYS_VENDOR, "ilife"), 1103 DMI_MATCH(DMI_PRODUCT_NAME, "S165"), 1104 }, 1105 }, 1106 { 1107 /* Chuwi Surbook Mini (CWI540) */ 1108 .driver_data = (void *)&chuwi_surbook_mini_data, 1109 .matches = { 1110 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 1111 DMI_MATCH(DMI_PRODUCT_NAME, "C3W6_AP108_4G"), 1112 }, 1113 }, 1114 { 1115 /* Connect Tablet 9 */ 1116 .driver_data = (void *)&connect_tablet9_data, 1117 .matches = { 1118 DMI_MATCH(DMI_SYS_VENDOR, "Connect"), 1119 DMI_MATCH(DMI_PRODUCT_NAME, "Tablet 9"), 1120 }, 1121 }, 1122 { 1123 /* CSL Panther Tab HD */ 1124 .driver_data = (void *)&csl_panther_tab_hd_data, 1125 .matches = { 1126 DMI_MATCH(DMI_SYS_VENDOR, "CSL Computer GmbH & Co. KG"), 1127 DMI_MATCH(DMI_PRODUCT_NAME, "CSL Panther Tab HD"), 1128 }, 1129 }, 1130 { 1131 /* CUBE iwork8 Air */ 1132 .driver_data = (void *)&cube_iwork8_air_data, 1133 .matches = { 1134 DMI_MATCH(DMI_SYS_VENDOR, "cube"), 1135 DMI_MATCH(DMI_PRODUCT_NAME, "i1-TF"), 1136 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1137 }, 1138 }, 1139 { 1140 /* Cube KNote i1101 */ 1141 .driver_data = (void *)&cube_knote_i1101_data, 1142 .matches = { 1143 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 1144 DMI_MATCH(DMI_BOARD_NAME, "L1W6_I1101"), 1145 DMI_MATCH(DMI_SYS_VENDOR, "ALLDOCUBE"), 1146 DMI_MATCH(DMI_PRODUCT_NAME, "i1101"), 1147 }, 1148 }, 1149 { 1150 /* DEXP Ursus 7W */ 1151 .driver_data = (void *)&dexp_ursus_7w_data, 1152 .matches = { 1153 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1154 DMI_MATCH(DMI_PRODUCT_NAME, "7W"), 1155 }, 1156 }, 1157 { 1158 /* DEXP Ursus KX210i */ 1159 .driver_data = (void *)&dexp_ursus_kx210i_data, 1160 .matches = { 1161 DMI_MATCH(DMI_SYS_VENDOR, "INSYDE Corp."), 1162 DMI_MATCH(DMI_PRODUCT_NAME, "S107I"), 1163 }, 1164 }, 1165 { 1166 /* Digma Citi E200 */ 1167 .driver_data = (void *)&digma_citi_e200_data, 1168 .matches = { 1169 DMI_MATCH(DMI_SYS_VENDOR, "Digma"), 1170 DMI_MATCH(DMI_PRODUCT_NAME, "CITI E200"), 1171 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 1172 }, 1173 }, 1174 { 1175 /* Estar Beauty HD (MID 7316R) */ 1176 .driver_data = (void *)&estar_beauty_hd_data, 1177 .matches = { 1178 DMI_MATCH(DMI_SYS_VENDOR, "Estar"), 1179 DMI_MATCH(DMI_PRODUCT_NAME, "eSTAR BEAUTY HD Intel Quad core"), 1180 }, 1181 }, 1182 { /* Glavey TM800A550L */ 1183 .driver_data = (void *)&glavey_tm800a550l_data, 1184 .matches = { 1185 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 1186 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 1187 /* Above strings are too generic, also match on BIOS version */ 1188 DMI_MATCH(DMI_BIOS_VERSION, "ZY-8-BI-PX4S70VTR400-X423B-005-D"), 1189 }, 1190 }, 1191 { 1192 /* GP-electronic T701 */ 1193 .driver_data = (void *)&gp_electronic_t701_data, 1194 .matches = { 1195 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1196 DMI_MATCH(DMI_PRODUCT_NAME, "T701"), 1197 DMI_MATCH(DMI_BIOS_VERSION, "BYT70A.YNCHENG.WIN.007"), 1198 }, 1199 }, 1200 { 1201 /* I.T.Works TW701 (same hardware as the Trekstor ST70416-6) */ 1202 .driver_data = (void *)&trekstor_surftab_wintron70_data, 1203 .matches = { 1204 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1205 DMI_MATCH(DMI_PRODUCT_NAME, "i71c"), 1206 DMI_MATCH(DMI_BIOS_VERSION, "itWORKS.G.WI71C.JGBMRB"), 1207 }, 1208 }, 1209 { 1210 /* Irbis TW90 */ 1211 .driver_data = (void *)&irbis_tw90_data, 1212 .matches = { 1213 DMI_MATCH(DMI_SYS_VENDOR, "IRBIS"), 1214 DMI_MATCH(DMI_PRODUCT_NAME, "TW90"), 1215 }, 1216 }, 1217 { 1218 /* Irbis TW118 */ 1219 .driver_data = (void *)&irbis_tw118_data, 1220 .matches = { 1221 DMI_MATCH(DMI_SYS_VENDOR, "IRBIS"), 1222 DMI_MATCH(DMI_PRODUCT_NAME, "TW118"), 1223 }, 1224 }, 1225 { 1226 /* I.T.Works TW891 */ 1227 .driver_data = (void *)&itworks_tw891_data, 1228 .matches = { 1229 DMI_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."), 1230 DMI_MATCH(DMI_PRODUCT_NAME, "TW891"), 1231 }, 1232 }, 1233 { 1234 /* Jumper EZpad 6 Pro */ 1235 .driver_data = (void *)&jumper_ezpad_6_pro_data, 1236 .matches = { 1237 DMI_MATCH(DMI_SYS_VENDOR, "Jumper"), 1238 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"), 1239 DMI_MATCH(DMI_BIOS_VERSION, "5.12"), 1240 /* Above matches are too generic, add bios-date match */ 1241 DMI_MATCH(DMI_BIOS_DATE, "08/18/2017"), 1242 }, 1243 }, 1244 { 1245 /* Jumper EZpad 6 Pro B */ 1246 .driver_data = (void *)&jumper_ezpad_6_pro_b_data, 1247 .matches = { 1248 DMI_MATCH(DMI_SYS_VENDOR, "Jumper"), 1249 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"), 1250 DMI_MATCH(DMI_BIOS_VERSION, "5.12"), 1251 /* Above matches are too generic, add bios-date match */ 1252 DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"), 1253 }, 1254 }, 1255 { 1256 /* Jumper EZpad 6 m4 */ 1257 .driver_data = (void *)&jumper_ezpad_6_m4_data, 1258 .matches = { 1259 DMI_MATCH(DMI_SYS_VENDOR, "jumper"), 1260 DMI_MATCH(DMI_PRODUCT_NAME, "EZpad"), 1261 /* Jumper8.S106x.A00C.1066 with the version dropped */ 1262 DMI_MATCH(DMI_BIOS_VERSION, "Jumper8.S106x"), 1263 }, 1264 }, 1265 { 1266 /* Jumper EZpad mini3 */ 1267 .driver_data = (void *)&jumper_ezpad_mini3_data, 1268 .matches = { 1269 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1270 /* jumperx.T87.KFBNEEA02 with the version-nr dropped */ 1271 DMI_MATCH(DMI_BIOS_VERSION, "jumperx.T87.KFBNEEA"), 1272 }, 1273 }, 1274 { 1275 /* Juno Tablet */ 1276 .driver_data = (void *)&gdix1002_00_upside_down_data, 1277 .matches = { 1278 DMI_MATCH(DMI_SYS_VENDOR, "Default string"), 1279 /* Both product- and board-name being "Default string" is somewhat rare */ 1280 DMI_MATCH(DMI_PRODUCT_NAME, "Default string"), 1281 DMI_MATCH(DMI_BOARD_NAME, "Default string"), 1282 /* Above matches are too generic, add partial bios-version match */ 1283 DMI_MATCH(DMI_BIOS_VERSION, "JP2V1."), 1284 }, 1285 }, 1286 { 1287 /* Mediacom WinPad 7.0 W700 (same hw as Wintron surftab 7") */ 1288 .driver_data = (void *)&trekstor_surftab_wintron70_data, 1289 .matches = { 1290 DMI_MATCH(DMI_SYS_VENDOR, "MEDIACOM"), 1291 DMI_MATCH(DMI_PRODUCT_NAME, "WinPad 7 W10 - WPW700"), 1292 }, 1293 }, 1294 { 1295 /* Mediacom Flexbook Edge 11 (same hw as TS Primebook C11) */ 1296 .driver_data = (void *)&trekstor_primebook_c11_data, 1297 .matches = { 1298 DMI_MATCH(DMI_SYS_VENDOR, "MEDIACOM"), 1299 DMI_MATCH(DMI_PRODUCT_NAME, "FlexBook edge11 - M-FBE11"), 1300 }, 1301 }, 1302 { 1303 /* MP Man Converter 9 */ 1304 .driver_data = (void *)&mpman_converter9_data, 1305 .matches = { 1306 DMI_MATCH(DMI_SYS_VENDOR, "MPMAN"), 1307 DMI_MATCH(DMI_PRODUCT_NAME, "Converter9"), 1308 }, 1309 }, 1310 { 1311 /* MP Man MPWIN895CL */ 1312 .driver_data = (void *)&mpman_mpwin895cl_data, 1313 .matches = { 1314 DMI_MATCH(DMI_SYS_VENDOR, "MPMAN"), 1315 DMI_MATCH(DMI_PRODUCT_NAME, "MPWIN8900CL"), 1316 }, 1317 }, 1318 { 1319 /* Myria MY8307 */ 1320 .driver_data = (void *)&myria_my8307_data, 1321 .matches = { 1322 DMI_MATCH(DMI_SYS_VENDOR, "Complet Electro Serv"), 1323 DMI_MATCH(DMI_PRODUCT_NAME, "MY8307"), 1324 }, 1325 }, 1326 { 1327 /* Onda oBook 20 Plus */ 1328 .driver_data = (void *)&onda_obook_20_plus_data, 1329 .matches = { 1330 DMI_MATCH(DMI_SYS_VENDOR, "ONDA"), 1331 DMI_MATCH(DMI_PRODUCT_NAME, "OBOOK 20 PLUS"), 1332 }, 1333 }, 1334 { 1335 /* ONDA V80 plus v3 (P80PSBG9V3A01501) */ 1336 .driver_data = (void *)&onda_v80_plus_v3_data, 1337 .matches = { 1338 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONDA"), 1339 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "V80 PLUS") 1340 }, 1341 }, 1342 { 1343 /* ONDA V820w DualOS */ 1344 .driver_data = (void *)&onda_v820w_32g_data, 1345 .matches = { 1346 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "ONDA"), 1347 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "V820w DualOS") 1348 }, 1349 }, 1350 { 1351 /* ONDA V891 v5 */ 1352 .driver_data = (void *)&onda_v891_v5_data, 1353 .matches = { 1354 DMI_MATCH(DMI_SYS_VENDOR, "ONDA"), 1355 DMI_MATCH(DMI_PRODUCT_NAME, "ONDA Tablet"), 1356 DMI_MATCH(DMI_BIOS_VERSION, "ONDA.D869CJABNRBA06"), 1357 }, 1358 }, 1359 { 1360 /* ONDA V891w revision P891WBEBV1B00 aka v1 */ 1361 .driver_data = (void *)&onda_v891w_v1_data, 1362 .matches = { 1363 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "ONDA"), 1364 DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONDA Tablet"), 1365 DMI_EXACT_MATCH(DMI_BOARD_VERSION, "V001"), 1366 /* Exact match, different versions need different fw */ 1367 DMI_EXACT_MATCH(DMI_BIOS_VERSION, "ONDA.W89EBBN08"), 1368 }, 1369 }, 1370 { 1371 /* ONDA V891w Dual OS P891DCF2V1A01274 64GB */ 1372 .driver_data = (void *)&onda_v891w_v3_data, 1373 .matches = { 1374 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1375 DMI_MATCH(DMI_PRODUCT_NAME, "ONDA Tablet"), 1376 DMI_MATCH(DMI_BIOS_VERSION, "ONDA.D890HBBNR0A"), 1377 }, 1378 }, 1379 { 1380 /* Pipo W2S */ 1381 .driver_data = (void *)&pipo_w2s_data, 1382 .matches = { 1383 DMI_MATCH(DMI_SYS_VENDOR, "PIPO"), 1384 DMI_MATCH(DMI_PRODUCT_NAME, "W2S"), 1385 }, 1386 }, 1387 { 1388 /* Pipo W11 */ 1389 .driver_data = (void *)&pipo_w11_data, 1390 .matches = { 1391 DMI_MATCH(DMI_SYS_VENDOR, "PIPO"), 1392 DMI_MATCH(DMI_PRODUCT_NAME, "To be filled by O.E.M."), 1393 /* Above matches are too generic, add bios-ver match */ 1394 DMI_MATCH(DMI_BIOS_VERSION, "JS-BI-10.6-SF133GR300-GA55B-024-F"), 1395 }, 1396 }, 1397 { 1398 /* Ployer Momo7w (same hardware as the Trekstor ST70416-6) */ 1399 .driver_data = (void *)&trekstor_surftab_wintron70_data, 1400 .matches = { 1401 DMI_MATCH(DMI_SYS_VENDOR, "Shenzhen PLOYER"), 1402 DMI_MATCH(DMI_PRODUCT_NAME, "MOMO7W"), 1403 /* Exact match, different versions need different fw */ 1404 DMI_MATCH(DMI_BIOS_VERSION, "MOMO.G.WI71C.MABMRBA02"), 1405 }, 1406 }, 1407 { 1408 /* Positivo C4128B */ 1409 .driver_data = (void *)&positivo_c4128b_data, 1410 .matches = { 1411 DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"), 1412 DMI_MATCH(DMI_PRODUCT_NAME, "C4128B-1"), 1413 }, 1414 }, 1415 { 1416 /* Point of View mobii wintab p800w (v2.0) */ 1417 .driver_data = (void *)&pov_mobii_wintab_p800w_v20_data, 1418 .matches = { 1419 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 1420 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 1421 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1014"), 1422 /* Above matches are too generic, add bios-date match */ 1423 DMI_MATCH(DMI_BIOS_DATE, "10/24/2014"), 1424 }, 1425 }, 1426 { 1427 /* Predia Basic tablet) */ 1428 .driver_data = (void *)&predia_basic_data, 1429 .matches = { 1430 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1431 DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"), 1432 /* Above matches are too generic, add bios-version match */ 1433 DMI_MATCH(DMI_BIOS_VERSION, "Mx.WT107.KUBNGEA"), 1434 }, 1435 }, 1436 { 1437 /* Point of View mobii wintab p800w (v2.1) */ 1438 .driver_data = (void *)&pov_mobii_wintab_p800w_v21_data, 1439 .matches = { 1440 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 1441 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 1442 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"), 1443 /* Above matches are too generic, add bios-date match */ 1444 DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"), 1445 }, 1446 }, 1447 { 1448 /* Point of View mobii wintab p1006w (v1.0) */ 1449 .driver_data = (void *)&pov_mobii_wintab_p1006w_v10_data, 1450 .matches = { 1451 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), 1452 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"), 1453 /* Note 105b is Foxcon's USB/PCI vendor id */ 1454 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"), 1455 DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"), 1456 }, 1457 }, 1458 { 1459 /* RCA Cambio W101 v2 */ 1460 /* https://github.com/onitake/gsl-firmware/discussions/193 */ 1461 .driver_data = (void *)&rca_cambio_w101_v2_data, 1462 .matches = { 1463 DMI_MATCH(DMI_SYS_VENDOR, "RCA"), 1464 DMI_MATCH(DMI_PRODUCT_NAME, "W101SA23T1"), 1465 }, 1466 }, 1467 { 1468 /* RWC NANOTE P8 */ 1469 .driver_data = (void *)&rwc_nanote_p8_data, 1470 .matches = { 1471 DMI_MATCH(DMI_BOARD_VENDOR, "Default string"), 1472 DMI_MATCH(DMI_PRODUCT_NAME, "AY07J"), 1473 DMI_MATCH(DMI_PRODUCT_SKU, "0001") 1474 }, 1475 }, 1476 { 1477 /* Schneider SCT101CTM */ 1478 .driver_data = (void *)&schneider_sct101ctm_data, 1479 .matches = { 1480 DMI_MATCH(DMI_SYS_VENDOR, "Default string"), 1481 DMI_MATCH(DMI_PRODUCT_NAME, "SCT101CTM"), 1482 }, 1483 }, 1484 { 1485 /* Techbite Arc 11.6 */ 1486 .driver_data = (void *)&techbite_arc_11_6_data, 1487 .matches = { 1488 DMI_MATCH(DMI_SYS_VENDOR, "mPTech"), 1489 DMI_MATCH(DMI_PRODUCT_NAME, "techBite Arc 11.6"), 1490 DMI_MATCH(DMI_BOARD_NAME, "G8316_272B"), 1491 }, 1492 }, 1493 { 1494 /* Teclast X3 Plus */ 1495 .driver_data = (void *)&teclast_x3_plus_data, 1496 .matches = { 1497 DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"), 1498 DMI_MATCH(DMI_PRODUCT_NAME, "X3 Plus"), 1499 DMI_MATCH(DMI_BOARD_NAME, "X3 Plus"), 1500 }, 1501 }, 1502 { 1503 /* Teclast X89 (Android version / BIOS) */ 1504 .driver_data = (void *)&gdix1001_00_upside_down_data, 1505 .matches = { 1506 DMI_MATCH(DMI_BOARD_VENDOR, "WISKY"), 1507 DMI_MATCH(DMI_BOARD_NAME, "3G062i"), 1508 }, 1509 }, 1510 { 1511 /* Teclast X89 (Windows version / BIOS) */ 1512 .driver_data = (void *)&gdix1001_01_upside_down_data, 1513 .matches = { 1514 /* tPAD is too generic, also match on bios date */ 1515 DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"), 1516 DMI_MATCH(DMI_BOARD_NAME, "tPAD"), 1517 DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"), 1518 }, 1519 }, 1520 { 1521 /* Teclast X98 Plus II */ 1522 .driver_data = (void *)&teclast_x98plus2_data, 1523 .matches = { 1524 DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"), 1525 DMI_MATCH(DMI_PRODUCT_NAME, "X98 Plus II"), 1526 }, 1527 }, 1528 { 1529 /* Teclast X98 Pro */ 1530 .driver_data = (void *)&gdix1001_00_upside_down_data, 1531 .matches = { 1532 /* 1533 * Only match BIOS date, because the manufacturers 1534 * BIOS does not report the board name at all 1535 * (sometimes)... 1536 */ 1537 DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"), 1538 DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"), 1539 }, 1540 }, 1541 { 1542 /* Trekstor Primebook C11 */ 1543 .driver_data = (void *)&trekstor_primebook_c11_data, 1544 .matches = { 1545 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"), 1546 DMI_MATCH(DMI_PRODUCT_NAME, "Primebook C11"), 1547 }, 1548 }, 1549 { 1550 /* Trekstor Primebook C11B (same touchscreen as the C11) */ 1551 .driver_data = (void *)&trekstor_primebook_c11_data, 1552 .matches = { 1553 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"), 1554 DMI_MATCH(DMI_PRODUCT_NAME, "PRIMEBOOK C11B"), 1555 }, 1556 }, 1557 { 1558 /* Trekstor Primebook C13 */ 1559 .driver_data = (void *)&trekstor_primebook_c13_data, 1560 .matches = { 1561 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"), 1562 DMI_MATCH(DMI_PRODUCT_NAME, "Primebook C13"), 1563 }, 1564 }, 1565 { 1566 /* Trekstor Primetab T13B */ 1567 .driver_data = (void *)&trekstor_primetab_t13b_data, 1568 .matches = { 1569 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"), 1570 DMI_MATCH(DMI_PRODUCT_NAME, "Primetab T13B"), 1571 }, 1572 }, 1573 { 1574 /* TrekStor SurfTab twin 10.1 ST10432-8 */ 1575 .driver_data = (void *)&trekstor_surftab_twin_10_1_data, 1576 .matches = { 1577 DMI_MATCH(DMI_SYS_VENDOR, "TrekStor"), 1578 DMI_MATCH(DMI_PRODUCT_NAME, "SurfTab twin 10.1"), 1579 }, 1580 }, 1581 { 1582 /* Trekstor Surftab Wintron 7.0 ST70416-6 */ 1583 .driver_data = (void *)&trekstor_surftab_wintron70_data, 1584 .matches = { 1585 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1586 DMI_MATCH(DMI_PRODUCT_NAME, "ST70416-6"), 1587 /* Exact match, different versions need different fw */ 1588 DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA04"), 1589 }, 1590 }, 1591 { 1592 /* Trekstor Surftab Wintron 7.0 ST70416-6, newer BIOS */ 1593 .driver_data = (void *)&trekstor_surftab_wintron70_data, 1594 .matches = { 1595 DMI_MATCH(DMI_SYS_VENDOR, "TrekStor"), 1596 DMI_MATCH(DMI_PRODUCT_NAME, "SurfTab wintron 7.0 ST70416-6"), 1597 /* Exact match, different versions need different fw */ 1598 DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA05"), 1599 }, 1600 }, 1601 { 1602 /* Trekstor Yourbook C11B (same touchscreen as the Primebook C11) */ 1603 .driver_data = (void *)&trekstor_primebook_c11_data, 1604 .matches = { 1605 DMI_MATCH(DMI_SYS_VENDOR, "TREKSTOR"), 1606 DMI_MATCH(DMI_PRODUCT_NAME, "YOURBOOK C11B"), 1607 }, 1608 }, 1609 { 1610 /* Vinga Twizzle J116 */ 1611 .driver_data = (void *)&vinga_twizzle_j116_data, 1612 .matches = { 1613 DMI_MATCH(DMI_PRODUCT_NAME, "VINGA Twizzle J116"), 1614 }, 1615 }, 1616 { 1617 /* "WinBook TW100" */ 1618 .driver_data = (void *)&gdix1001_00_upside_down_data, 1619 .matches = { 1620 DMI_MATCH(DMI_SYS_VENDOR, "WinBook"), 1621 DMI_MATCH(DMI_PRODUCT_NAME, "TW100") 1622 } 1623 }, 1624 { 1625 /* WinBook TW700 */ 1626 .driver_data = (void *)&gdix1001_00_upside_down_data, 1627 .matches = { 1628 DMI_MATCH(DMI_SYS_VENDOR, "WinBook"), 1629 DMI_MATCH(DMI_PRODUCT_NAME, "TW700") 1630 }, 1631 }, 1632 { 1633 /* Yours Y8W81, same case and touchscreen as Chuwi Vi8 */ 1634 .driver_data = (void *)&chuwi_vi8_data, 1635 .matches = { 1636 DMI_MATCH(DMI_SYS_VENDOR, "YOURS"), 1637 DMI_MATCH(DMI_PRODUCT_NAME, "Y8W81"), 1638 }, 1639 }, 1640 { } 1641}; 1642 1643static const struct ts_dmi_data *ts_data; 1644 1645static void ts_dmi_add_props(struct i2c_client *client) 1646{ 1647 struct device *dev = &client->dev; 1648 int error; 1649 1650 if (has_acpi_companion(dev) && 1651 !strncmp(ts_data->acpi_name, client->name, I2C_NAME_SIZE)) { 1652 error = device_add_properties(dev, ts_data->properties); 1653 if (error) 1654 dev_err(dev, "failed to add properties: %d\n", error); 1655 } 1656} 1657 1658static int ts_dmi_notifier_call(struct notifier_block *nb, 1659 unsigned long action, void *data) 1660{ 1661 struct device *dev = data; 1662 struct i2c_client *client; 1663 1664 switch (action) { 1665 case BUS_NOTIFY_ADD_DEVICE: 1666 client = i2c_verify_client(dev); 1667 if (client) 1668 ts_dmi_add_props(client); 1669 break; 1670 1671 default: 1672 break; 1673 } 1674 1675 return 0; 1676} 1677 1678static struct notifier_block ts_dmi_notifier = { 1679 .notifier_call = ts_dmi_notifier_call, 1680}; 1681 1682static int __init ts_dmi_init(void) 1683{ 1684 const struct dmi_system_id *dmi_id; 1685 int error; 1686 1687 dmi_id = dmi_first_match(touchscreen_dmi_table); 1688 if (!dmi_id) 1689 return 0; /* Not an error */ 1690 1691 ts_data = dmi_id->driver_data; 1692 /* Some dmi table entries only provide an efi_embedded_fw_desc */ 1693 if (!ts_data->properties) 1694 return 0; 1695 1696 error = bus_register_notifier(&i2c_bus_type, &ts_dmi_notifier); 1697 if (error) 1698 pr_err("%s: failed to register i2c bus notifier: %d\n", 1699 __func__, error); 1700 1701 return error; 1702} 1703 1704/* 1705 * We are registering out notifier after i2c core is initialized and i2c bus 1706 * itself is ready (which happens at postcore initcall level), but before 1707 * ACPI starts enumerating devices (at subsys initcall level). 1708 */ 1709arch_initcall(ts_dmi_init); 1710