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