From: Sasha Levin Date: Tue, 7 Feb 2023 03:15:36 +0000 (-0500) Subject: Fixes for 5.10 X-Git-Tag: v5.15.93~50 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=331b5ba9358689bd9bc77e714a9205da162bcbbd;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- diff --git a/queue-5.10/iio-adc-stm32-dfsdm-fill-module-aliases.patch b/queue-5.10/iio-adc-stm32-dfsdm-fill-module-aliases.patch new file mode 100644 index 00000000000..d6e9e281401 --- /dev/null +++ b/queue-5.10/iio-adc-stm32-dfsdm-fill-module-aliases.patch @@ -0,0 +1,37 @@ +From bd115dca7daba75a349a92aedb9bde1367e0e01c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 2 Dec 2022 16:28:48 +0100 +Subject: iio: adc: stm32-dfsdm: fill module aliases + +From: Olivier Moysan + +[ Upstream commit cc3304052a89ab6ac887ed9224420a27e3d354e1 ] + +When STM32 DFSDM driver is built as module, no modalias information +is available. This prevents module to be loaded by udev. +Add MODULE_DEVICE_TABLE() to fill module aliases. + +Fixes: e2e6771c6462 ("IIO: ADC: add STM32 DFSDM sigma delta ADC support") +Signed-off-by: Olivier Moysan +Link: https://lore.kernel.org/r/20221202152848.45585-1-olivier.moysan@foss.st.com +Signed-off-by: Jonathan Cameron +Signed-off-by: Sasha Levin +--- + drivers/iio/adc/stm32-dfsdm-adc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c +index 9234f14167b7..171d73efb2f8 100644 +--- a/drivers/iio/adc/stm32-dfsdm-adc.c ++++ b/drivers/iio/adc/stm32-dfsdm-adc.c +@@ -1521,6 +1521,7 @@ static const struct of_device_id stm32_dfsdm_adc_match[] = { + }, + {} + }; ++MODULE_DEVICE_TABLE(of, stm32_dfsdm_adc_match); + + static int stm32_dfsdm_adc_probe(struct platform_device *pdev) + { +-- +2.39.0 + diff --git a/queue-5.10/input-i8042-add-clevo-pcx0dx-to-i8042-quirk-table.patch b/queue-5.10/input-i8042-add-clevo-pcx0dx-to-i8042-quirk-table.patch new file mode 100644 index 00000000000..60570875063 --- /dev/null +++ b/queue-5.10/input-i8042-add-clevo-pcx0dx-to-i8042-quirk-table.patch @@ -0,0 +1,44 @@ +From 7277b80fef8736edec260c973f9cde5e0a0aa427 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 10 Jan 2023 14:45:24 +0100 +Subject: Input: i8042 - add Clevo PCX0DX to i8042 quirk table + +From: Werner Sembach + +[ Upstream commit 9c445d2637c938a800fcc8b5f0b10e60c94460c7 ] + +The Clevo PCX0DX/TUXEDO XP1511, need quirks for the keyboard to not be +occasionally unresponsive after resume. + +Signed-off-by: Werner Sembach +Cc: stable@vger.kernel.org +Reviewed-by: Hans de Goede +Reviewed-by: Mattijs Korpershoek +Link: https://lore.kernel.org/r/20230110134524.553620-1-wse@tuxedocomputers.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +--- + drivers/input/serio/i8042-x86ia64io.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index 184d7c30f732..65c0081838e3 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -1169,6 +1169,13 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { + .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | + SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) + }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "PCX0DX"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, + { + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "X170SM"), +-- +2.39.0 + diff --git a/queue-5.10/input-i8042-add-tuxedo-devices-to-i8042-quirk-tables.patch b/queue-5.10/input-i8042-add-tuxedo-devices-to-i8042-quirk-tables.patch new file mode 100644 index 00000000000..1025f7630ec --- /dev/null +++ b/queue-5.10/input-i8042-add-tuxedo-devices-to-i8042-quirk-tables.patch @@ -0,0 +1,187 @@ +From 5091422d42bd12287ad09c863f20149e4830ca50 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 29 Jun 2022 17:38:52 -0700 +Subject: Input: i8042 - add TUXEDO devices to i8042 quirk tables + +From: Werner Sembach + +[ Upstream commit a6a87c36165e6791eeaed88025cde270536c3198 ] + +A lot of modern Clevo barebones have touchpad and/or keyboard issues after +suspend fixable with nomux + reset + noloop + nopnp. Luckily, none of them +have an external PS/2 port so this can safely be set for all of them. + +I'm not entirely sure if every device listed really needs all four quirks, +but after testing and production use. No negative effects could be +observed when setting all four. + +The list is quite massive as neither the TUXEDO nor the Clevo dmi strings +have been very consistent historically. I tried to keep the list as short +as possible without risking on missing an affected device. + +This is revision 3. The Clevo N150CU barebone is still removed as it might +have problems with the fix and needs further investigations. The +SchenkerTechnologiesGmbH System-/Board-Vendor string variations are +added. This is now based in the quirk table refactor. This now also +includes the additional noaux flag for the NS7xMU. + +Signed-off-by: Werner Sembach +Reviewed-by: Hans de Goede +Link: https://lore.kernel.org/r/20220629112725.12922-5-wse@tuxedocomputers.com +Signed-off-by: Dmitry Torokhov +Stable-dep-of: 9c445d2637c9 ("Input: i8042 - add Clevo PCX0DX to i8042 quirk table") +Signed-off-by: Sasha Levin +--- + drivers/input/serio/i8042-x86ia64io.h | 129 ++++++++++++++++++++++++++ + 1 file changed, 129 insertions(+) + +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index 1d2b34aac0c7..184d7c30f732 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -1025,6 +1025,29 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { + }, + .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, ++ /* ++ * A lot of modern Clevo barebones have touchpad and/or keyboard issues ++ * after suspend fixable with nomux + reset + noloop + nopnp. Luckily, ++ * none of them have an external PS/2 port so this can safely be set for ++ * all of them. These two are based on a Clevo design, but have the ++ * board_name changed. ++ */ ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"), ++ DMI_MATCH(DMI_BOARD_NAME, "AURA1501"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"), ++ DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, + { + /* Mivvy M310 */ + .matches = { +@@ -1054,6 +1077,112 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { + }, + .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, ++ /* ++ * A lot of modern Clevo barebones have touchpad and/or keyboard issues ++ * after suspend fixable with nomux + reset + noloop + nopnp. Luckily, ++ * none of them have an external PS/2 port so this can safely be set for ++ * all of them. ++ * Clevo barebones come with board_vendor and/or system_vendor set to ++ * either the very generic string "Notebook" and/or a different value ++ * for each individual reseller. The only somewhat universal way to ++ * identify them is by board_name. ++ */ ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "LAPQC71A"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "LAPQC71B"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "N140CU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "N141CU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "NH5xAx"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ /* ++ * At least one modern Clevo barebone has the touchpad connected both ++ * via PS/2 and i2c interface. This causes a race condition between the ++ * psmouse and i2c-hid driver. Since the full capability of the touchpad ++ * is available via the i2c interface and the device has no external ++ * PS/2 port, it is safe to just ignore all ps2 mouses here to avoid ++ * this issue. The known affected device is the ++ * TUXEDO InfinityBook S17 Gen6 / Clevo NS70MU which comes with one of ++ * the two different dmi strings below. NS50MU is not a typo! ++ */ ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "NS50MU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOAUX | SERIO_QUIRK_NOMUX | ++ SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | ++ SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "NS50_70MU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOAUX | SERIO_QUIRK_NOMUX | ++ SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | ++ SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "PB50_70DFx,DDx"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "X170SM"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "X170KM-G"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | ++ SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) ++ }, + { } + }; + +-- +2.39.0 + diff --git a/queue-5.10/input-i8042-merge-quirk-tables.patch b/queue-5.10/input-i8042-merge-quirk-tables.patch new file mode 100644 index 00000000000..11ca5576d7c --- /dev/null +++ b/queue-5.10/input-i8042-merge-quirk-tables.patch @@ -0,0 +1,1653 @@ +From bb051cc6e2f7a007f176dd52e62e6dc35265f46f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 29 Jun 2022 17:38:07 -0700 +Subject: Input: i8042 - merge quirk tables + +From: Werner Sembach + +[ Upstream commit ff946268a0813c35b790dfbe07c3bfaa7bfb869c ] + +Merge i8042 quirk tables to reduce code duplication for devices that need +more than one quirk. Before every quirk had its own table with devices +needing that quirk. If a new quirk needed to be added a new table had to +be created. When a device needed multiple quirks, it appeared in multiple +tables. Now only one table called i8042_dmi_quirk_table exists. In it every +device has one entry and required quirks are coded in the .driver_data +field of the struct dmi_system_id used by this table. Multiple quirks for +one device can be applied by bitwise-or of the new SERIO_QUIRK_* defines. + +Also align quirkable options with command line parameters and make vendor +wide quirks per device overwriteable on a per device basis. The first match +is honored while following matches are ignored. So when a vendor wide quirk +is defined in the table, a device can inserted before and therefore +ignoring the vendor wide define. + +Signed-off-by: Werner Sembach +Reviewed-by: Hans de Goede +Link: https://lore.kernel.org/r/20220629112725.12922-3-wse@tuxedocomputers.com +Signed-off-by: Dmitry Torokhov +Stable-dep-of: 9c445d2637c9 ("Input: i8042 - add Clevo PCX0DX to i8042 quirk table") +Signed-off-by: Sasha Levin +--- + drivers/input/serio/i8042-x86ia64io.h | 1100 +++++++++++++------------ + 1 file changed, 595 insertions(+), 505 deletions(-) + +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index 91c6f24b4837..1d2b34aac0c7 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -67,654 +67,735 @@ static inline void i8042_write_command(int val) + + #include + +-static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = { ++#define SERIO_QUIRK_NOKBD BIT(0) ++#define SERIO_QUIRK_NOAUX BIT(1) ++#define SERIO_QUIRK_NOMUX BIT(2) ++#define SERIO_QUIRK_FORCEMUX BIT(3) ++#define SERIO_QUIRK_UNLOCK BIT(4) ++#define SERIO_QUIRK_PROBE_DEFER BIT(5) ++#define SERIO_QUIRK_RESET_ALWAYS BIT(6) ++#define SERIO_QUIRK_RESET_NEVER BIT(7) ++#define SERIO_QUIRK_DIECT BIT(8) ++#define SERIO_QUIRK_DUMBKBD BIT(9) ++#define SERIO_QUIRK_NOLOOP BIT(10) ++#define SERIO_QUIRK_NOTIMEOUT BIT(11) ++#define SERIO_QUIRK_KBDRESET BIT(12) ++#define SERIO_QUIRK_DRITEK BIT(13) ++#define SERIO_QUIRK_NOPNP BIT(14) ++ ++/* Quirk table for different mainboards. Options similar or identical to i8042 ++ * module parameters. ++ * ORDERING IS IMPORTANT! The first match will be apllied and the rest ignored. ++ * This allows entries to overwrite vendor wide quirks on a per device basis. ++ * Where this is irrelevant, entries are sorted case sensitive by DMI_SYS_VENDOR ++ * and/or DMI_BOARD_VENDOR to make it easier to avoid dublicate entries. ++ */ ++static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { + { +- /* +- * Arima-Rioworks HDAMB - +- * AUX LOOP command does not raise AUX IRQ +- */ + .matches = { +- DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"), +- DMI_MATCH(DMI_BOARD_NAME, "HDAMB"), +- DMI_MATCH(DMI_BOARD_VERSION, "Rev E"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* ASUS G1S */ + .matches = { +- DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."), +- DMI_MATCH(DMI_BOARD_NAME, "G1S"), +- DMI_MATCH(DMI_BOARD_VERSION, "1.0"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X750LN"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* ASUS P65UP5 - AUX LOOP command does not raise AUX IRQ */ ++ /* Asus X450LCP */ + .matches = { +- DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), +- DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"), +- DMI_MATCH(DMI_BOARD_VERSION, "REV 2.X"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER) + }, + { ++ /* ASUS ZenBook UX425UA */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "X750LN"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER) + }, + { ++ /* ASUS ZenBook UM325UA */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), +- DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "8500"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER) + }, ++ /* ++ * On some Asus laptops, just running self tests cause problems. ++ */ + { + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), +- DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "DL760"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_NEVER) + }, + { +- /* Dell Embedded Box PC 3000 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Embedded Box PC 3000"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */ + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_NEVER) + }, + { +- /* OQO Model 01 */ ++ /* ASUS P65UP5 - AUX LOOP command does not raise AUX IRQ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "OQO"), +- DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "00"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), ++ DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"), ++ DMI_MATCH(DMI_BOARD_VERSION, "REV 2.X"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* ULI EV4873 - AUX LOOP does not work properly */ ++ /* ASUS G1S */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ULI"), +- DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "5a"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."), ++ DMI_MATCH(DMI_BOARD_NAME, "G1S"), ++ DMI_MATCH(DMI_BOARD_VERSION, "1.0"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Microsoft Virtual Machine */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Medion MAM 2070 */ ++ /* Acer Aspire 5710 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), +- DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "5a"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Medion Akoya E7225 */ ++ /* Acer Aspire 7738 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Medion"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Akoya E7225"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "1.0"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7738"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Blue FB5601 */ ++ /* Acer Aspire 5536 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "blue"), +- DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "M606"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Gigabyte M912 */ ++ /* ++ * Acer Aspire 5738z ++ * Touchpad stops working in mux mode when dis- + re-enabled ++ * with the touchpad enable/disable toggle hotkey ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "M912"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "01"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Gigabyte M1022M netbook */ ++ /* Acer Aspire One 150 */ + .matches = { +- DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co.,Ltd."), +- DMI_MATCH(DMI_BOARD_NAME, "M1022E"), +- DMI_MATCH(DMI_BOARD_VERSION, "1.02"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* Gigabyte Spring Peak - defines wrong chassis type */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* Gigabyte T1005 - defines wrong chassis type ("Other") */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "T1005"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), +- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"), +- DMI_MATCH(DMI_PRODUCT_NAME, "C15B"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ByteSpeed LLC"), +- DMI_MATCH(DMI_PRODUCT_NAME, "ByteSpeed Laptop C15B"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, +- { } +-}; +- +-/* +- * Some Fujitsu notebooks are having trouble with touchpads if +- * active multiplexing mode is activated. Luckily they don't have +- * external PS/2 ports so we can safely disable it. +- * ... apparently some Toshibas don't like MUX mode either and +- * die horrible death on reboot. +- */ +-static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { + { +- /* Fujitsu Lifebook P7010/P7010D */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "P7010"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, ++ /* ++ * Some Wistron based laptops need us to explicitly enable the 'Dritek ++ * keyboard extension' to make their extra keys start generating scancodes. ++ * Originally, this was just confined to older laptops, but a few Acer laptops ++ * have turned up in 2007 that also need this again. ++ */ + { +- /* Fujitsu Lifebook P7010 */ ++ /* Acer Aspire 5100 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), +- DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu Lifebook P5020D */ ++ /* Acer Aspire 5610 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu Lifebook S2000 */ ++ /* Acer Aspire 5630 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu Lifebook S6230 */ ++ /* Acer Aspire 5650 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu Lifebook T725 laptop */ ++ /* Acer Aspire 5680 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu Lifebook U745 */ ++ /* Acer Aspire 5720 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U745"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu T70H */ ++ /* Acer Aspire 9110 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu-Siemens Lifebook T3010 */ ++ /* Acer TravelMate 660 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu-Siemens Lifebook E4010 */ ++ /* Acer TravelMate 2490 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu-Siemens Amilo Pro 2010 */ ++ /* Acer TravelMate 4280 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), +- DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_DRITEK) + }, + { +- /* Fujitsu-Siemens Amilo Pro 2030 */ ++ /* Amoi M636/A737 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), +- DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* +- * No data is coming from the touchscreen unless KBC +- * is in legacy mode. +- */ +- /* Panasonic CF-29 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"), +- DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ByteSpeed LLC"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "ByteSpeed Laptop C15B"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* +- * HP Pavilion DV4017EA - +- * errors on MUX ports are reported without raising AUXDATA +- * causing "spurious NAK" messages. +- */ ++ /* Compal HEL80I */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"), ++ DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* +- * HP Pavilion ZT1000 - +- * like DV4017EA does not raise AUXERR for errors on MUX ports. +- */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), +- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "8500"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* +- * HP Pavilion DV4270ca - +- * like DV4017EA does not raise AUXERR for errors on MUX ports. +- */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "DL760"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { ++ /* Advent 4211 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"), ++ DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { ++ /* Dell Embedded Box PC 3000 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), +- DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Embedded Box PC 3000"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { ++ /* Dell XPS M1530 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), +- DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* Dell Vostro 1510 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Sharp Actius MM20 */ ++ /* Dell Vostro V13 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "SHARP"), +- DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Sony Vaio FS-115b */ ++ /* Dell Vostro 1320 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), +- DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* +- * Sony Vaio FZ-240E - +- * reset and GET ID commands issued via KBD port are +- * sometimes being delivered to AUX3. +- */ ++ /* Dell Vostro 1520 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), +- DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* +- * Most (all?) VAIOs do not have external PS/2 ports nor +- * they implement active multiplexing properly, and +- * MUX discovery usually messes up keyboard/touchpad. +- */ ++ /* Dell Vostro 1720 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), +- DMI_MATCH(DMI_BOARD_NAME, "VAIO"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* Amoi M636/A737 */ ++ /* Entroware Proteus */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."), +- DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS) + }, ++ /* ++ * Some Fujitsu notebooks are having trouble with touchpads if ++ * active multiplexing mode is activated. Luckily they don't have ++ * external PS/2 ports so we can safely disable it. ++ * ... apparently some Toshibas don't like MUX mode either and ++ * die horrible death on reboot. ++ */ + { +- /* Lenovo 3000 n100 */ ++ /* Fujitsu Lifebook P7010/P7010D */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), +- DMI_MATCH(DMI_PRODUCT_NAME, "076804U"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "P7010"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Lenovo XiaoXin Air 12 */ ++ /* Fujitsu Lifebook P5020D */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), +- DMI_MATCH(DMI_PRODUCT_NAME, "80UN"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* Fujitsu Lifebook S2000 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer Aspire 5710 */ ++ /* Fujitsu Lifebook S6230 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer Aspire 7738 */ ++ /* Fujitsu Lifebook T725 laptop */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7738"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Gericom Bellagio */ ++ /* Fujitsu Lifebook U745 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Gericom"), +- DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U745"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* IBM 2656 */ ++ /* Fujitsu T70H */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "IBM"), +- DMI_MATCH(DMI_PRODUCT_NAME, "2656"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Dell XPS M1530 */ ++ /* Fujitsu A544 laptop */ ++ /* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Compal HEL80I */ ++ /* Fujitsu AH544 laptop */ ++ /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"), +- DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Dell Vostro 1510 */ ++ /* Fujitsu U574 laptop */ ++ /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Acer Aspire 5536 */ ++ /* Fujitsu UH554 laptop */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Dell Vostro V13 */ ++ /* Fujitsu Lifebook P7010 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Newer HP Pavilion dv4 models */ ++ /* Fujitsu-Siemens Lifebook T3010 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), +- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Asus X450LCP */ ++ /* Fujitsu-Siemens Lifebook E4010 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Avatar AVIU-145A6 */ ++ /* Fujitsu-Siemens Amilo Pro 2010 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Intel"), +- DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* TUXEDO BU1406 */ ++ /* Fujitsu-Siemens Amilo Pro 2030 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), +- DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"), ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Lenovo LaVie Z */ ++ /* Gigabyte M912 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "M912"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "01"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* +- * Acer Aspire 5738z +- * Touchpad stops working in mux mode when dis- + re-enabled +- * with the touchpad enable/disable toggle hotkey +- */ ++ /* Gigabyte Spring Peak - defines wrong chassis type */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Spring Peak"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Entroware Proteus */ ++ /* Gigabyte T1005 - defines wrong chassis type ("Other") */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "T1005"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, +- { } +-}; +- +-static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = { + { +- /* +- * Sony Vaio VGN-CS series require MUX or the touch sensor +- * buttons will disturb touchpad operation +- */ ++ /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), +- DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, +- { } +-}; +- +-/* +- * On some Asus laptops, just running self tests cause problems. +- */ +-static const struct dmi_system_id i8042_dmi_noselftest_table[] = { ++ /* ++ * Some laptops need keyboard reset before probing for the trackpad to get ++ * it detected, initialised & finally work. ++ */ + { ++ /* Gigabyte P35 v2 - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ +- }, +- }, { +- .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */ ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "P35V2"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_KBDRESET) + }, +- { } +-}; +-static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { +- { +- /* MSI Wind U-100 */ ++ { ++ /* Aorus branded Gigabyte X3 Plus - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_BOARD_NAME, "U-100"), +- DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X3"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_KBDRESET) + }, + { +- /* LG Electronics X110 */ ++ /* Gigabyte P34 - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_BOARD_NAME, "X110"), +- DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "P34"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_KBDRESET) + }, + { +- /* Acer Aspire One 150 */ ++ /* Gigabyte P57 - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"), ++ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "P57"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_KBDRESET) + }, + { ++ /* Gericom Bellagio */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Gericom"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* Gigabyte M1022M netbook */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co.,Ltd."), ++ DMI_MATCH(DMI_BOARD_NAME, "M1022E"), ++ DMI_MATCH(DMI_BOARD_VERSION, "1.02"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { ++ /* ++ * HP Pavilion DV4017EA - ++ * errors on MUX ports are reported without raising AUXDATA ++ * causing "spurious NAK" messages. ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* ++ * HP Pavilion ZT1000 - ++ * like DV4017EA does not raise AUXERR for errors on MUX ports. ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* ++ * HP Pavilion DV4270ca - ++ * like DV4017EA does not raise AUXERR for errors on MUX ports. ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* Newer HP Pavilion dv4 models */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_NOTIMEOUT) + }, + { +- /* Advent 4211 */ ++ /* IBM 2656 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"), ++ DMI_MATCH(DMI_SYS_VENDOR, "IBM"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "2656"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Medion Akoya Mini E1210 */ ++ /* Avatar AVIU-145A6 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), +- DMI_MATCH(DMI_PRODUCT_NAME, "E1210"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Intel"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Medion Akoya E1222 */ ++ /* Intel MBO Desktop D845PESV */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), +- DMI_MATCH(DMI_PRODUCT_NAME, "E122X"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), ++ DMI_MATCH(DMI_BOARD_NAME, "D845PESV"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOPNP) + }, + { +- /* Mivvy M310 */ ++ /* ++ * Intel NUC D54250WYK - does not have i8042 controller but ++ * declares PS/2 devices in DSDT. ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"), +- DMI_MATCH(DMI_PRODUCT_NAME, "N10"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), ++ DMI_MATCH(DMI_BOARD_NAME, "D54250WYK"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOPNP) + }, + { +- /* Dell Vostro 1320 */ ++ /* Lenovo 3000 n100 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"), ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "076804U"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Dell Vostro 1520 */ ++ /* Lenovo XiaoXin Air 12 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"), ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "80UN"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Dell Vostro 1720 */ ++ /* Lenovo LaVie Z */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"), ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo LaVie Z"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { + /* Lenovo Ideapad U455 */ +@@ -722,6 +803,7 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "20046"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { + /* Lenovo ThinkPad L460 */ +@@ -729,13 +811,7 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"), + }, +- }, +- { +- /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */ +- .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), +- DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"), +- }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { + /* Lenovo ThinkPad Twist S230u */ +@@ -743,275 +819,269 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* Entroware Proteus */ ++ /* LG Electronics X110 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Entroware"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Proteus"), +- DMI_MATCH(DMI_PRODUCT_VERSION, "EL07R4"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."), ++ DMI_MATCH(DMI_BOARD_NAME, "X110"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, +- { } +-}; +- +-#ifdef CONFIG_PNP +-static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = { + { +- /* Intel MBO Desktop D845PESV */ ++ /* Medion Akoya Mini E1210 */ + .matches = { +- DMI_MATCH(DMI_BOARD_NAME, "D845PESV"), +- DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), ++ DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "E1210"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* +- * Intel NUC D54250WYK - does not have i8042 controller but +- * declares PS/2 devices in DSDT. +- */ ++ /* Medion Akoya E1222 */ + .matches = { +- DMI_MATCH(DMI_BOARD_NAME, "D54250WYK"), +- DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), ++ DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "E122X"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { + /* MSI Wind U-100 */ + .matches = { +- DMI_MATCH(DMI_BOARD_NAME, "U-100"), +- DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), +- }, +- }, +- { +- /* Acer Aspire 5 A515 */ +- .matches = { +- DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"), +- DMI_MATCH(DMI_BOARD_VENDOR, "PK"), +- }, +- }, +- { } +-}; +- +-static const struct dmi_system_id i8042_dmi_laptop_table[] __initconst = { +- { +- .matches = { +- DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ +- }, +- }, +- { +- .matches = { +- DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */ ++ DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), ++ DMI_MATCH(DMI_BOARD_NAME, "U-100"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOPNP) + }, + { ++ /* ++ * No data is coming from the touchscreen unless KBC ++ * is in legacy mode. ++ */ ++ /* Panasonic CF-29 */ + .matches = { +- DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ ++ DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { ++ /* Medion Akoya E7225 */ + .matches = { +- DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */ ++ DMI_MATCH(DMI_SYS_VENDOR, "Medion"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Akoya E7225"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "1.0"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, +- { } +-}; +-#endif +- +-static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = { + { +- /* Dell Vostro V13 */ ++ /* Microsoft Virtual Machine */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), +- DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Newer HP Pavilion dv4 models */ ++ /* Medion MAM 2070 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), +- DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "5a"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Fujitsu A544 laptop */ +- /* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */ ++ /* TUXEDO BU1406 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N24_25BU"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Fujitsu AH544 laptop */ +- /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ ++ /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, + { +- /* Fujitsu Lifebook T725 laptop */ ++ /* OQO Model 01 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), ++ DMI_MATCH(DMI_SYS_VENDOR, "OQO"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "00"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Fujitsu U574 laptop */ +- /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"), ++ DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "C15B"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Fujitsu UH554 laptop */ ++ /* Acer Aspire 5 A515 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), +- DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK UH544"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "PK"), ++ DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOPNP) + }, +- { } +-}; +- +-/* +- * Some Wistron based laptops need us to explicitly enable the 'Dritek +- * keyboard extension' to make their extra keys start generating scancodes. +- * Originally, this was just confined to older laptops, but a few Acer laptops +- * have turned up in 2007 that also need this again. +- */ +-static const struct dmi_system_id __initconst i8042_dmi_dritek_table[] = { + { +- /* Acer Aspire 5100 */ ++ /* ULI EV4873 - AUX LOOP does not work properly */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"), ++ DMI_MATCH(DMI_SYS_VENDOR, "ULI"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "5a"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Acer Aspire 5610 */ ++ /* ++ * Arima-Rioworks HDAMB - ++ * AUX LOOP command does not raise AUX IRQ ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), ++ DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"), ++ DMI_MATCH(DMI_BOARD_NAME, "HDAMB"), ++ DMI_MATCH(DMI_BOARD_VERSION, "Rev E"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, + { +- /* Acer Aspire 5630 */ ++ /* Sharp Actius MM20 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"), ++ DMI_MATCH(DMI_SYS_VENDOR, "SHARP"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer Aspire 5650 */ ++ /* ++ * Sony Vaio FZ-240E - ++ * reset and GET ID commands issued via KBD port are ++ * sometimes being delivered to AUX3. ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer Aspire 5680 */ ++ /* ++ * Most (all?) VAIOs do not have external PS/2 ports nor ++ * they implement active multiplexing properly, and ++ * MUX discovery usually messes up keyboard/touchpad. ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), ++ DMI_MATCH(DMI_BOARD_NAME, "VAIO"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer Aspire 5720 */ ++ /* Sony Vaio FS-115b */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer Aspire 9110 */ ++ /* ++ * Sony Vaio VGN-CS series require MUX or the touch sensor ++ * buttons will disturb touchpad operation ++ */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"), ++ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_FORCEMUX) + }, + { +- /* Acer TravelMate 660 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), ++ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer TravelMate 2490 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"), ++ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, + { +- /* Acer TravelMate 4280 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "Acer"), +- DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"), ++ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOMUX) + }, +- { } +-}; +- +-/* +- * Some laptops need keyboard reset before probing for the trackpad to get +- * it detected, initialised & finally work. +- */ +-static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = { + { +- /* Gigabyte P35 v2 - Elantech touchpad */ ++ /* Mivvy M310 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "P35V2"), ++ DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N10"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_RESET_ALWAYS) + }, +- { +- /* Aorus branded Gigabyte X3 Plus - Elantech touchpad */ ++ /* ++ * Some laptops need keyboard reset before probing for the trackpad to get ++ * it detected, initialised & finally work. ++ */ ++ { ++ /* Schenker XMG C504 - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "X3"), ++ DMI_MATCH(DMI_SYS_VENDOR, "XMG"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "C504"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_KBDRESET) + }, + { +- /* Gigabyte P34 - Elantech touchpad */ ++ /* Blue FB5601 */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "P34"), ++ DMI_MATCH(DMI_SYS_VENDOR, "blue"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "M606"), + }, ++ .driver_data = (void *)(SERIO_QUIRK_NOLOOP) + }, ++ { } ++}; ++ ++#ifdef CONFIG_PNP ++static const struct dmi_system_id i8042_dmi_laptop_table[] __initconst = { + { +- /* Gigabyte P57 - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), +- DMI_MATCH(DMI_PRODUCT_NAME, "P57"), ++ DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ + }, + }, + { +- /* Schenker XMG C504 - Elantech touchpad */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "XMG"), +- DMI_MATCH(DMI_PRODUCT_NAME, "C504"), ++ DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */ + }, + }, +- { } +-}; +- +-static const struct dmi_system_id i8042_dmi_probe_defer_table[] __initconst = { + { +- /* ASUS ZenBook UX425UA */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"), ++ DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ + }, + }, + { +- /* ASUS ZenBook UM325UA */ + .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"), ++ DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */ + }, + }, + { } + }; ++#endif + + #endif /* CONFIG_X86 */ + +@@ -1167,11 +1237,6 @@ static int __init i8042_pnp_init(void) + bool pnp_data_busted = false; + int err; + +-#ifdef CONFIG_X86 +- if (dmi_check_system(i8042_dmi_nopnp_table)) +- i8042_nopnp = true; +-#endif +- + if (i8042_nopnp) { + pr_info("PNP detection disabled\n"); + return 0; +@@ -1275,6 +1340,59 @@ static inline int i8042_pnp_init(void) { return 0; } + static inline void i8042_pnp_exit(void) { } + #endif /* CONFIG_PNP */ + ++ ++#ifdef CONFIG_X86 ++static void __init i8042_check_quirks(void) ++{ ++ const struct dmi_system_id *device_quirk_info; ++ uintptr_t quirks; ++ ++ device_quirk_info = dmi_first_match(i8042_dmi_quirk_table); ++ if (!device_quirk_info) ++ return; ++ ++ quirks = (uintptr_t)device_quirk_info->driver_data; ++ ++ if (quirks & SERIO_QUIRK_NOKBD) ++ i8042_nokbd = true; ++ if (quirks & SERIO_QUIRK_NOAUX) ++ i8042_noaux = true; ++ if (quirks & SERIO_QUIRK_NOMUX) ++ i8042_nomux = true; ++ if (quirks & SERIO_QUIRK_FORCEMUX) ++ i8042_nomux = false; ++ if (quirks & SERIO_QUIRK_UNLOCK) ++ i8042_unlock = true; ++ if (quirks & SERIO_QUIRK_PROBE_DEFER) ++ i8042_probe_defer = true; ++ /* Honor module parameter when value is not default */ ++ if (i8042_reset == I8042_RESET_DEFAULT) { ++ if (quirks & SERIO_QUIRK_RESET_ALWAYS) ++ i8042_reset = I8042_RESET_ALWAYS; ++ if (quirks & SERIO_QUIRK_RESET_NEVER) ++ i8042_reset = I8042_RESET_NEVER; ++ } ++ if (quirks & SERIO_QUIRK_DIECT) ++ i8042_direct = true; ++ if (quirks & SERIO_QUIRK_DUMBKBD) ++ i8042_dumbkbd = true; ++ if (quirks & SERIO_QUIRK_NOLOOP) ++ i8042_noloop = true; ++ if (quirks & SERIO_QUIRK_NOTIMEOUT) ++ i8042_notimeout = true; ++ if (quirks & SERIO_QUIRK_KBDRESET) ++ i8042_kbdreset = true; ++ if (quirks & SERIO_QUIRK_DRITEK) ++ i8042_dritek = true; ++#ifdef CONFIG_PNP ++ if (quirks & SERIO_QUIRK_NOPNP) ++ i8042_nopnp = true; ++#endif ++} ++#else ++static inline void i8042_check_quirks(void) {} ++#endif ++ + static int __init i8042_platform_init(void) + { + int retval; +@@ -1297,45 +1415,17 @@ static int __init i8042_platform_init(void) + i8042_kbd_irq = I8042_MAP_IRQ(1); + i8042_aux_irq = I8042_MAP_IRQ(12); + +- retval = i8042_pnp_init(); +- if (retval) +- return retval; +- + #if defined(__ia64__) +- i8042_reset = I8042_RESET_ALWAYS; ++ i8042_reset = I8042_RESET_ALWAYS; + #endif + +-#ifdef CONFIG_X86 +- /* Honor module parameter when value is not default */ +- if (i8042_reset == I8042_RESET_DEFAULT) { +- if (dmi_check_system(i8042_dmi_reset_table)) +- i8042_reset = I8042_RESET_ALWAYS; +- +- if (dmi_check_system(i8042_dmi_noselftest_table)) +- i8042_reset = I8042_RESET_NEVER; +- } +- +- if (dmi_check_system(i8042_dmi_noloop_table)) +- i8042_noloop = true; +- +- if (dmi_check_system(i8042_dmi_nomux_table)) +- i8042_nomux = true; +- +- if (dmi_check_system(i8042_dmi_forcemux_table)) +- i8042_nomux = false; +- +- if (dmi_check_system(i8042_dmi_notimeout_table)) +- i8042_notimeout = true; +- +- if (dmi_check_system(i8042_dmi_dritek_table)) +- i8042_dritek = true; +- +- if (dmi_check_system(i8042_dmi_kbdreset_table)) +- i8042_kbdreset = true; ++ i8042_check_quirks(); + +- if (dmi_check_system(i8042_dmi_probe_defer_table)) +- i8042_probe_defer = true; ++ retval = i8042_pnp_init(); ++ if (retval) ++ return retval; + ++#ifdef CONFIG_X86 + /* + * A20 was already enabled during early kernel init. But some buggy + * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to +-- +2.39.0 + diff --git a/queue-5.10/input-i8042-move-__initconst-to-fix-code-styling-war.patch b/queue-5.10/input-i8042-move-__initconst-to-fix-code-styling-war.patch new file mode 100644 index 00000000000..380e3900928 --- /dev/null +++ b/queue-5.10/input-i8042-move-__initconst-to-fix-code-styling-war.patch @@ -0,0 +1,38 @@ +From 22d982aed31818dea5035b4cc6d2c33eb08f9bca Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 29 Jun 2022 17:34:42 -0700 +Subject: Input: i8042 - move __initconst to fix code styling warning + +From: Werner Sembach + +[ Upstream commit 95a9916c909f0b1d95e24b4232b4bc38ff755415 ] + +Move __intconst from before i8042_dmi_laptop_table[] to after it for +consistent code styling. + +Signed-off-by: Werner Sembach +Reviewed-by: Hans de Goede +Link: https://lore.kernel.org/r/20220629112725.12922-2-wse@tuxedocomputers.com +Signed-off-by: Dmitry Torokhov +Stable-dep-of: 9c445d2637c9 ("Input: i8042 - add Clevo PCX0DX to i8042 quirk table") +Signed-off-by: Sasha Levin +--- + drivers/input/serio/i8042-x86ia64io.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index 148a7c5fd0e2..91c6f24b4837 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -791,7 +791,7 @@ static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = { + { } + }; + +-static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = { ++static const struct dmi_system_id i8042_dmi_laptop_table[] __initconst = { + { + .matches = { + DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ +-- +2.39.0 + diff --git a/queue-5.10/series b/queue-5.10/series index 083285c4e88..b26f1a1172c 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -40,3 +40,12 @@ scsi-iscsi_tcp-fix-uaf-during-login-when-accessing-t.patch i2c-rk3x-fix-a-bunch-of-kernel-doc-warnings.patch platform-x86-dell-wmi-add-a-keymap-for-key_mute-in-t.patch net-x25-fix-to-not-accept-on-connected-socket.patch +iio-adc-stm32-dfsdm-fill-module-aliases.patch +usb-dwc3-dwc3-qcom-fix-typo-in-the-dwc3-vbus-overrid.patch +usb-dwc3-qcom-enable-vbus-override-when-in-otg-dr-mo.patch +usb-gadget-f_fs-fix-unbalanced-spinlock-in-__ffs_ep0.patch +vc_screen-move-load-of-struct-vc_data-pointer-in-vcs.patch +input-i8042-move-__initconst-to-fix-code-styling-war.patch +input-i8042-merge-quirk-tables.patch +input-i8042-add-tuxedo-devices-to-i8042-quirk-tables.patch +input-i8042-add-clevo-pcx0dx-to-i8042-quirk-table.patch diff --git a/queue-5.10/usb-dwc3-dwc3-qcom-fix-typo-in-the-dwc3-vbus-overrid.patch b/queue-5.10/usb-dwc3-dwc3-qcom-fix-typo-in-the-dwc3-vbus-overrid.patch new file mode 100644 index 00000000000..918b7505ae0 --- /dev/null +++ b/queue-5.10/usb-dwc3-dwc3-qcom-fix-typo-in-the-dwc3-vbus-overrid.patch @@ -0,0 +1,66 @@ +From 77ae541ac3d4120531f55fe63a83f5175ec5e6d6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 4 Jul 2021 02:33:12 +0100 +Subject: usb: dwc3: dwc3-qcom: Fix typo in the dwc3 vbus override API + +From: Wesley Cheng + +[ Upstream commit 8e6cb5d27e8246d9c986ec162d066a502d2b602b ] + +There was an extra character in the dwc3_qcom_vbus_override_enable() +function. Removed the extra character. + +Signed-off-by: Wesley Cheng +Signed-off-by: Bryan O'Donoghue +Reviewed-by: Bjorn Andersson +Link: https://lore.kernel.org/r/20210704013314.200951-2-bryan.odonoghue@linaro.org +Signed-off-by: Greg Kroah-Hartman +Stable-dep-of: eb320f76e31d ("usb: dwc3: qcom: enable vbus override when in OTG dr-mode") +Signed-off-by: Sasha Levin +--- + drivers/usb/dwc3/dwc3-qcom.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c +index 528e36cc58ea..c2662e3a5b84 100644 +--- a/drivers/usb/dwc3/dwc3-qcom.c ++++ b/drivers/usb/dwc3/dwc3-qcom.c +@@ -115,7 +115,7 @@ static inline void dwc3_qcom_clrbits(void __iomem *base, u32 offset, u32 val) + readl(base + offset); + } + +-static void dwc3_qcom_vbus_overrride_enable(struct dwc3_qcom *qcom, bool enable) ++static void dwc3_qcom_vbus_override_enable(struct dwc3_qcom *qcom, bool enable) + { + if (enable) { + dwc3_qcom_setbits(qcom->qscratch_base, QSCRATCH_SS_PHY_CTRL, +@@ -136,7 +136,7 @@ static int dwc3_qcom_vbus_notifier(struct notifier_block *nb, + struct dwc3_qcom *qcom = container_of(nb, struct dwc3_qcom, vbus_nb); + + /* enable vbus override for device mode */ +- dwc3_qcom_vbus_overrride_enable(qcom, event); ++ dwc3_qcom_vbus_override_enable(qcom, event); + qcom->mode = event ? USB_DR_MODE_PERIPHERAL : USB_DR_MODE_HOST; + + return NOTIFY_DONE; +@@ -148,7 +148,7 @@ static int dwc3_qcom_host_notifier(struct notifier_block *nb, + struct dwc3_qcom *qcom = container_of(nb, struct dwc3_qcom, host_nb); + + /* disable vbus override in host mode */ +- dwc3_qcom_vbus_overrride_enable(qcom, !event); ++ dwc3_qcom_vbus_override_enable(qcom, !event); + qcom->mode = event ? USB_DR_MODE_HOST : USB_DR_MODE_PERIPHERAL; + + return NOTIFY_DONE; +@@ -833,7 +833,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev) + + /* enable vbus override for device mode */ + if (qcom->mode == USB_DR_MODE_PERIPHERAL) +- dwc3_qcom_vbus_overrride_enable(qcom, true); ++ dwc3_qcom_vbus_override_enable(qcom, true); + + /* register extcon to override sw_vbus on Vbus change later */ + ret = dwc3_qcom_register_extcon(qcom); +-- +2.39.0 + diff --git a/queue-5.10/usb-dwc3-qcom-enable-vbus-override-when-in-otg-dr-mo.patch b/queue-5.10/usb-dwc3-qcom-enable-vbus-override-when-in-otg-dr-mo.patch new file mode 100644 index 00000000000..a8568915980 --- /dev/null +++ b/queue-5.10/usb-dwc3-qcom-enable-vbus-override-when-in-otg-dr-mo.patch @@ -0,0 +1,39 @@ +From 7d93782aaf3f8bc071f6b82e260d22f61f82ffed Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 24 Jan 2023 09:31:21 +0100 +Subject: usb: dwc3: qcom: enable vbus override when in OTG dr-mode + +From: Neil Armstrong + +[ Upstream commit eb320f76e31dc835b9f57f04af1a2353b13bb7d8 ] + +With vbus override enabled when in OTG dr_mode, Host<->Peripheral +switch now works on SM8550, otherwise the DWC3 seems to be stuck +in Host mode only. + +Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver") +Reviewed-by: Bryan O'Donoghue +Signed-off-by: Neil Armstrong +Link: https://lore.kernel.org/r/20230123-topic-sm8550-upstream-dwc3-qcom-otg-v2-1-2d400e598463@linaro.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/usb/dwc3/dwc3-qcom.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c +index c2662e3a5b84..dac13fe97811 100644 +--- a/drivers/usb/dwc3/dwc3-qcom.c ++++ b/drivers/usb/dwc3/dwc3-qcom.c +@@ -832,7 +832,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev) + qcom->mode = usb_get_dr_mode(&qcom->dwc3->dev); + + /* enable vbus override for device mode */ +- if (qcom->mode == USB_DR_MODE_PERIPHERAL) ++ if (qcom->mode != USB_DR_MODE_HOST) + dwc3_qcom_vbus_override_enable(qcom, true); + + /* register extcon to override sw_vbus on Vbus change later */ +-- +2.39.0 + diff --git a/queue-5.10/usb-gadget-f_fs-fix-unbalanced-spinlock-in-__ffs_ep0.patch b/queue-5.10/usb-gadget-f_fs-fix-unbalanced-spinlock-in-__ffs_ep0.patch new file mode 100644 index 00000000000..a2e0fb099e2 --- /dev/null +++ b/queue-5.10/usb-gadget-f_fs-fix-unbalanced-spinlock-in-__ffs_ep0.patch @@ -0,0 +1,45 @@ +From 011c7f14a336abfabb40828d0eae02a48c86baea Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 24 Jan 2023 14:41:49 +0530 +Subject: usb: gadget: f_fs: Fix unbalanced spinlock in __ffs_ep0_queue_wait + +From: Udipto Goswami + +[ Upstream commit 921deb9da15851425ccbb6ee409dc2fd8fbdfe6b ] + +__ffs_ep0_queue_wait executes holding the spinlock of &ffs->ev.waitq.lock +and unlocks it after the assignments to usb_request are done. +However in the code if the request is already NULL we bail out returning +-EINVAL but never unlocked the spinlock. + +Fix this by adding spin_unlock_irq &ffs->ev.waitq.lock before returning. + +Fixes: 6a19da111057 ("usb: gadget: f_fs: Prevent race during ffs_ep0_queue_wait") +Reviewed-by: John Keeping +Signed-off-by: Udipto Goswami +Link: https://lore.kernel.org/r/20230124091149.18647-1-quic_ugoswami@quicinc.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/usb/gadget/function/f_fs.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c +index 94000fd190e5..8c48c9f801be 100644 +--- a/drivers/usb/gadget/function/f_fs.c ++++ b/drivers/usb/gadget/function/f_fs.c +@@ -278,8 +278,10 @@ static int __ffs_ep0_queue_wait(struct ffs_data *ffs, char *data, size_t len) + struct usb_request *req = ffs->ep0req; + int ret; + +- if (!req) ++ if (!req) { ++ spin_unlock_irq(&ffs->ev.waitq.lock); + return -EINVAL; ++ } + + req->zero = len < le16_to_cpu(ffs->ev.setup.wLength); + +-- +2.39.0 + diff --git a/queue-5.10/vc_screen-move-load-of-struct-vc_data-pointer-in-vcs.patch b/queue-5.10/vc_screen-move-load-of-struct-vc_data-pointer-in-vcs.patch new file mode 100644 index 00000000000..c0f17384e83 --- /dev/null +++ b/queue-5.10/vc_screen-move-load-of-struct-vc_data-pointer-in-vcs.patch @@ -0,0 +1,122 @@ +From 263a090d7efd538319a927c43e0ec0befabbb98f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 24 Jan 2023 11:16:54 -0500 +Subject: vc_screen: move load of struct vc_data pointer in vcs_read() to avoid + UAF + +From: George Kennedy + +[ Upstream commit 226fae124b2dac217ea5436060d623ff3385bc34 ] + +After a call to console_unlock() in vcs_read() the vc_data struct can be +freed by vc_deallocate(). Because of that, the struct vc_data pointer +load must be done at the top of while loop in vcs_read() to avoid a UAF +when vcs_size() is called. + +Syzkaller reported a UAF in vcs_size(). + +BUG: KASAN: use-after-free in vcs_size (drivers/tty/vt/vc_screen.c:215) +Read of size 4 at addr ffff8881137479a8 by task 4a005ed81e27e65/1537 + +CPU: 0 PID: 1537 Comm: 4a005ed81e27e65 Not tainted 6.2.0-rc5 #1 +Hardware name: Red Hat KVM, BIOS 1.15.0-2.module +Call Trace: + +__asan_report_load4_noabort (mm/kasan/report_generic.c:350) +vcs_size (drivers/tty/vt/vc_screen.c:215) +vcs_read (drivers/tty/vt/vc_screen.c:415) +vfs_read (fs/read_write.c:468 fs/read_write.c:450) +... + + +Allocated by task 1191: +... +kmalloc_trace (mm/slab_common.c:1069) +vc_allocate (./include/linux/slab.h:580 ./include/linux/slab.h:720 + drivers/tty/vt/vt.c:1128 drivers/tty/vt/vt.c:1108) +con_install (drivers/tty/vt/vt.c:3383) +tty_init_dev (drivers/tty/tty_io.c:1301 drivers/tty/tty_io.c:1413 + drivers/tty/tty_io.c:1390) +tty_open (drivers/tty/tty_io.c:2080 drivers/tty/tty_io.c:2126) +chrdev_open (fs/char_dev.c:415) +do_dentry_open (fs/open.c:883) +vfs_open (fs/open.c:1014) +... + +Freed by task 1548: +... +kfree (mm/slab_common.c:1021) +vc_port_destruct (drivers/tty/vt/vt.c:1094) +tty_port_destructor (drivers/tty/tty_port.c:296) +tty_port_put (drivers/tty/tty_port.c:312) +vt_disallocate_all (drivers/tty/vt/vt_ioctl.c:662 (discriminator 2)) +vt_ioctl (drivers/tty/vt/vt_ioctl.c:903) +tty_ioctl (drivers/tty/tty_io.c:2776) +... + +The buggy address belongs to the object at ffff888113747800 + which belongs to the cache kmalloc-1k of size 1024 +The buggy address is located 424 bytes inside of + 1024-byte region [ffff888113747800, ffff888113747c00) + +The buggy address belongs to the physical page: +page:00000000b3fe6c7c refcount:1 mapcount:0 mapping:0000000000000000 + index:0x0 pfn:0x113740 +head:00000000b3fe6c7c order:3 compound_mapcount:0 subpages_mapcount:0 + compound_pincount:0 +anon flags: 0x17ffffc0010200(slab|head|node=0|zone=2|lastcpupid=0x1fffff) +raw: 0017ffffc0010200 ffff888100042dc0 0000000000000000 dead000000000001 +raw: 0000000000000000 0000000000100010 00000001ffffffff 0000000000000000 +page dumped because: kasan: bad access detected + +Memory state around the buggy address: + ffff888113747880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb + ffff888113747900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb +> ffff888113747980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb + ^ + ffff888113747a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb + ffff888113747a80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb +================================================================== +Disabling lock debugging due to kernel taint + +Fixes: ac751efa6a0d ("console: rename acquire/release_console_sem() to console_lock/unlock()") +Reported-by: syzkaller +Suggested-by: Jiri Slaby +Signed-off-by: George Kennedy +Link: https://lore.kernel.org/r/1674577014-12374-1-git-send-email-george.kennedy@oracle.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/tty/vt/vc_screen.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c +index 1850bacdb5b0..f566eb1839dc 100644 +--- a/drivers/tty/vt/vc_screen.c ++++ b/drivers/tty/vt/vc_screen.c +@@ -386,10 +386,6 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) + + uni_mode = use_unicode(inode); + attr = use_attributes(inode); +- ret = -ENXIO; +- vc = vcs_vc(inode, &viewed); +- if (!vc) +- goto unlock_out; + + ret = -EINVAL; + if (pos < 0) +@@ -407,6 +403,11 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) + unsigned int this_round, skip = 0; + int size; + ++ ret = -ENXIO; ++ vc = vcs_vc(inode, &viewed); ++ if (!vc) ++ goto unlock_out; ++ + /* Check whether we are above size each round, + * as copy_to_user at the end of this loop + * could sleep. +-- +2.39.0 +