13a75d169SHans de Goede // SPDX-License-Identifier: GPL-2.0-or-later 23a75d169SHans de Goede /* 33a75d169SHans de Goede * DMI based code to deal with broken DSDTs on X86 tablets which ship with 43a75d169SHans de Goede * Android as (part of) the factory image. The factory kernels shipped on these 53a75d169SHans de Goede * devices typically have a bunch of things hardcoded, rather than specified 63a75d169SHans de Goede * in their DSDT. 73a75d169SHans de Goede * 83a75d169SHans de Goede * Copyright (C) 2021-2023 Hans de Goede <hdegoede@redhat.com> 93a75d169SHans de Goede */ 103a75d169SHans de Goede 113a75d169SHans de Goede #include <linux/dmi.h> 123a75d169SHans de Goede #include <linux/init.h> 133a75d169SHans de Goede #include <linux/mod_devicetable.h> 143a75d169SHans de Goede #include <linux/module.h> 153a75d169SHans de Goede 163a75d169SHans de Goede #include "x86-android-tablets.h" 173a75d169SHans de Goede 183a75d169SHans de Goede const struct dmi_system_id x86_android_tablet_ids[] __initconst = { 193a75d169SHans de Goede { 203a75d169SHans de Goede /* Acer Iconia One 7 B1-750 */ 213a75d169SHans de Goede .matches = { 223a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 233a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "VESPA2"), 243a75d169SHans de Goede }, 253a75d169SHans de Goede .driver_data = (void *)&acer_b1_750_info, 263a75d169SHans de Goede }, 273a75d169SHans de Goede { 283a75d169SHans de Goede /* Advantech MICA-071 */ 293a75d169SHans de Goede .matches = { 303a75d169SHans de Goede DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Advantech"), 313a75d169SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MICA-071"), 323a75d169SHans de Goede }, 333a75d169SHans de Goede .driver_data = (void *)&advantech_mica_071_info, 343a75d169SHans de Goede }, 353a75d169SHans de Goede { 363a75d169SHans de Goede /* Asus MeMO Pad 7 ME176C */ 373a75d169SHans de Goede .matches = { 383a75d169SHans de Goede DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 393a75d169SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ME176C"), 403a75d169SHans de Goede }, 413a75d169SHans de Goede .driver_data = (void *)&asus_me176c_info, 423a75d169SHans de Goede }, 433a75d169SHans de Goede { 443a75d169SHans de Goede /* Asus TF103C */ 453a75d169SHans de Goede .matches = { 463a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 473a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "TF103C"), 483a75d169SHans de Goede }, 493a75d169SHans de Goede .driver_data = (void *)&asus_tf103c_info, 503a75d169SHans de Goede }, 513a75d169SHans de Goede { 523a75d169SHans de Goede /* Chuwi Hi8 (CWI509) */ 533a75d169SHans de Goede .matches = { 543a75d169SHans de Goede DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 553a75d169SHans de Goede DMI_MATCH(DMI_BOARD_NAME, "BYT-PA03C"), 563a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "ilife"), 573a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "S806"), 583a75d169SHans de Goede }, 593a75d169SHans de Goede .driver_data = (void *)&chuwi_hi8_info, 603a75d169SHans de Goede }, 613a75d169SHans de Goede { 6224f7b9a0SHans de Goede /* Cyberbook T116 Android version */ 6324f7b9a0SHans de Goede .matches = { 6424f7b9a0SHans de Goede DMI_MATCH(DMI_BOARD_VENDOR, "Default string"), 6524f7b9a0SHans de Goede DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 6624f7b9a0SHans de Goede /* Above strings are much too generic, also match on SKU + BIOS date */ 6724f7b9a0SHans de Goede DMI_MATCH(DMI_PRODUCT_SKU, "20170531"), 6824f7b9a0SHans de Goede DMI_MATCH(DMI_BIOS_DATE, "07/12/2017"), 6924f7b9a0SHans de Goede }, 7024f7b9a0SHans de Goede .driver_data = (void *)&cyberbook_t116_info, 7124f7b9a0SHans de Goede }, 7224f7b9a0SHans de Goede { 733a75d169SHans de Goede /* CZC P10T */ 743a75d169SHans de Goede .ident = "CZC ODEON TPC-10 (\"P10T\")", 753a75d169SHans de Goede .matches = { 763a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "CZC"), 773a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "ODEON*TPC-10"), 783a75d169SHans de Goede }, 793a75d169SHans de Goede .driver_data = (void *)&czc_p10t, 803a75d169SHans de Goede }, 813a75d169SHans de Goede { 823a75d169SHans de Goede /* CZC P10T variant */ 833a75d169SHans de Goede .ident = "ViewSonic ViewPad 10", 843a75d169SHans de Goede .matches = { 853a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "ViewSonic"), 863a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "VPAD10"), 873a75d169SHans de Goede }, 883a75d169SHans de Goede .driver_data = (void *)&czc_p10t, 893a75d169SHans de Goede }, 903a75d169SHans de Goede { 91c69fec50SHans de Goede /* Lenovo Yoga Book X90F / X90L */ 92c69fec50SHans de Goede .matches = { 93c69fec50SHans de Goede DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 94c69fec50SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 95c69fec50SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), 96c69fec50SHans de Goede }, 97c69fec50SHans de Goede .driver_data = (void *)&lenovo_yogabook_x90_info, 98c69fec50SHans de Goede }, 99c69fec50SHans de Goede { 1005f250f8aSHans de Goede /* Lenovo Yoga Book X91F / X91L */ 1013a75d169SHans de Goede .matches = { 1025f250f8aSHans de Goede /* Non exact match to match F + L versions */ 1035f250f8aSHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"), 1043a75d169SHans de Goede }, 1055f250f8aSHans de Goede .driver_data = (void *)&lenovo_yogabook_x91_info, 1063a75d169SHans de Goede }, 1073a75d169SHans de Goede { 1083a75d169SHans de Goede /* 109*3eee73adSHans de Goede * Lenovo Yoga Tablet 2 Pro 1380F/L (13") This has more or less 110*3eee73adSHans de Goede * the same BIOS as the 830F/L or 1050F/L (8" and 10") below, 111*3eee73adSHans de Goede * but unlike the 8" / 10" models which share the same mainboard 112*3eee73adSHans de Goede * this model has a different mainboard. 113*3eee73adSHans de Goede * This match for the 13" model MUST come before the 8" + 10" 114*3eee73adSHans de Goede * match since that one will also match the 13" model! 115*3eee73adSHans de Goede */ 116*3eee73adSHans de Goede .matches = { 117*3eee73adSHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."), 118*3eee73adSHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"), 119*3eee73adSHans de Goede DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"), 120*3eee73adSHans de Goede /* Full match so as to NOT match the 830/1050 BIOS */ 121*3eee73adSHans de Goede DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21.X64.0005.R00.1504101516"), 122*3eee73adSHans de Goede }, 123*3eee73adSHans de Goede .driver_data = (void *)&lenovo_yoga_tab2_1380_info, 124*3eee73adSHans de Goede }, 125*3eee73adSHans de Goede { 126*3eee73adSHans de Goede /* 1273a75d169SHans de Goede * Lenovo Yoga Tablet 2 830F/L or 1050F/L (The 8" and 10" 1283a75d169SHans de Goede * Lenovo Yoga Tablet 2 use the same mainboard) 1293a75d169SHans de Goede */ 1303a75d169SHans de Goede .matches = { 1313a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."), 1323a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"), 1333a75d169SHans de Goede DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"), 1343a75d169SHans de Goede /* Partial match on beginning of BIOS version */ 1353a75d169SHans de Goede DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"), 1363a75d169SHans de Goede }, 1373a75d169SHans de Goede .driver_data = (void *)&lenovo_yoga_tab2_830_1050_info, 1383a75d169SHans de Goede }, 1393a75d169SHans de Goede { 1403a75d169SHans de Goede /* Lenovo Yoga Tab 3 Pro YT3-X90F */ 1413a75d169SHans de Goede .matches = { 1423a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 1433a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 1443a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), 1453a75d169SHans de Goede }, 1463a75d169SHans de Goede .driver_data = (void *)&lenovo_yt3_info, 1473a75d169SHans de Goede }, 1483a75d169SHans de Goede { 1493a75d169SHans de Goede /* Medion Lifetab S10346 */ 1503a75d169SHans de Goede .matches = { 1513a75d169SHans de Goede DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 1523a75d169SHans de Goede DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 1533a75d169SHans de Goede /* Above strings are much too generic, also match on BIOS date */ 1543a75d169SHans de Goede DMI_MATCH(DMI_BIOS_DATE, "10/22/2015"), 1553a75d169SHans de Goede }, 1563a75d169SHans de Goede .driver_data = (void *)&medion_lifetab_s10346_info, 1573a75d169SHans de Goede }, 1583a75d169SHans de Goede { 159c9105066SHans de Goede /* Nextbook Ares 8 (BYT version) */ 1603a75d169SHans de Goede .matches = { 1613a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 1623a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "M890BAP"), 1633a75d169SHans de Goede }, 1643a75d169SHans de Goede .driver_data = (void *)&nextbook_ares8_info, 1653a75d169SHans de Goede }, 1663a75d169SHans de Goede { 167c9105066SHans de Goede /* Nextbook Ares 8A (CHT version)*/ 168c9105066SHans de Goede .matches = { 169c9105066SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 170c9105066SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"), 171c9105066SHans de Goede DMI_MATCH(DMI_BIOS_VERSION, "M882"), 172c9105066SHans de Goede }, 173c9105066SHans de Goede .driver_data = (void *)&nextbook_ares8a_info, 174c9105066SHans de Goede }, 175c9105066SHans de Goede { 176772cbba5SHans de Goede /* Peaq C1010 */ 177772cbba5SHans de Goede .matches = { 178772cbba5SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "PEAQ"), 179772cbba5SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "PEAQ PMM C1010 MD99187"), 180772cbba5SHans de Goede }, 181772cbba5SHans de Goede .driver_data = (void *)&peaq_c1010_info, 182772cbba5SHans de Goede }, 183772cbba5SHans de Goede { 1843a75d169SHans de Goede /* Whitelabel (sold as various brands) TM800A550L */ 1853a75d169SHans de Goede .matches = { 1863a75d169SHans de Goede DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 1873a75d169SHans de Goede DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 1883a75d169SHans de Goede /* Above strings are too generic, also match on BIOS version */ 1893a75d169SHans de Goede DMI_MATCH(DMI_BIOS_VERSION, "ZY-8-BI-PX4S70VTR400-X423B-005-D"), 1903a75d169SHans de Goede }, 1913a75d169SHans de Goede .driver_data = (void *)&whitelabel_tm800a550l_info, 1923a75d169SHans de Goede }, 1933a75d169SHans de Goede { 1943a75d169SHans de Goede /* Xiaomi Mi Pad 2 */ 1953a75d169SHans de Goede .matches = { 1963a75d169SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Xiaomi Inc"), 1973a75d169SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "Mipad2"), 1983a75d169SHans de Goede }, 1993a75d169SHans de Goede .driver_data = (void *)&xiaomi_mipad2_info, 2003a75d169SHans de Goede }, 2013a75d169SHans de Goede { } 2023a75d169SHans de Goede }; 2033a75d169SHans de Goede MODULE_DEVICE_TABLE(dmi, x86_android_tablet_ids); 204