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
18const 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 830F/L or 1050F/L (The 8" and 10"
110 * Lenovo Yoga Tablet 2 use the same mainboard)
111 */
112 .matches = {
113 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."),
114 DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"),
115 DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"),
116 /* Partial match on beginning of BIOS version */
117 DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"),
118 },
119 .driver_data = (void *)&lenovo_yoga_tab2_830_1050_info,
120 },
121 {
122 /* Lenovo Yoga Tab 3 Pro YT3-X90F */
123 .matches = {
124 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
125 DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"),
126 DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"),
127 },
128 .driver_data = (void *)&lenovo_yt3_info,
129 },
130 {
131 /* Medion Lifetab S10346 */
132 .matches = {
133 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
134 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
135 /* Above strings are much too generic, also match on BIOS date */
136 DMI_MATCH(DMI_BIOS_DATE, "10/22/2015"),
137 },
138 .driver_data = (void *)&medion_lifetab_s10346_info,
139 },
140 {
141 /* Nextbook Ares 8 (BYT version) */
142 .matches = {
143 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
144 DMI_MATCH(DMI_PRODUCT_NAME, "M890BAP"),
145 },
146 .driver_data = (void *)&nextbook_ares8_info,
147 },
148 {
149 /* Nextbook Ares 8A (CHT version)*/
150 .matches = {
151 DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
152 DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"),
153 DMI_MATCH(DMI_BIOS_VERSION, "M882"),
154 },
155 .driver_data = (void *)&nextbook_ares8a_info,
156 },
157 {
158 /* Peaq C1010 */
159 .matches = {
160 DMI_MATCH(DMI_SYS_VENDOR, "PEAQ"),
161 DMI_MATCH(DMI_PRODUCT_NAME, "PEAQ PMM C1010 MD99187"),
162 },
163 .driver_data = (void *)&peaq_c1010_info,
164 },
165 {
166 /* Whitelabel (sold as various brands) TM800A550L */
167 .matches = {
168 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
169 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
170 /* Above strings are too generic, also match on BIOS version */
171 DMI_MATCH(DMI_BIOS_VERSION, "ZY-8-BI-PX4S70VTR400-X423B-005-D"),
172 },
173 .driver_data = (void *)&whitelabel_tm800a550l_info,
174 },
175 {
176 /* Xiaomi Mi Pad 2 */
177 .matches = {
178 DMI_MATCH(DMI_SYS_VENDOR, "Xiaomi Inc"),
179 DMI_MATCH(DMI_PRODUCT_NAME, "Mipad2"),
180 },
181 .driver_data = (void *)&xiaomi_mipad2_info,
182 },
183 { }
184};
185MODULE_DEVICE_TABLE(dmi, x86_android_tablet_ids);
186

source code of linux/drivers/platform/x86/x86-android-tablets/dmi.c