162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * DMI based code to deal with broken DSDTs on X86 tablets which ship with 462306a36Sopenharmony_ci * Android as (part of) the factory image. The factory kernels shipped on these 562306a36Sopenharmony_ci * devices typically have a bunch of things hardcoded, rather than specified 662306a36Sopenharmony_ci * in their DSDT. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 2021-2023 Hans de Goede <hdegoede@redhat.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/dmi.h> 1262306a36Sopenharmony_ci#include <linux/init.h> 1362306a36Sopenharmony_ci#include <linux/mod_devicetable.h> 1462306a36Sopenharmony_ci#include <linux/module.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include "x86-android-tablets.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciconst struct dmi_system_id x86_android_tablet_ids[] __initconst = { 1962306a36Sopenharmony_ci { 2062306a36Sopenharmony_ci /* Acer Iconia One 7 B1-750 */ 2162306a36Sopenharmony_ci .matches = { 2262306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 2362306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "VESPA2"), 2462306a36Sopenharmony_ci }, 2562306a36Sopenharmony_ci .driver_data = (void *)&acer_b1_750_info, 2662306a36Sopenharmony_ci }, 2762306a36Sopenharmony_ci { 2862306a36Sopenharmony_ci /* Advantech MICA-071 */ 2962306a36Sopenharmony_ci .matches = { 3062306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Advantech"), 3162306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MICA-071"), 3262306a36Sopenharmony_ci }, 3362306a36Sopenharmony_ci .driver_data = (void *)&advantech_mica_071_info, 3462306a36Sopenharmony_ci }, 3562306a36Sopenharmony_ci { 3662306a36Sopenharmony_ci /* Asus MeMO Pad 7 ME176C */ 3762306a36Sopenharmony_ci .matches = { 3862306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 3962306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ME176C"), 4062306a36Sopenharmony_ci }, 4162306a36Sopenharmony_ci .driver_data = (void *)&asus_me176c_info, 4262306a36Sopenharmony_ci }, 4362306a36Sopenharmony_ci { 4462306a36Sopenharmony_ci /* Asus TF103C */ 4562306a36Sopenharmony_ci .matches = { 4662306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 4762306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "TF103C"), 4862306a36Sopenharmony_ci }, 4962306a36Sopenharmony_ci .driver_data = (void *)&asus_tf103c_info, 5062306a36Sopenharmony_ci }, 5162306a36Sopenharmony_ci { 5262306a36Sopenharmony_ci /* Chuwi Hi8 (CWI509) */ 5362306a36Sopenharmony_ci .matches = { 5462306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 5562306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_NAME, "BYT-PA03C"), 5662306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "ilife"), 5762306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "S806"), 5862306a36Sopenharmony_ci }, 5962306a36Sopenharmony_ci .driver_data = (void *)&chuwi_hi8_info, 6062306a36Sopenharmony_ci }, 6162306a36Sopenharmony_ci { 6262306a36Sopenharmony_ci /* Cyberbook T116 Android version */ 6362306a36Sopenharmony_ci .matches = { 6462306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_VENDOR, "Default string"), 6562306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 6662306a36Sopenharmony_ci /* Above strings are much too generic, also match on SKU + BIOS date */ 6762306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_SKU, "20170531"), 6862306a36Sopenharmony_ci DMI_MATCH(DMI_BIOS_DATE, "07/12/2017"), 6962306a36Sopenharmony_ci }, 7062306a36Sopenharmony_ci .driver_data = (void *)&cyberbook_t116_info, 7162306a36Sopenharmony_ci }, 7262306a36Sopenharmony_ci { 7362306a36Sopenharmony_ci /* CZC P10T */ 7462306a36Sopenharmony_ci .ident = "CZC ODEON TPC-10 (\"P10T\")", 7562306a36Sopenharmony_ci .matches = { 7662306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "CZC"), 7762306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "ODEON*TPC-10"), 7862306a36Sopenharmony_ci }, 7962306a36Sopenharmony_ci .driver_data = (void *)&czc_p10t, 8062306a36Sopenharmony_ci }, 8162306a36Sopenharmony_ci { 8262306a36Sopenharmony_ci /* CZC P10T variant */ 8362306a36Sopenharmony_ci .ident = "ViewSonic ViewPad 10", 8462306a36Sopenharmony_ci .matches = { 8562306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "ViewSonic"), 8662306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "VPAD10"), 8762306a36Sopenharmony_ci }, 8862306a36Sopenharmony_ci .driver_data = (void *)&czc_p10t, 8962306a36Sopenharmony_ci }, 9062306a36Sopenharmony_ci { 9162306a36Sopenharmony_ci /* Lenovo Yoga Book X90F / X90L */ 9262306a36Sopenharmony_ci .matches = { 9362306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 9462306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 9562306a36Sopenharmony_ci DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), 9662306a36Sopenharmony_ci }, 9762306a36Sopenharmony_ci .driver_data = (void *)&lenovo_yogabook_x90_info, 9862306a36Sopenharmony_ci }, 9962306a36Sopenharmony_ci { 10062306a36Sopenharmony_ci /* Lenovo Yoga Book X91F / X91L */ 10162306a36Sopenharmony_ci .matches = { 10262306a36Sopenharmony_ci /* Non exact match to match F + L versions */ 10362306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"), 10462306a36Sopenharmony_ci }, 10562306a36Sopenharmony_ci .driver_data = (void *)&lenovo_yogabook_x91_info, 10662306a36Sopenharmony_ci }, 10762306a36Sopenharmony_ci { 10862306a36Sopenharmony_ci /* 10962306a36Sopenharmony_ci * Lenovo Yoga Tablet 2 830F/L or 1050F/L (The 8" and 10" 11062306a36Sopenharmony_ci * Lenovo Yoga Tablet 2 use the same mainboard) 11162306a36Sopenharmony_ci */ 11262306a36Sopenharmony_ci .matches = { 11362306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."), 11462306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"), 11562306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"), 11662306a36Sopenharmony_ci /* Partial match on beginning of BIOS version */ 11762306a36Sopenharmony_ci DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"), 11862306a36Sopenharmony_ci }, 11962306a36Sopenharmony_ci .driver_data = (void *)&lenovo_yoga_tab2_830_1050_info, 12062306a36Sopenharmony_ci }, 12162306a36Sopenharmony_ci { 12262306a36Sopenharmony_ci /* Lenovo Yoga Tab 3 Pro YT3-X90F */ 12362306a36Sopenharmony_ci .matches = { 12462306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 12562306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 12662306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), 12762306a36Sopenharmony_ci }, 12862306a36Sopenharmony_ci .driver_data = (void *)&lenovo_yt3_info, 12962306a36Sopenharmony_ci }, 13062306a36Sopenharmony_ci { 13162306a36Sopenharmony_ci /* Medion Lifetab S10346 */ 13262306a36Sopenharmony_ci .matches = { 13362306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 13462306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 13562306a36Sopenharmony_ci /* Above strings are much too generic, also match on BIOS date */ 13662306a36Sopenharmony_ci DMI_MATCH(DMI_BIOS_DATE, "10/22/2015"), 13762306a36Sopenharmony_ci }, 13862306a36Sopenharmony_ci .driver_data = (void *)&medion_lifetab_s10346_info, 13962306a36Sopenharmony_ci }, 14062306a36Sopenharmony_ci { 14162306a36Sopenharmony_ci /* Nextbook Ares 8 (BYT version) */ 14262306a36Sopenharmony_ci .matches = { 14362306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 14462306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "M890BAP"), 14562306a36Sopenharmony_ci }, 14662306a36Sopenharmony_ci .driver_data = (void *)&nextbook_ares8_info, 14762306a36Sopenharmony_ci }, 14862306a36Sopenharmony_ci { 14962306a36Sopenharmony_ci /* Nextbook Ares 8A (CHT version)*/ 15062306a36Sopenharmony_ci .matches = { 15162306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 15262306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"), 15362306a36Sopenharmony_ci DMI_MATCH(DMI_BIOS_VERSION, "M882"), 15462306a36Sopenharmony_ci }, 15562306a36Sopenharmony_ci .driver_data = (void *)&nextbook_ares8a_info, 15662306a36Sopenharmony_ci }, 15762306a36Sopenharmony_ci { 15862306a36Sopenharmony_ci /* Peaq C1010 */ 15962306a36Sopenharmony_ci .matches = { 16062306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "PEAQ"), 16162306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "PEAQ PMM C1010 MD99187"), 16262306a36Sopenharmony_ci }, 16362306a36Sopenharmony_ci .driver_data = (void *)&peaq_c1010_info, 16462306a36Sopenharmony_ci }, 16562306a36Sopenharmony_ci { 16662306a36Sopenharmony_ci /* Whitelabel (sold as various brands) TM800A550L */ 16762306a36Sopenharmony_ci .matches = { 16862306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 16962306a36Sopenharmony_ci DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 17062306a36Sopenharmony_ci /* Above strings are too generic, also match on BIOS version */ 17162306a36Sopenharmony_ci DMI_MATCH(DMI_BIOS_VERSION, "ZY-8-BI-PX4S70VTR400-X423B-005-D"), 17262306a36Sopenharmony_ci }, 17362306a36Sopenharmony_ci .driver_data = (void *)&whitelabel_tm800a550l_info, 17462306a36Sopenharmony_ci }, 17562306a36Sopenharmony_ci { 17662306a36Sopenharmony_ci /* Xiaomi Mi Pad 2 */ 17762306a36Sopenharmony_ci .matches = { 17862306a36Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "Xiaomi Inc"), 17962306a36Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_NAME, "Mipad2"), 18062306a36Sopenharmony_ci }, 18162306a36Sopenharmony_ci .driver_data = (void *)&xiaomi_mipad2_info, 18262306a36Sopenharmony_ci }, 18362306a36Sopenharmony_ci { } 18462306a36Sopenharmony_ci}; 18562306a36Sopenharmony_ciMODULE_DEVICE_TABLE(dmi, x86_android_tablet_ids); 186