mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 07:04:24 +00:00
Input: goodix - platform/x86: touchscreen_dmi - Move upside down quirks to touchscreen_dmi.c
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
This commit is contained in:
parent
6efb943b86
commit
5a6f0dbe62
2 changed files with 56 additions and 52 deletions
|
@ -178,51 +178,6 @@ static const unsigned long goodix_irq_flags[] = {
|
||||||
IRQ_TYPE_LEVEL_HIGH,
|
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[] = {
|
static const struct dmi_system_id nine_bytes_report[] = {
|
||||||
#if defined(CONFIG_DMI) && defined(CONFIG_X86)
|
#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);
|
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)) {
|
if (dmi_check_system(nine_bytes_report)) {
|
||||||
ts->contact_size = 9;
|
ts->contact_size = 9;
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,23 @@ static const struct ts_dmi_data estar_beauty_hd_data = {
|
||||||
.properties = estar_beauty_hd_props,
|
.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[] = {
|
static const struct property_entry gp_electronic_t701_props[] = {
|
||||||
PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
|
PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
|
||||||
PROPERTY_ENTRY_U32("touchscreen-size-y", 640),
|
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"),
|
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 */
|
/* Teclast X98 Plus II */
|
||||||
.driver_data = (void *)&teclast_x98plus2_data,
|
.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"),
|
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 */
|
/* Trekstor Primebook C11 */
|
||||||
.driver_data = (void *)&trekstor_primebook_c11_data,
|
.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"),
|
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 */
|
/* Yours Y8W81, same case and touchscreen as Chuwi Vi8 */
|
||||||
.driver_data = (void *)&chuwi_vi8_data,
|
.driver_data = (void *)&chuwi_vi8_data,
|
||||||
|
|
Loading…
Reference in a new issue