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