xref: /linux/drivers/platform/x86/x86-android-tablets/dmi.c (revision 3eee73ad42c3899d97e073bf2c41e7670a3c575c)
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