Input: goodix - platform/x86: touchscreen_dmi - Move upside down quirks to touchscree...
authorHans de Goede <hdegoede@redhat.com>
Tue, 4 May 2021 18:57:42 +0000 (20:57 +0200)
committerHans de Goede <hdegoede@redhat.com>
Thu, 20 May 2021 13:17:07 +0000 (15:17 +0200)
Move the DMI quirks for upside-down mounted Goodix touchscreens from
drivers/input/touchscreen/goodix.c to
drivers/platform/x86/touchscreen_dmi.c,
where all the other x86 touchscreen quirks live.

Note the touchscreen_dmi.c code attaches standard touchscreen
device-properties to an i2c-client device based on a combination of a
DMI match + a device-name match. I've verified that the: Teclast X98 Pro,
WinBook TW100 and WinBook TW700 uses an ACPI devicename of "GDIX1001:00"
based on acpidumps and/or dmesg output available on the web.

This patch was tested on a Teclast X89 tablet.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20210504185746.175461-2-hdegoede@redhat.com
drivers/input/touchscreen/goodix.c
drivers/platform/x86/touchscreen_dmi.c

index c682b028f0a29d2edb623030c790ebea4540e574..4f53d3c57e6980c03b233707a2fce8e5d5f695a2 100644 (file)
@@ -178,51 +178,6 @@ static const unsigned long goodix_irq_flags[] = {
        IRQ_TYPE_LEVEL_HIGH,
 };
 
-/*
- * Those tablets have their coordinates origin at the bottom right
- * of the tablet, as if rotated 180 degrees
- */
-static const struct dmi_system_id rotated_screen[] = {
-#if defined(CONFIG_DMI) && defined(CONFIG_X86)
-       {
-               .ident = "Teclast X89",
-               .matches = {
-                       /* tPAD is too generic, also match on bios date */
-                       DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
-                       DMI_MATCH(DMI_BOARD_NAME, "tPAD"),
-                       DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"),
-               },
-       },
-       {
-               .ident = "Teclast X98 Pro",
-               .matches = {
-                       /*
-                        * Only match BIOS date, because the manufacturers
-                        * BIOS does not report the board name at all
-                        * (sometimes)...
-                        */
-                       DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
-                       DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"),
-               },
-       },
-       {
-               .ident = "WinBook TW100",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "WinBook"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "TW100")
-               }
-       },
-       {
-               .ident = "WinBook TW700",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "WinBook"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "TW700")
-               },
-       },
-#endif
-       {}
-};
-
 static const struct dmi_system_id nine_bytes_report[] = {
 #if defined(CONFIG_DMI) && defined(CONFIG_X86)
        {
@@ -1123,13 +1078,6 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
                                  ABS_MT_POSITION_Y, ts->prop.max_y);
        }
 
-       if (dmi_check_system(rotated_screen)) {
-               ts->prop.invert_x = true;
-               ts->prop.invert_y = true;
-               dev_dbg(&ts->client->dev,
-                       "Applying '180 degrees rotated screen' quirk\n");
-       }
-
        if (dmi_check_system(nine_bytes_report)) {
                ts->contact_size = 9;
 
index 90fe4f8f3c2c796b8257bf3733d6b65c84d4c955..a53e176d94b96ecc3cfcdd6043a9dcfc3a0b59d5 100644 (file)
@@ -273,6 +273,23 @@ static const struct ts_dmi_data estar_beauty_hd_data = {
        .properties     = estar_beauty_hd_props,
 };
 
+/* Generic props + data for upside-down mounted GDIX1001 touchscreens */
+static const struct property_entry gdix1001_upside_down_props[] = {
+       PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
+       PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
+       { }
+};
+
+static const struct ts_dmi_data gdix1001_00_upside_down_data = {
+       .acpi_name      = "GDIX1001:00",
+       .properties     = gdix1001_upside_down_props,
+};
+
+static const struct ts_dmi_data gdix1001_01_upside_down_data = {
+       .acpi_name      = "GDIX1001:01",
+       .properties     = gdix1001_upside_down_props,
+};
+
 static const struct property_entry gp_electronic_t701_props[] = {
        PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
        PROPERTY_ENTRY_U32("touchscreen-size-y", 640),
@@ -1287,6 +1304,16 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
                        DMI_MATCH(DMI_BOARD_NAME, "X3 Plus"),
                },
        },
+       {
+               /* Teclast X89 (Windows version / BIOS) */
+               .driver_data = (void *)&gdix1001_01_upside_down_data,
+               .matches = {
+                       /* tPAD is too generic, also match on bios date */
+                       DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
+                       DMI_MATCH(DMI_BOARD_NAME, "tPAD"),
+                       DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"),
+               },
+       },
        {
                /* Teclast X98 Plus II */
                .driver_data = (void *)&teclast_x98plus2_data,
@@ -1295,6 +1322,19 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "X98 Plus II"),
                },
        },
+       {
+               /* Teclast X98 Pro */
+               .driver_data = (void *)&gdix1001_00_upside_down_data,
+               .matches = {
+                       /*
+                        * Only match BIOS date, because the manufacturers
+                        * BIOS does not report the board name at all
+                        * (sometimes)...
+                        */
+                       DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
+                       DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"),
+               },
+       },
        {
                /* Trekstor Primebook C11 */
                .driver_data = (void *)&trekstor_primebook_c11_data,
@@ -1370,6 +1410,22 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "VINGA Twizzle J116"),
                },
        },
+       {
+               /* "WinBook TW100" */
+               .driver_data = (void *)&gdix1001_00_upside_down_data,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "WinBook"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "TW100")
+               }
+       },
+       {
+               /* WinBook TW700 */
+               .driver_data = (void *)&gdix1001_00_upside_down_data,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "WinBook"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "TW700")
+               },
+       },
        {
                /* Yours Y8W81, same case and touchscreen as Chuwi Vi8 */
                .driver_data = (void *)&chuwi_vi8_data,