^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _I8042_X86IA64IO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _I8042_X86IA64IO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifdef CONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <asm/x86_init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * Names.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define I8042_KBD_PHYS_DESC "isa0060/serio0"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define I8042_AUX_PHYS_DESC "isa0060/serio1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define I8042_MUX_PHYS_DESC "isa0060/serio%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * IRQs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #if defined(__ia64__)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) # define I8042_MAP_IRQ(x) isa_irq_to_vector((x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) # define I8042_MAP_IRQ(x) (x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define I8042_KBD_IRQ i8042_kbd_irq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define I8042_AUX_IRQ i8042_aux_irq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) static int i8042_kbd_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) static int i8042_aux_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * Register numbers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define I8042_COMMAND_REG i8042_command_reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define I8042_STATUS_REG i8042_command_reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define I8042_DATA_REG i8042_data_reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) static int i8042_command_reg = 0x64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) static int i8042_data_reg = 0x60;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) static inline int i8042_read_data(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) return inb(I8042_DATA_REG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) static inline int i8042_read_status(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) return inb(I8042_STATUS_REG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) static inline void i8042_write_data(int val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) outb(val, I8042_DATA_REG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) static inline void i8042_write_command(int val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) outb(val, I8042_COMMAND_REG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #ifdef CONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #include <linux/dmi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * Arima-Rioworks HDAMB -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * AUX LOOP command does not raise AUX IRQ
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) DMI_MATCH(DMI_BOARD_NAME, "HDAMB"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) DMI_MATCH(DMI_BOARD_VERSION, "Rev E"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /* ASUS G1S */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) DMI_MATCH(DMI_BOARD_NAME, "G1S"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) DMI_MATCH(DMI_BOARD_VERSION, "1.0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /* ASUS P65UP5 - AUX LOOP command does not raise AUX IRQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) DMI_MATCH(DMI_BOARD_VERSION, "REV 2.X"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) DMI_MATCH(DMI_PRODUCT_NAME, "X750LN"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) DMI_MATCH(DMI_PRODUCT_VERSION, "8500"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) DMI_MATCH(DMI_PRODUCT_VERSION, "DL760"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /* Dell Embedded Box PC 3000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) DMI_MATCH(DMI_PRODUCT_NAME, "Embedded Box PC 3000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) /* OQO Model 01 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) DMI_MATCH(DMI_PRODUCT_VERSION, "00"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /* ULI EV4873 - AUX LOOP does not work properly */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) DMI_MATCH(DMI_SYS_VENDOR, "ULI"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) /* Microsoft Virtual Machine */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /* Medion MAM 2070 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) /* Medion Akoya E7225 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) DMI_MATCH(DMI_SYS_VENDOR, "Medion"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) DMI_MATCH(DMI_PRODUCT_NAME, "Akoya E7225"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) DMI_MATCH(DMI_PRODUCT_VERSION, "1.0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) /* Blue FB5601 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) DMI_MATCH(DMI_SYS_VENDOR, "blue"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) DMI_MATCH(DMI_PRODUCT_VERSION, "M606"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) /* Gigabyte M912 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) DMI_MATCH(DMI_PRODUCT_NAME, "M912"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) DMI_MATCH(DMI_PRODUCT_VERSION, "01"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /* Gigabyte M1022M netbook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co.,Ltd."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) DMI_MATCH(DMI_BOARD_NAME, "M1022E"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) DMI_MATCH(DMI_BOARD_VERSION, "1.02"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) /* Gigabyte Spring Peak - defines wrong chassis type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) /* Gigabyte T1005 - defines wrong chassis type ("Other") */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) DMI_MATCH(DMI_PRODUCT_NAME, "T1005"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) DMI_MATCH(DMI_PRODUCT_NAME, "C15B"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) DMI_MATCH(DMI_SYS_VENDOR, "ByteSpeed LLC"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) DMI_MATCH(DMI_PRODUCT_NAME, "ByteSpeed Laptop C15B"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) * Some Fujitsu notebooks are having trouble with touchpads if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) * active multiplexing mode is activated. Luckily they don't have
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) * external PS/2 ports so we can safely disable it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) * ... apparently some Toshibas don't like MUX mode either and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) * die horrible death on reboot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) /* Fujitsu Lifebook P7010/P7010D */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) DMI_MATCH(DMI_PRODUCT_NAME, "P7010"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) /* Fujitsu Lifebook P7010 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) /* Fujitsu Lifebook P5020D */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) /* Fujitsu Lifebook S2000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) /* Fujitsu Lifebook S6230 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) /* Fujitsu Lifebook T725 laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) /* Fujitsu Lifebook U745 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U745"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) /* Fujitsu T70H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) /* Fujitsu-Siemens Lifebook T3010 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) /* Fujitsu-Siemens Lifebook E4010 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) /* Fujitsu-Siemens Amilo Pro 2010 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) /* Fujitsu-Siemens Amilo Pro 2030 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) * No data is coming from the touchscreen unless KBC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) * is in legacy mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) /* Panasonic CF-29 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) * HP Pavilion DV4017EA -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) * errors on MUX ports are reported without raising AUXDATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) * causing "spurious NAK" messages.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) * HP Pavilion ZT1000 -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) * like DV4017EA does not raise AUXERR for errors on MUX ports.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) * HP Pavilion DV4270ca -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) * like DV4017EA does not raise AUXERR for errors on MUX ports.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) /* Sharp Actius MM20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) DMI_MATCH(DMI_SYS_VENDOR, "SHARP"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) /* Sony Vaio FS-115b */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) * Sony Vaio FZ-240E -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) * reset and GET ID commands issued via KBD port are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) * sometimes being delivered to AUX3.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) * Most (all?) VAIOs do not have external PS/2 ports nor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) * they implement active multiplexing properly, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) * MUX discovery usually messes up keyboard/touchpad.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) /* Amoi M636/A737 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) /* Lenovo 3000 n100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) /* Lenovo XiaoXin Air 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) DMI_MATCH(DMI_PRODUCT_NAME, "80UN"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) /* Acer Aspire 5710 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) /* Acer Aspire 7738 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7738"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) /* Gericom Bellagio */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) /* IBM 2656 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) DMI_MATCH(DMI_PRODUCT_NAME, "2656"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) /* Dell XPS M1530 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) /* Compal HEL80I */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) /* Dell Vostro 1510 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) /* Acer Aspire 5536 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) /* Dell Vostro V13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) /* Newer HP Pavilion dv4 models */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) /* Asus X450LCP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) /* Avatar AVIU-145A6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) /* TUXEDO BU1406 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) /* Lenovo LaVie Z */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) * Acer Aspire 5738z
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) * Touchpad stops working in mux mode when dis- + re-enabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) * with the touchpad enable/disable toggle hotkey
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) /* Entroware Proteus */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) DMI_MATCH(DMI_SYS_VENDOR, "Entroware"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) * Sony Vaio VGN-CS series require MUX or the touch sensor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) * buttons will disturb touchpad operation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) * On some Asus laptops, just running self tests cause problems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) static const struct dmi_system_id i8042_dmi_noselftest_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) /* MSI Wind U-100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) DMI_MATCH(DMI_BOARD_NAME, "U-100"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) /* LG Electronics X110 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) DMI_MATCH(DMI_BOARD_NAME, "X110"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) /* Acer Aspire One 150 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) /* Advent 4211 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) /* Medion Akoya Mini E1210 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) DMI_MATCH(DMI_PRODUCT_NAME, "E1210"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) /* Medion Akoya E1222 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) DMI_MATCH(DMI_PRODUCT_NAME, "E122X"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) /* Mivvy M310 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) DMI_MATCH(DMI_PRODUCT_NAME, "N10"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) /* Dell Vostro 1320 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) /* Dell Vostro 1520 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) /* Dell Vostro 1720 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) /* Lenovo Ideapad U455 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) DMI_MATCH(DMI_PRODUCT_NAME, "20046"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) /* Lenovo ThinkPad L460 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) /* Lenovo ThinkPad Twist S230u */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) /* Entroware Proteus */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) DMI_MATCH(DMI_SYS_VENDOR, "Entroware"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) #ifdef CONFIG_PNP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) /* Intel MBO Desktop D845PESV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) DMI_MATCH(DMI_BOARD_NAME, "D845PESV"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) * Intel NUC D54250WYK - does not have i8042 controller but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) * declares PS/2 devices in DSDT.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) DMI_MATCH(DMI_BOARD_NAME, "D54250WYK"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) /* MSI Wind U-100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) DMI_MATCH(DMI_BOARD_NAME, "U-100"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) /* Acer Aspire 5 A515 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) DMI_MATCH(DMI_BOARD_VENDOR, "PK"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) /* Dell Vostro V13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) /* Newer HP Pavilion dv4 models */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) /* Fujitsu A544 laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) /* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) /* Fujitsu AH544 laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) /* Fujitsu Lifebook T725 laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) /* Fujitsu U574 laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) /* Fujitsu UH554 laptop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) * Some Wistron based laptops need us to explicitly enable the 'Dritek
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) * keyboard extension' to make their extra keys start generating scancodes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) * Originally, this was just confined to older laptops, but a few Acer laptops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) * have turned up in 2007 that also need this again.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) static const struct dmi_system_id __initconst i8042_dmi_dritek_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) /* Acer Aspire 5100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) /* Acer Aspire 5610 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) /* Acer Aspire 5630 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) /* Acer Aspire 5650 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) /* Acer Aspire 5680 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) /* Acer Aspire 5720 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) /* Acer Aspire 9110 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) /* Acer TravelMate 660 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) /* Acer TravelMate 2490 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) /* Acer TravelMate 4280 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) * Some laptops need keyboard reset before probing for the trackpad to get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) * it detected, initialised & finally work.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) /* Gigabyte P35 v2 - Elantech touchpad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) DMI_MATCH(DMI_PRODUCT_NAME, "P35V2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) /* Aorus branded Gigabyte X3 Plus - Elantech touchpad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) DMI_MATCH(DMI_PRODUCT_NAME, "X3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) /* Gigabyte P34 - Elantech touchpad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) DMI_MATCH(DMI_PRODUCT_NAME, "P34"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) /* Gigabyte P57 - Elantech touchpad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) DMI_MATCH(DMI_PRODUCT_NAME, "P57"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) /* Schenker XMG C504 - Elantech touchpad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) DMI_MATCH(DMI_SYS_VENDOR, "XMG"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) DMI_MATCH(DMI_PRODUCT_NAME, "C504"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) static const struct dmi_system_id i8042_dmi_probe_defer_table[] __initconst = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) /* ASUS ZenBook UX425UA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) /* ASUS ZenBook UM325UA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) .matches = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) #endif /* CONFIG_X86 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) #ifdef CONFIG_PNP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) #include <linux/pnp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) static bool i8042_pnp_kbd_registered;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) static unsigned int i8042_pnp_kbd_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) static bool i8042_pnp_aux_registered;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) static unsigned int i8042_pnp_aux_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) static int i8042_pnp_command_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) static int i8042_pnp_data_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) static int i8042_pnp_kbd_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) static int i8042_pnp_aux_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) static char i8042_pnp_kbd_name[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) static char i8042_pnp_aux_name[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) static void i8042_pnp_id_to_string(struct pnp_id *id, char *dst, int dst_size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) strlcpy(dst, "PNP:", dst_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) while (id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) strlcat(dst, " ", dst_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) strlcat(dst, id->id, dst_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) id = id->next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) static int i8042_pnp_kbd_probe(struct pnp_dev *dev, const struct pnp_device_id *did)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) if (pnp_port_valid(dev, 0) && pnp_port_len(dev, 0) == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) i8042_pnp_data_reg = pnp_port_start(dev,0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) if (pnp_port_valid(dev, 1) && pnp_port_len(dev, 1) == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) i8042_pnp_command_reg = pnp_port_start(dev, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) if (pnp_irq_valid(dev,0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) i8042_pnp_kbd_irq = pnp_irq(dev, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) strlcpy(i8042_pnp_kbd_name, did->id, sizeof(i8042_pnp_kbd_name));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) if (strlen(pnp_dev_name(dev))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) strlcat(i8042_pnp_kbd_name, ":", sizeof(i8042_pnp_kbd_name));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) strlcat(i8042_pnp_kbd_name, pnp_dev_name(dev), sizeof(i8042_pnp_kbd_name));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) i8042_pnp_id_to_string(dev->id, i8042_kbd_firmware_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) sizeof(i8042_kbd_firmware_id));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) i8042_kbd_fwnode = dev_fwnode(&dev->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) /* Keyboard ports are always supposed to be wakeup-enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) device_set_wakeup_enable(&dev->dev, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) i8042_pnp_kbd_devices++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) static int i8042_pnp_aux_probe(struct pnp_dev *dev, const struct pnp_device_id *did)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) if (pnp_port_valid(dev, 0) && pnp_port_len(dev, 0) == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) i8042_pnp_data_reg = pnp_port_start(dev,0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) if (pnp_port_valid(dev, 1) && pnp_port_len(dev, 1) == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) i8042_pnp_command_reg = pnp_port_start(dev, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) if (pnp_irq_valid(dev, 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) i8042_pnp_aux_irq = pnp_irq(dev, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) strlcpy(i8042_pnp_aux_name, did->id, sizeof(i8042_pnp_aux_name));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) if (strlen(pnp_dev_name(dev))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) strlcat(i8042_pnp_aux_name, ":", sizeof(i8042_pnp_aux_name));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) strlcat(i8042_pnp_aux_name, pnp_dev_name(dev), sizeof(i8042_pnp_aux_name));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) i8042_pnp_id_to_string(dev->id, i8042_aux_firmware_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) sizeof(i8042_aux_firmware_id));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) i8042_pnp_aux_devices++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) static const struct pnp_device_id pnp_kbd_devids[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) { .id = "PNP0300", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) { .id = "PNP0301", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) { .id = "PNP0302", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) { .id = "PNP0303", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) { .id = "PNP0304", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) { .id = "PNP0305", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) { .id = "PNP0306", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) { .id = "PNP0309", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) { .id = "PNP030a", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) { .id = "PNP030b", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) { .id = "PNP0320", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) { .id = "PNP0343", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) { .id = "PNP0344", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) { .id = "PNP0345", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) { .id = "CPQA0D7", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) { .id = "", },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) MODULE_DEVICE_TABLE(pnp, pnp_kbd_devids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) static struct pnp_driver i8042_pnp_kbd_driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) .name = "i8042 kbd",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) .id_table = pnp_kbd_devids,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) .probe = i8042_pnp_kbd_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) .driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) .probe_type = PROBE_FORCE_SYNCHRONOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) .suppress_bind_attrs = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) static const struct pnp_device_id pnp_aux_devids[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) { .id = "AUI0200", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) { .id = "FJC6000", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) { .id = "FJC6001", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) { .id = "PNP0f03", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) { .id = "PNP0f0b", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) { .id = "PNP0f0e", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) { .id = "PNP0f12", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) { .id = "PNP0f13", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) { .id = "PNP0f19", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) { .id = "PNP0f1c", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) { .id = "SYN0801", .driver_data = 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) { .id = "", },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) MODULE_DEVICE_TABLE(pnp, pnp_aux_devids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) static struct pnp_driver i8042_pnp_aux_driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) .name = "i8042 aux",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) .id_table = pnp_aux_devids,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) .probe = i8042_pnp_aux_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) .driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) .probe_type = PROBE_FORCE_SYNCHRONOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) .suppress_bind_attrs = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) static void i8042_pnp_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) if (i8042_pnp_kbd_registered) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) i8042_pnp_kbd_registered = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) pnp_unregister_driver(&i8042_pnp_kbd_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) if (i8042_pnp_aux_registered) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) i8042_pnp_aux_registered = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) pnp_unregister_driver(&i8042_pnp_aux_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) static int __init i8042_pnp_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) char kbd_irq_str[4] = { 0 }, aux_irq_str[4] = { 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) bool pnp_data_busted = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) #ifdef CONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) if (dmi_check_system(i8042_dmi_nopnp_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) i8042_nopnp = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) if (i8042_nopnp) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) pr_info("PNP detection disabled\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) err = pnp_register_driver(&i8042_pnp_kbd_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) if (!err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) i8042_pnp_kbd_registered = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) err = pnp_register_driver(&i8042_pnp_aux_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) if (!err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) i8042_pnp_aux_registered = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) if (!i8042_pnp_kbd_devices && !i8042_pnp_aux_devices) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) i8042_pnp_exit();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) #if defined(__ia64__)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) return -ENODEV;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) pr_info("PNP: No PS/2 controller found.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) if (x86_platform.legacy.i8042 !=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) X86_LEGACY_I8042_EXPECTED_PRESENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) return -ENODEV;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) pr_info("Probing ports directly.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) if (i8042_pnp_kbd_devices)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) snprintf(kbd_irq_str, sizeof(kbd_irq_str),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) "%d", i8042_pnp_kbd_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) if (i8042_pnp_aux_devices)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) snprintf(aux_irq_str, sizeof(aux_irq_str),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) "%d", i8042_pnp_aux_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) pr_info("PNP: PS/2 Controller [%s%s%s] at %#x,%#x irq %s%s%s\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) i8042_pnp_kbd_name, (i8042_pnp_kbd_devices && i8042_pnp_aux_devices) ? "," : "",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) i8042_pnp_aux_name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) i8042_pnp_data_reg, i8042_pnp_command_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) kbd_irq_str, (i8042_pnp_kbd_devices && i8042_pnp_aux_devices) ? "," : "",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) aux_irq_str);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) #if defined(__ia64__)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) if (!i8042_pnp_kbd_devices)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) i8042_nokbd = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) if (!i8042_pnp_aux_devices)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) i8042_noaux = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) if (((i8042_pnp_data_reg & ~0xf) == (i8042_data_reg & ~0xf) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) i8042_pnp_data_reg != i8042_data_reg) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) !i8042_pnp_data_reg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) pr_warn("PNP: PS/2 controller has invalid data port %#x; using default %#x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) i8042_pnp_data_reg, i8042_data_reg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) i8042_pnp_data_reg = i8042_data_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) pnp_data_busted = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) if (((i8042_pnp_command_reg & ~0xf) == (i8042_command_reg & ~0xf) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) i8042_pnp_command_reg != i8042_command_reg) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) !i8042_pnp_command_reg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) pr_warn("PNP: PS/2 controller has invalid command port %#x; using default %#x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) i8042_pnp_command_reg, i8042_command_reg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) i8042_pnp_command_reg = i8042_command_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) pnp_data_busted = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) if (!i8042_nokbd && !i8042_pnp_kbd_irq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) pr_warn("PNP: PS/2 controller doesn't have KBD irq; using default %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) i8042_kbd_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) i8042_pnp_kbd_irq = i8042_kbd_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) pnp_data_busted = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) if (!i8042_noaux && !i8042_pnp_aux_irq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) if (!pnp_data_busted && i8042_pnp_kbd_irq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) pr_warn("PNP: PS/2 appears to have AUX port disabled, "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) "if this is incorrect please boot with i8042.nopnp\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) i8042_noaux = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) pr_warn("PNP: PS/2 controller doesn't have AUX irq; using default %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) i8042_aux_irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) i8042_pnp_aux_irq = i8042_aux_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) i8042_data_reg = i8042_pnp_data_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) i8042_command_reg = i8042_pnp_command_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) i8042_kbd_irq = i8042_pnp_kbd_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) i8042_aux_irq = i8042_pnp_aux_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) #ifdef CONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) i8042_bypass_aux_irq_test = !pnp_data_busted &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) dmi_check_system(i8042_dmi_laptop_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) #else /* !CONFIG_PNP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) static inline int i8042_pnp_init(void) { return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) static inline void i8042_pnp_exit(void) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) #endif /* CONFIG_PNP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) static int __init i8042_platform_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) int retval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) #ifdef CONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) u8 a20_on = 0xdf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) /* Just return if platform does not have i8042 controller */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) if (x86_platform.legacy.i8042 == X86_LEGACY_I8042_PLATFORM_ABSENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) return -ENODEV;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) * On ix86 platforms touching the i8042 data register region can do really
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) * bad things. Because of this the region is always reserved on ix86 boxes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) * if (!request_region(I8042_DATA_REG, 16, "i8042"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) * return -EBUSY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) i8042_kbd_irq = I8042_MAP_IRQ(1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) i8042_aux_irq = I8042_MAP_IRQ(12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) retval = i8042_pnp_init();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) if (retval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) return retval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) #if defined(__ia64__)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) i8042_reset = I8042_RESET_ALWAYS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) #ifdef CONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) /* Honor module parameter when value is not default */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) if (i8042_reset == I8042_RESET_DEFAULT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) if (dmi_check_system(i8042_dmi_reset_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) i8042_reset = I8042_RESET_ALWAYS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) if (dmi_check_system(i8042_dmi_noselftest_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) i8042_reset = I8042_RESET_NEVER;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) if (dmi_check_system(i8042_dmi_noloop_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) i8042_noloop = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) if (dmi_check_system(i8042_dmi_nomux_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) i8042_nomux = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) if (dmi_check_system(i8042_dmi_forcemux_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) i8042_nomux = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) if (dmi_check_system(i8042_dmi_notimeout_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) i8042_notimeout = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) if (dmi_check_system(i8042_dmi_dritek_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) i8042_dritek = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) if (dmi_check_system(i8042_dmi_kbdreset_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) i8042_kbdreset = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) if (dmi_check_system(i8042_dmi_probe_defer_table))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) i8042_probe_defer = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) * A20 was already enabled during early kernel init. But some buggy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) * resume from S3. So we do it here and hope that nothing breaks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) i8042_command(&a20_on, 0x10d1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) i8042_command(NULL, 0x00ff); /* Null command for SMM firmware */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) #endif /* CONFIG_X86 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) return retval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) static inline void i8042_platform_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) i8042_pnp_exit();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) #endif /* _I8042_X86IA64IO_H */