mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
platform-drivers-x86 for v6.10-2
Highlights: - A use-after-free bugfix - 2 Kconfig fixes for randconfig builds - Allow setting touchscreen_dmi quirks from the cmdline for debugging - touchscreen_dmi quirks for 2 new laptop/tablet models The following is an automated git shortlog grouped by driver: ISST: - fix use-after-free in tpmi_sst_dev_remove() thinkpad_acpi: - Select INPUT_SPARSEKMAP in Kconfig touchscreen_dmi: - Add info for the EZpad 6s Pro - Add info for GlobalSpace SolT IVW 11.6" tablet - Add support for setting touchscreen properties from cmdline x86-android-tablets: - Add "select LEDS_CLASS" -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEEuvA7XScYQRpenhd+kuxHeUQDJ9wFAmZYxTIUHGhkZWdvZWRl QHJlZGhhdC5jb20ACgkQkuxHeUQDJ9x+sQf/WpB06lMgOnGtRa+3YdG9jC/U/MVG QXWZH30TexlfNeuJfpgD6lBTRayX92Tpko9S6dxdNVaeyHZ5jfqN9t5JpRuWzoek 8YI5Jj/62J6GEGG6wuSsW12blCoCM6rDb7tQly1kLNpZU01xaPFIShFn9cL15XpO YZh+QuuqIiO+8FSmKZqfHW9RMf3S4pxc/epTZU8lKei0s1PXdQXRs3vad0HGsIsL hFLyc/JjdDQ/9O7jhvl9r7zurg0xmlPc2khRkdG7gnrG1YC2AYK2asPonx8UjrRr ATS2mJghuPyPIqE9wytX5vxZS9C5OZcw2ZW9L6vKTrL4qQKkDHJkhKUgIg== =nCoi -----END PGP SIGNATURE----- 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()
This commit is contained in:
commit
87895a6402
@ -1921,6 +1921,28 @@
|
||||
Format:
|
||||
<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.unmask_kbd_data
|
||||
[HW] Enable printing of interrupt data from the KBD port
|
||||
|
@ -515,6 +515,7 @@ config THINKPAD_ACPI
|
||||
select NVRAM
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
select INPUT_SPARSEKMAP
|
||||
help
|
||||
This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
|
||||
support for Fn-Fx key combinations, Bluetooth control, video
|
||||
|
@ -1610,8 +1610,8 @@ void tpmi_sst_dev_remove(struct auxiliary_device *auxdev)
|
||||
tpmi_sst->partition_mask_current &= ~BIT(plat_info->partition);
|
||||
/* Free the package instance when the all partitions are removed */
|
||||
if (!tpmi_sst->partition_mask_current) {
|
||||
kfree(tpmi_sst);
|
||||
isst_common.sst_inst[tpmi_sst->package_id] = NULL;
|
||||
kfree(tpmi_sst);
|
||||
}
|
||||
mutex_unlock(&isst_tpmi_dev_lock);
|
||||
}
|
||||
|
@ -9,10 +9,13 @@
|
||||
*/
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/efi_embedded_fw.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kstrtox.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/string.h>
|
||||
@ -897,6 +900,22 @@ static const struct ts_dmi_data schneider_sct101ctm_data = {
|
||||
.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[] = {
|
||||
PROPERTY_ENTRY_U32("touchscreen-min-x", 5),
|
||||
PROPERTY_ENTRY_U32("touchscreen-min-y", 7),
|
||||
@ -1385,6 +1404,17 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
|
||||
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 */
|
||||
.driver_data = (void *)&jumper_ezpad_6_m4_data,
|
||||
@ -1624,6 +1654,15 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
|
||||
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 */
|
||||
.driver_data = (void *)&techbite_arc_11_6_data,
|
||||
@ -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)
|
||||
{
|
||||
@ -1852,6 +1891,64 @@ static int ts_dmi_notifier_call(struct notifier_block *nb,
|
||||
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 = {
|
||||
.notifier_call = ts_dmi_notifier_call,
|
||||
};
|
||||
@ -1859,13 +1956,25 @@ static struct notifier_block ts_dmi_notifier = {
|
||||
static int __init ts_dmi_init(void)
|
||||
{
|
||||
const struct dmi_system_id *dmi_id;
|
||||
struct ts_dmi_data *ts_data_dmi;
|
||||
int error;
|
||||
|
||||
dmi_id = dmi_first_match(touchscreen_dmi_table);
|
||||
if (!dmi_id)
|
||||
return 0; /* Not an error */
|
||||
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 */
|
||||
}
|
||||
|
||||
ts_data = dmi_id->driver_data;
|
||||
/* Some dmi table entries only provide an efi_embedded_fw_desc */
|
||||
if (!ts_data->properties)
|
||||
return 0;
|
||||
|
@ -6,6 +6,8 @@
|
||||
config X86_ANDROID_TABLETS
|
||||
tristate "X86 Android tablet support"
|
||||
depends on I2C && SPI && SERIAL_DEV_BUS && ACPI && EFI && GPIOLIB && PMIC_OPREGION
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
help
|
||||
X86 tablets which ship with Android as (part of) the factory image
|
||||
typically have various problems with their DSDTs. The factory kernels
|
||||
|
Loading…
Reference in New Issue
Block a user