Commit 79cd8920 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'platform-drivers-x86-v6.15-6' of...

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

Pull x86 platform drivers fixes from Ilpo Järvinen:

 - dell-wmi-sysman: Avoid buffer overflow in current_password_store()

 - fujitsu-laptop: Support Lifebook S2110 hotkeys

 - intel/pmc: Fix Arrow Lake U/H NPU PCI ID

 - think-lmi: Fix attribute name usage for non-compliant items

 - thinkpad_acpi: Ignore battery threshold change event notification

* tag 'platform-drivers-x86-v6.15-6' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86/intel/pmc: Fix Arrow Lake U/H NPU PCI ID
  platform/x86: think-lmi: Fix attribute name usage for non-compliant items
  platform/x86: thinkpad_acpi: Ignore battery threshold change event notification
  platform/x86: dell-wmi-sysman: Avoid buffer overflow in current_password_store()
  platform/x86: fujitsu-laptop: Support Lifebook S2110 hotkeys
parents eccf6f2f f2eae58c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ static ssize_t current_password_store(struct kobject *kobj,
	int length;

	length = strlen(buf);
	if (buf[length-1] == '\n')
	if (length && buf[length - 1] == '\n')
		length--;

	/* firmware does verifiation of min/max password length,
+29 −4
Original line number Diff line number Diff line
@@ -17,13 +17,13 @@
/*
 * fujitsu-laptop.c - Fujitsu laptop support, providing access to additional
 * features made available on a range of Fujitsu laptops including the
 * P2xxx/P5xxx/S6xxx/S7xxx series.
 * P2xxx/P5xxx/S2xxx/S6xxx/S7xxx series.
 *
 * This driver implements a vendor-specific backlight control interface for
 * Fujitsu laptops and provides support for hotkeys present on certain Fujitsu
 * laptops.
 *
 * This driver has been tested on a Fujitsu Lifebook S6410, S7020 and
 * This driver has been tested on a Fujitsu Lifebook S2110, S6410, S7020 and
 * P8010.  It should work on most P-series and S-series Lifebooks, but
 * YMMV.
 *
@@ -107,7 +107,11 @@
#define KEY2_CODE			0x411
#define KEY3_CODE			0x412
#define KEY4_CODE			0x413
#define KEY5_CODE			0x420
#define KEY5_CODE			0x414
#define KEY6_CODE			0x415
#define KEY7_CODE			0x416
#define KEY8_CODE			0x417
#define KEY9_CODE			0x420

/* Hotkey ringbuffer limits */
#define MAX_HOTKEY_RINGBUFFER_SIZE	100
@@ -560,7 +564,7 @@ static const struct key_entry keymap_default[] = {
	{ KE_KEY, KEY2_CODE,            { KEY_PROG2 } },
	{ KE_KEY, KEY3_CODE,            { KEY_PROG3 } },
	{ KE_KEY, KEY4_CODE,            { KEY_PROG4 } },
	{ KE_KEY, KEY5_CODE,            { KEY_RFKILL } },
	{ KE_KEY, KEY9_CODE,            { KEY_RFKILL } },
	/* Soft keys read from status flags */
	{ KE_KEY, FLAG_RFKILL,          { KEY_RFKILL } },
	{ KE_KEY, FLAG_TOUCHPAD_TOGGLE, { KEY_TOUCHPAD_TOGGLE } },
@@ -584,6 +588,18 @@ static const struct key_entry keymap_p8010[] = {
	{ KE_END, 0 }
};

static const struct key_entry keymap_s2110[] = {
	{ KE_KEY, KEY1_CODE, { KEY_PROG1 } }, /* "A" */
	{ KE_KEY, KEY2_CODE, { KEY_PROG2 } }, /* "B" */
	{ KE_KEY, KEY3_CODE, { KEY_WWW } },   /* "Internet" */
	{ KE_KEY, KEY4_CODE, { KEY_EMAIL } }, /* "E-mail" */
	{ KE_KEY, KEY5_CODE, { KEY_STOPCD } },
	{ KE_KEY, KEY6_CODE, { KEY_PLAYPAUSE } },
	{ KE_KEY, KEY7_CODE, { KEY_PREVIOUSSONG } },
	{ KE_KEY, KEY8_CODE, { KEY_NEXTSONG } },
	{ KE_END, 0 }
};

static const struct key_entry *keymap = keymap_default;

static int fujitsu_laptop_dmi_keymap_override(const struct dmi_system_id *id)
@@ -621,6 +637,15 @@ static const struct dmi_system_id fujitsu_laptop_dmi_table[] = {
		},
		.driver_data = (void *)keymap_p8010
	},
	{
		.callback = fujitsu_laptop_dmi_keymap_override,
		.ident = "Fujitsu LifeBook S2110",
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
			DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK S2110"),
		},
		.driver_data = (void *)keymap_s2110
	},
	{}
};

+2 −1
Original line number Diff line number Diff line
@@ -681,6 +681,7 @@ static struct pmc_info arl_pmc_info_list[] = {

#define ARL_NPU_PCI_DEV			0xad1d
#define ARL_GNA_PCI_DEV			0xae4c
#define ARL_H_NPU_PCI_DEV		0x7d1d
#define ARL_H_GNA_PCI_DEV		0x774c
/*
 * Set power state of select devices that do not have drivers to D3
@@ -694,7 +695,7 @@ static void arl_d3_fixup(void)

static void arl_h_d3_fixup(void)
{
	pmc_core_set_device_d3(ARL_NPU_PCI_DEV);
	pmc_core_set_device_d3(ARL_H_NPU_PCI_DEV);
	pmc_core_set_device_d3(ARL_H_GNA_PCI_DEV);
}

+14 −12
Original line number Diff line number Diff line
@@ -1061,7 +1061,7 @@ static ssize_t current_value_store(struct kobject *kobj,
			ret = -EINVAL;
			goto out;
		}
		set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->display_name,
		set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name,
				    new_setting, tlmi_priv.pwd_admin->signature);
		if (!set_str) {
			ret = -ENOMEM;
@@ -1092,7 +1092,7 @@ static ssize_t current_value_store(struct kobject *kobj,
				goto out;
		}

		set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
		set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name,
				    new_setting);
		if (!set_str) {
			ret = -ENOMEM;
@@ -1120,10 +1120,10 @@ static ssize_t current_value_store(struct kobject *kobj,
		}

		if (auth_str)
			set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->display_name,
			set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name,
					    new_setting, auth_str);
		else
			set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
			set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name,
					    new_setting);
		if (!set_str) {
			ret = -ENOMEM;
@@ -1629,9 +1629,6 @@ static int tlmi_analyze(struct wmi_device *wdev)
			continue;
		}

		/* It is not allowed to have '/' for file name. Convert it into '\'. */
		strreplace(item, '/', '\\');

		/* Remove the value part */
		strreplace(item, ',', '\0');

@@ -1644,10 +1641,15 @@ static int tlmi_analyze(struct wmi_device *wdev)
		}
		setting->wdev = wdev;
		setting->index = i;

		strscpy(setting->name, item);
		/* It is not allowed to have '/' for file name. Convert it into '\'. */
		strreplace(item, '/', '\\');
		strscpy(setting->display_name, item);

		/* If BIOS selections supported, load those */
		if (tlmi_priv.can_get_bios_selections) {
			ret = tlmi_get_bios_selections(setting->display_name,
			ret = tlmi_get_bios_selections(setting->name,
						       &setting->possible_values);
			if (ret || !setting->possible_values)
				pr_info("Error retrieving possible values for %d : %s\n",
+1 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ struct tlmi_attr_setting {
	struct kobject kobj;
	struct wmi_device *wdev;
	int index;
	char name[TLMI_SETTINGS_MAXLEN];
	char display_name[TLMI_SETTINGS_MAXLEN];
	char *possible_values;
};
Loading