1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * DMI based code to deal with broken DSDTs on X86 tablets which ship with 4 * Android as (part of) the factory image. The factory kernels shipped on these 5 * devices typically have a bunch of things hardcoded, rather than specified 6 * in their DSDT. 7 * 8 * Copyright (C) 2021-2023 Hans de Goede <hdegoede@redhat.com> 9 */ 10 11 #include <linux/dmi.h> 12 #include <linux/init.h> 13 #include <linux/mod_devicetable.h> 14 #include <linux/module.h> 15 16 #include "x86-android-tablets.h" 17 18 const struct dmi_system_id x86_android_tablet_ids[] __initconst = { 19 { 20 /* Acer Iconia One 7 B1-750 */ 21 .matches = { 22 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 23 DMI_MATCH(DMI_PRODUCT_NAME, "VESPA2"), 24 }, 25 .driver_data = (void *)&acer_b1_750_info, 26 }, 27 { 28 /* Advantech MICA-071 */ 29 .matches = { 30 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Advantech"), 31 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MICA-071"), 32 }, 33 .driver_data = (void *)&advantech_mica_071_info, 34 }, 35 { 36 /* Asus MeMO Pad 7 ME176C */ 37 .matches = { 38 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 39 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ME176C"), 40 }, 41 .driver_data = (void *)&asus_me176c_info, 42 }, 43 { 44 /* Asus TF103C */ 45 .matches = { 46 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 47 DMI_MATCH(DMI_PRODUCT_NAME, "TF103C"), 48 }, 49 .driver_data = (void *)&asus_tf103c_info, 50 }, 51 { 52 /* Chuwi Hi8 (CWI509) */ 53 .matches = { 54 DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), 55 DMI_MATCH(DMI_BOARD_NAME, "BYT-PA03C"), 56 DMI_MATCH(DMI_SYS_VENDOR, "ilife"), 57 DMI_MATCH(DMI_PRODUCT_NAME, "S806"), 58 }, 59 .driver_data = (void *)&chuwi_hi8_info, 60 }, 61 { 62 /* Cyberbook T116 Android version */ 63 .matches = { 64 DMI_MATCH(DMI_BOARD_VENDOR, "Default string"), 65 DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), 66 /* Above strings are much too generic, also match on SKU + BIOS date */ 67 DMI_MATCH(DMI_PRODUCT_SKU, "20170531"), 68 DMI_MATCH(DMI_BIOS_DATE, "07/12/2017"), 69 }, 70 .driver_data = (void *)&cyberbook_t116_info, 71 }, 72 { 73 /* CZC P10T */ 74 .ident = "CZC ODEON TPC-10 (\"P10T\")", 75 .matches = { 76 DMI_MATCH(DMI_SYS_VENDOR, "CZC"), 77 DMI_MATCH(DMI_PRODUCT_NAME, "ODEON*TPC-10"), 78 }, 79 .driver_data = (void *)&czc_p10t, 80 }, 81 { 82 /* CZC P10T variant */ 83 .ident = "ViewSonic ViewPad 10", 84 .matches = { 85 DMI_MATCH(DMI_SYS_VENDOR, "ViewSonic"), 86 DMI_MATCH(DMI_PRODUCT_NAME, "VPAD10"), 87 }, 88 .driver_data = (void *)&czc_p10t, 89 }, 90 { 91 /* Lenovo Yoga Book X90F / X90L */ 92 .matches = { 93 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 94 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 95 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), 96 }, 97 .driver_data = (void *)&lenovo_yogabook_x90_info, 98 }, 99 { 100 /* Lenovo Yoga Book X91F / X91L */ 101 .matches = { 102 /* Non exact match to match F + L versions */ 103 DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"), 104 }, 105 .driver_data = (void *)&lenovo_yogabook_x91_info, 106 }, 107 { 108 /* 109 * Lenovo Yoga Tablet 2 Pro 1380F/L (13") This has more or less 110 * the same BIOS as the 830F/L or 1050F/L (8" and 10") below, 111 * but unlike the 8" / 10" models which share the same mainboard 112 * this model has a different mainboard. 113 * This match for the 13" model MUST come before the 8" + 10" 114 * match since that one will also match the 13" model! 115 */ 116 .matches = { 117 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."), 118 DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"), 119 DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"), 120 /* Full match so as to NOT match the 830/1050 BIOS */ 121 DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21.X64.0005.R00.1504101516"), 122 }, 123 .driver_data = (void *)&lenovo_yoga_tab2_1380_info, 124 }, 125 { 126 /* 127 * Lenovo Yoga Tablet 2 830F/L or 1050F/L (The 8" and 10" 128 * Lenovo Yoga Tablet 2 use the same mainboard) 129 */ 130 .matches = { 131 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."), 132 DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"), 133 DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"), 134 /* Partial match on beginning of BIOS version */ 135 DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"), 136 }, 137 .driver_data = (void *)&lenovo_yoga_tab2_830_1050_info, 138 }, 139 { 140 /* Lenovo Yoga Tab 3 Pro YT3-X90F */ 141 .matches = { 142 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 143 DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 144 DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), 145 }, 146 .driver_data = (void *)&lenovo_yt3_info, 147 }, 148 { 149 /* Medion Lifetab S10346 */ 150 .matches = { 151 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 152 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 153 /* Above strings are much too generic, also match on BIOS date */ 154 DMI_MATCH(DMI_BIOS_DATE, "10/22/2015"), 155 }, 156 .driver_data = (void *)&medion_lifetab_s10346_info, 157 }, 158 { 159 /* Nextbook Ares 8 (BYT version) */ 160 .matches = { 161 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 162 DMI_MATCH(DMI_PRODUCT_NAME, "M890BAP"), 163 }, 164 .driver_data = (void *)&nextbook_ares8_info, 165 }, 166 { 167 /* Nextbook Ares 8A (CHT version)*/ 168 .matches = { 169 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), 170 DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"), 171 DMI_MATCH(DMI_BIOS_VERSION, "M882"), 172 }, 173 .driver_data = (void *)&nextbook_ares8a_info, 174 }, 175 { 176 /* Peaq C1010 */ 177 .matches = { 178 DMI_MATCH(DMI_SYS_VENDOR, "PEAQ"), 179 DMI_MATCH(DMI_PRODUCT_NAME, "PEAQ PMM C1010 MD99187"), 180 }, 181 .driver_data = (void *)&peaq_c1010_info, 182 }, 183 { 184 /* Whitelabel (sold as various brands) TM800A550L */ 185 .matches = { 186 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 187 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 188 /* Above strings are too generic, also match on BIOS version */ 189 DMI_MATCH(DMI_BIOS_VERSION, "ZY-8-BI-PX4S70VTR400-X423B-005-D"), 190 }, 191 .driver_data = (void *)&whitelabel_tm800a550l_info, 192 }, 193 { 194 /* Xiaomi Mi Pad 2 */ 195 .matches = { 196 DMI_MATCH(DMI_SYS_VENDOR, "Xiaomi Inc"), 197 DMI_MATCH(DMI_PRODUCT_NAME, "Mipad2"), 198 }, 199 .driver_data = (void *)&xiaomi_mipad2_info, 200 }, 201 { } 202 }; 203 MODULE_DEVICE_TABLE(dmi, x86_android_tablet_ids); 204