]> Git Repo - linux.git/blob - drivers/platform/x86/x86-android-tablets/x86-android-tablets.h
net: wan: Add framer framework support
[linux.git] / drivers / platform / x86 / x86-android-tablets / x86-android-tablets.h
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 <[email protected]>
9  */
10 #ifndef __PDX86_X86_ANDROID_TABLETS_H
11 #define __PDX86_X86_ANDROID_TABLETS_H
12
13 #include <linux/gpio/consumer.h>
14 #include <linux/gpio_keys.h>
15 #include <linux/i2c.h>
16 #include <linux/irqdomain_defs.h>
17
18 struct gpio_desc;
19 struct gpiod_lookup_table;
20 struct platform_device_info;
21 struct software_node;
22
23 /*
24  * Helpers to get Linux IRQ numbers given a description of the IRQ source
25  * (either IOAPIC index, or GPIO chip name + pin-number).
26  */
27 enum x86_acpi_irq_type {
28         X86_ACPI_IRQ_TYPE_NONE,
29         X86_ACPI_IRQ_TYPE_APIC,
30         X86_ACPI_IRQ_TYPE_GPIOINT,
31         X86_ACPI_IRQ_TYPE_PMIC,
32 };
33
34 struct x86_acpi_irq_data {
35         char *chip;   /* GPIO chip label (GPIOINT) or PMIC ACPI path (PMIC) */
36         enum x86_acpi_irq_type type;
37         enum irq_domain_bus_token domain;
38         int index;
39         int trigger;  /* ACPI_EDGE_SENSITIVE / ACPI_LEVEL_SENSITIVE */
40         int polarity; /* ACPI_ACTIVE_HIGH / ACPI_ACTIVE_LOW / ACPI_ACTIVE_BOTH */
41         const char *con_id;
42 };
43
44 /* Structs to describe devices to instantiate */
45 struct x86_i2c_client_info {
46         struct i2c_board_info board_info;
47         char *adapter_path;
48         struct x86_acpi_irq_data irq_data;
49 };
50
51 struct x86_serdev_info {
52         const char *ctrl_hid;
53         const char *ctrl_uid;
54         const char *ctrl_devname;
55         /*
56          * ATM the serdev core only supports of or ACPI matching; and sofar all
57          * Android x86 tablets DSDTs have usable serdev nodes, but sometimes
58          * under the wrong controller. So we just tie the existing serdev ACPI
59          * node to the right controller.
60          */
61         const char *serdev_hid;
62 };
63
64 struct x86_gpio_button {
65         struct gpio_keys_button button;
66         const char *chip;
67         int pin;
68 };
69
70 struct x86_dev_info {
71         const char * const *modules;
72         const struct software_node *bat_swnode;
73         struct gpiod_lookup_table * const *gpiod_lookup_tables;
74         const struct x86_i2c_client_info *i2c_client_info;
75         const struct platform_device_info *pdev_info;
76         const struct x86_serdev_info *serdev_info;
77         const struct x86_gpio_button *gpio_button;
78         int i2c_client_count;
79         int pdev_count;
80         int serdev_count;
81         int gpio_button_count;
82         int (*init)(void);
83         void (*exit)(void);
84 };
85
86 int x86_android_tablet_get_gpiod(const char *chip, int pin, const char *con_id,
87                                  bool active_low, enum gpiod_flags dflags,
88                                  struct gpio_desc **desc);
89 int x86_acpi_irq_helper_get(const struct x86_acpi_irq_data *data);
90
91 /*
92  * Extern declarations of x86_dev_info structs so there can be a single
93  * MODULE_DEVICE_TABLE(dmi, ...), while splitting the board descriptions.
94  */
95 extern const struct x86_dev_info acer_b1_750_info;
96 extern const struct x86_dev_info advantech_mica_071_info;
97 extern const struct x86_dev_info asus_me176c_info;
98 extern const struct x86_dev_info asus_tf103c_info;
99 extern const struct x86_dev_info chuwi_hi8_info;
100 extern const struct x86_dev_info cyberbook_t116_info;
101 extern const struct x86_dev_info czc_p10t;
102 extern const struct x86_dev_info lenovo_yogabook_x90_info;
103 extern const struct x86_dev_info lenovo_yogabook_x91_info;
104 extern const struct x86_dev_info lenovo_yoga_tab2_830_1050_info;
105 extern const struct x86_dev_info lenovo_yt3_info;
106 extern const struct x86_dev_info medion_lifetab_s10346_info;
107 extern const struct x86_dev_info nextbook_ares8_info;
108 extern const struct x86_dev_info nextbook_ares8a_info;
109 extern const struct x86_dev_info peaq_c1010_info;
110 extern const struct x86_dev_info whitelabel_tm800a550l_info;
111 extern const struct x86_dev_info xiaomi_mipad2_info;
112 extern const struct dmi_system_id x86_android_tablet_ids[];
113
114 #endif
This page took 0.039727 seconds and 4 git commands to generate.