Commit 87895a64 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v6.10-2' of...

Merge tag 'platform-drivers-x86-v6.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86

Pull x86 platform driver fixes from Hans de Goede:

 - a use-after-free bugfix

 - Kconfig fixes for randconfig builds

 - allow setting touchscreen_dmi quirks from the cmdline for debugging

 - touchscreen_dmi quirks for two new laptop/tablet models

* tag 'platform-drivers-x86-v6.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86: touchscreen_dmi: Add info for the EZpad 6s Pro
  platform/x86: touchscreen_dmi: Add info for GlobalSpace SolT IVW 11.6" tablet
  platform/x86: touchscreen_dmi: Add support for setting touchscreen properties from cmdline
  platform/x86: thinkpad_acpi: Select INPUT_SPARSEKMAP in Kconfig
  platform/x86: x86-android-tablets: Add "select LEDS_CLASS"
  platform/x86: ISST: fix use-after-free in tpmi_sst_dev_remove()
parents c6cc9799 30500526
...@@ -1921,6 +1921,28 @@ ...@@ -1921,6 +1921,28 @@
Format: Format:
<bus_id>,<clkrate> <bus_id>,<clkrate>
i2c_touchscreen_props= [HW,ACPI,X86]
Set device-properties for ACPI-enumerated I2C-attached
touchscreen, to e.g. fix coordinates of upside-down
mounted touchscreens. If you need this option please
submit a drivers/platform/x86/touchscreen_dmi.c patch
adding a DMI quirk for this.
Format:
<ACPI_HW_ID>:<prop_name>=<val>[:prop_name=val][:...]
Where <val> is one of:
Omit "=<val>" entirely Set a boolean device-property
Unsigned number Set a u32 device-property
Anything else Set a string device-property
Examples (split over multiple lines):
i2c_touchscreen_props=GDIX1001:touchscreen-inverted-x:
touchscreen-inverted-y
i2c_touchscreen_props=MSSL1680:touchscreen-size-x=1920:
touchscreen-size-y=1080:touchscreen-inverted-y:
firmware-name=gsl1680-vendor-model.fw:silead,home-button
i8042.debug [HW] Toggle i8042 debug mode i8042.debug [HW] Toggle i8042 debug mode
i8042.unmask_kbd_data i8042.unmask_kbd_data
[HW] Enable printing of interrupt data from the KBD port [HW] Enable printing of interrupt data from the KBD port
......
...@@ -515,6 +515,7 @@ config THINKPAD_ACPI ...@@ -515,6 +515,7 @@ config THINKPAD_ACPI
select NVRAM select NVRAM
select NEW_LEDS select NEW_LEDS
select LEDS_CLASS select LEDS_CLASS
select INPUT_SPARSEKMAP
help help
This is a driver for the IBM and Lenovo ThinkPad laptops. It adds This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
support for Fn-Fx key combinations, Bluetooth control, video support for Fn-Fx key combinations, Bluetooth control, video
......
...@@ -1610,8 +1610,8 @@ void tpmi_sst_dev_remove(struct auxiliary_device *auxdev) ...@@ -1610,8 +1610,8 @@ void tpmi_sst_dev_remove(struct auxiliary_device *auxdev)
tpmi_sst->partition_mask_current &= ~BIT(plat_info->partition); tpmi_sst->partition_mask_current &= ~BIT(plat_info->partition);
/* Free the package instance when the all partitions are removed */ /* Free the package instance when the all partitions are removed */
if (!tpmi_sst->partition_mask_current) { if (!tpmi_sst->partition_mask_current) {
kfree(tpmi_sst);
isst_common.sst_inst[tpmi_sst->package_id] = NULL; isst_common.sst_inst[tpmi_sst->package_id] = NULL;
kfree(tpmi_sst);
} }
mutex_unlock(&isst_tpmi_dev_lock); mutex_unlock(&isst_tpmi_dev_lock);
} }
......
...@@ -9,10 +9,13 @@ ...@@ -9,10 +9,13 @@
*/ */
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/ctype.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/dmi.h> #include <linux/dmi.h>
#include <linux/efi_embedded_fw.h> #include <linux/efi_embedded_fw.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/init.h>
#include <linux/kstrtox.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/property.h> #include <linux/property.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -897,6 +900,22 @@ static const struct ts_dmi_data schneider_sct101ctm_data = { ...@@ -897,6 +900,22 @@ static const struct ts_dmi_data schneider_sct101ctm_data = {
.properties = schneider_sct101ctm_props, .properties = schneider_sct101ctm_props,
}; };
static const struct property_entry globalspace_solt_ivw116_props[] = {
PROPERTY_ENTRY_U32("touchscreen-min-x", 7),
PROPERTY_ENTRY_U32("touchscreen-min-y", 22),
PROPERTY_ENTRY_U32("touchscreen-size-x", 1723),
PROPERTY_ENTRY_U32("touchscreen-size-y", 1077),
PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-globalspace-solt-ivw116.fw"),
PROPERTY_ENTRY_U32("silead,max-fingers", 10),
PROPERTY_ENTRY_BOOL("silead,home-button"),
{ }
};
static const struct ts_dmi_data globalspace_solt_ivw116_data = {
.acpi_name = "MSSL1680:00",
.properties = globalspace_solt_ivw116_props,
};
static const struct property_entry techbite_arc_11_6_props[] = { static const struct property_entry techbite_arc_11_6_props[] = {
PROPERTY_ENTRY_U32("touchscreen-min-x", 5), PROPERTY_ENTRY_U32("touchscreen-min-x", 5),
PROPERTY_ENTRY_U32("touchscreen-min-y", 7), PROPERTY_ENTRY_U32("touchscreen-min-y", 7),
...@@ -1385,6 +1404,17 @@ const struct dmi_system_id touchscreen_dmi_table[] = { ...@@ -1385,6 +1404,17 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"), DMI_MATCH(DMI_BIOS_DATE, "04/24/2018"),
}, },
}, },
{
/* Jumper EZpad 6s Pro */
.driver_data = (void *)&jumper_ezpad_6_pro_b_data,
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Jumper"),
DMI_MATCH(DMI_PRODUCT_NAME, "Ezpad"),
/* Above matches are too generic, add bios match */
DMI_MATCH(DMI_BIOS_VERSION, "E.WSA116_8.E1.042.bin"),
DMI_MATCH(DMI_BIOS_DATE, "01/08/2020"),
},
},
{ {
/* Jumper EZpad 6 m4 */ /* Jumper EZpad 6 m4 */
.driver_data = (void *)&jumper_ezpad_6_m4_data, .driver_data = (void *)&jumper_ezpad_6_m4_data,
...@@ -1624,6 +1654,15 @@ const struct dmi_system_id touchscreen_dmi_table[] = { ...@@ -1624,6 +1654,15 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "SCT101CTM"), DMI_MATCH(DMI_PRODUCT_NAME, "SCT101CTM"),
}, },
}, },
{
/* GlobalSpace SoLT IVW 11.6" */
.driver_data = (void *)&globalspace_solt_ivw116_data,
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Globalspace Tech Pvt Ltd"),
DMI_MATCH(DMI_PRODUCT_NAME, "SolTIVW"),
DMI_MATCH(DMI_PRODUCT_SKU, "PN20170413488"),
},
},
{ {
/* Techbite Arc 11.6 */ /* Techbite Arc 11.6 */
.driver_data = (void *)&techbite_arc_11_6_data, .driver_data = (void *)&techbite_arc_11_6_data,
...@@ -1817,7 +1856,7 @@ const struct dmi_system_id touchscreen_dmi_table[] = { ...@@ -1817,7 +1856,7 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
{ } { }
}; };
static const struct ts_dmi_data *ts_data; static struct ts_dmi_data *ts_data;
static void ts_dmi_add_props(struct i2c_client *client) static void ts_dmi_add_props(struct i2c_client *client)
{ {
...@@ -1852,6 +1891,64 @@ static int ts_dmi_notifier_call(struct notifier_block *nb, ...@@ -1852,6 +1891,64 @@ static int ts_dmi_notifier_call(struct notifier_block *nb,
return 0; return 0;
} }
#define MAX_CMDLINE_PROPS 16
static struct property_entry ts_cmdline_props[MAX_CMDLINE_PROPS + 1];
static struct ts_dmi_data ts_cmdline_data = {
.properties = ts_cmdline_props,
};
static int __init ts_parse_props(char *str)
{
/* Save the original str to show it on syntax errors */
char orig_str[256];
char *name, *value;
u32 u32val;
int i, ret;
strscpy(orig_str, str, sizeof(orig_str));
/*
* str is part of the static_command_line from init/main.c and poking
* holes in that by writing 0 to it is allowed, as is taking long
* lasting references to it.
*/
ts_cmdline_data.acpi_name = strsep(&str, ":");
for (i = 0; i < MAX_CMDLINE_PROPS; i++) {
name = strsep(&str, ":");
if (!name || !name[0])
break;
/* Replace '=' with 0 and make value point past '=' or NULL */
value = name;
strsep(&value, "=");
if (!value) {
ts_cmdline_props[i] = PROPERTY_ENTRY_BOOL(name);
} else if (isdigit(value[0])) {
ret = kstrtou32(value, 0, &u32val);
if (ret)
goto syntax_error;
ts_cmdline_props[i] = PROPERTY_ENTRY_U32(name, u32val);
} else {
ts_cmdline_props[i] = PROPERTY_ENTRY_STRING(name, value);
}
}
if (!i || str)
goto syntax_error;
ts_data = &ts_cmdline_data;
return 1;
syntax_error:
pr_err("Invalid '%s' value for 'i2c_touchscreen_props='\n", orig_str);
return 1; /* "i2c_touchscreen_props=" is still a known parameter */
}
__setup("i2c_touchscreen_props=", ts_parse_props);
static struct notifier_block ts_dmi_notifier = { static struct notifier_block ts_dmi_notifier = {
.notifier_call = ts_dmi_notifier_call, .notifier_call = ts_dmi_notifier_call,
}; };
...@@ -1859,13 +1956,25 @@ static struct notifier_block ts_dmi_notifier = { ...@@ -1859,13 +1956,25 @@ static struct notifier_block ts_dmi_notifier = {
static int __init ts_dmi_init(void) static int __init ts_dmi_init(void)
{ {
const struct dmi_system_id *dmi_id; const struct dmi_system_id *dmi_id;
struct ts_dmi_data *ts_data_dmi;
int error; int error;
dmi_id = dmi_first_match(touchscreen_dmi_table); dmi_id = dmi_first_match(touchscreen_dmi_table);
if (!dmi_id) ts_data_dmi = dmi_id ? dmi_id->driver_data : NULL;
if (ts_data) {
/*
* Kernel cmdline provided data takes precedence, copy over
* DMI efi_embedded_fw info if available.
*/
if (ts_data_dmi)
ts_data->embedded_fw = ts_data_dmi->embedded_fw;
} else if (ts_data_dmi) {
ts_data = ts_data_dmi;
} else {
return 0; /* Not an error */ return 0; /* Not an error */
}
ts_data = dmi_id->driver_data;
/* Some dmi table entries only provide an efi_embedded_fw_desc */ /* Some dmi table entries only provide an efi_embedded_fw_desc */
if (!ts_data->properties) if (!ts_data->properties)
return 0; return 0;
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
config X86_ANDROID_TABLETS config X86_ANDROID_TABLETS
tristate "X86 Android tablet support" tristate "X86 Android tablet support"
depends on I2C && SPI && SERIAL_DEV_BUS && ACPI && EFI && GPIOLIB && PMIC_OPREGION depends on I2C && SPI && SERIAL_DEV_BUS && ACPI && EFI && GPIOLIB && PMIC_OPREGION
select NEW_LEDS
select LEDS_CLASS
help help
X86 tablets which ship with Android as (part of) the factory image X86 tablets which ship with Android as (part of) the factory image
typically have various problems with their DSDTs. The factory kernels typically have various problems with their DSDTs. The factory kernels
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment