History

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

Linus Torvalds committed 1 year ago

Commit 79cd8922 parents eccf6f2 f2eae586 files · +52 −18Browse files

Unified · Split

6 files
  1. drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c +1 −1
  2. drivers/platform/x86/fujitsu-laptop.c +29 −4
  3. drivers/platform/x86/intel/pmc/arl.c +2 −1
  4. drivers/platform/x86/think-lmi.c +14 −12
  5. drivers/platform/x86/think-lmi.h +1 −0
  6. drivers/platform/x86/thinkpad_acpi.c +5 −0
drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c+1−1
@@ -45,7 +45,7 @@ static ssize_t current_password_store(struct kobject *kobj, · 44 unmodified lines
45 int length;45 int length;
46 46
47 length = strlen(buf);47 length = strlen(buf);
48 if (buf[length-1] == '\n')48 if (length && buf[length - 1] == '\n')
49 length--;49 length--;
50 50
51 /* firmware does verifiation of min/max password length,51 /* firmware does verifiation of min/max password length,
drivers/platform/x86/fujitsu-laptop.c+29−4
@@ -17,13 +17,13 @@ · 16 unmodified lines
17/*17/*
18 * fujitsu-laptop.c - Fujitsu laptop support, providing access to additional18 * fujitsu-laptop.c - Fujitsu laptop support, providing access to additional
19 * features made available on a range of Fujitsu laptops including the19 * features made available on a range of Fujitsu laptops including the
20 * P2xxx/P5xxx/S6xxx/S7xxx series.20 * P2xxx/P5xxx/S2xxx/S6xxx/S7xxx series.
21 *21 *
22 * This driver implements a vendor-specific backlight control interface for22 * This driver implements a vendor-specific backlight control interface for
23 * Fujitsu laptops and provides support for hotkeys present on certain Fujitsu23 * Fujitsu laptops and provides support for hotkeys present on certain Fujitsu
24 * laptops.24 * laptops.
25 *25 *
26 * This driver has been tested on a Fujitsu Lifebook S6410, S7020 and26 * This driver has been tested on a Fujitsu Lifebook S2110, S6410, S7020 and
27 * P8010. It should work on most P-series and S-series Lifebooks, but27 * P8010. It should work on most P-series and S-series Lifebooks, but
28 * YMMV.28 * YMMV.
29 *29 *
@@ -107,7 +107,11 @@ · 77 unmodified lines
107#define KEY2_CODE 0x411107#define KEY2_CODE 0x411
108#define KEY3_CODE 0x412108#define KEY3_CODE 0x412
109#define KEY4_CODE 0x413109#define KEY4_CODE 0x413
110#define KEY5_CODE 0x420110#define KEY5_CODE 0x414
111#define KEY6_CODE 0x415
112#define KEY7_CODE 0x416
113#define KEY8_CODE 0x417
114#define KEY9_CODE 0x420
111 115
112/* Hotkey ringbuffer limits */116/* Hotkey ringbuffer limits */
113#define MAX_HOTKEY_RINGBUFFER_SIZE 100117#define MAX_HOTKEY_RINGBUFFER_SIZE 100
@@ -560,7 +564,7 @@ static const struct key_entry keymap_default[] = { · 446 unmodified lines
560 { KE_KEY, KEY2_CODE, { KEY_PROG2 } },564 { KE_KEY, KEY2_CODE, { KEY_PROG2 } },
561 { KE_KEY, KEY3_CODE, { KEY_PROG3 } },565 { KE_KEY, KEY3_CODE, { KEY_PROG3 } },
562 { KE_KEY, KEY4_CODE, { KEY_PROG4 } },566 { KE_KEY, KEY4_CODE, { KEY_PROG4 } },
563 { KE_KEY, KEY5_CODE, { KEY_RFKILL } },567 { KE_KEY, KEY9_CODE, { KEY_RFKILL } },
564 /* Soft keys read from status flags */568 /* Soft keys read from status flags */
565 { KE_KEY, FLAG_RFKILL, { KEY_RFKILL } },569 { KE_KEY, FLAG_RFKILL, { KEY_RFKILL } },
566 { KE_KEY, FLAG_TOUCHPAD_TOGGLE, { KEY_TOUCHPAD_TOGGLE } },570 { KE_KEY, FLAG_TOUCHPAD_TOGGLE, { KEY_TOUCHPAD_TOGGLE } },
@@ -584,6 +588,18 @@ static const struct key_entry keymap_p8010[] = { · 17 unmodified lines
584 { KE_END, 0 }588 { KE_END, 0 }
585};589};
586 590
591static const struct key_entry keymap_s2110[] = {
592 { KE_KEY, KEY1_CODE, { KEY_PROG1 } }, /* "A" */
593 { KE_KEY, KEY2_CODE, { KEY_PROG2 } }, /* "B" */
594 { KE_KEY, KEY3_CODE, { KEY_WWW } }, /* "Internet" */
595 { KE_KEY, KEY4_CODE, { KEY_EMAIL } }, /* "E-mail" */
596 { KE_KEY, KEY5_CODE, { KEY_STOPCD } },
597 { KE_KEY, KEY6_CODE, { KEY_PLAYPAUSE } },
598 { KE_KEY, KEY7_CODE, { KEY_PREVIOUSSONG } },
599 { KE_KEY, KEY8_CODE, { KEY_NEXTSONG } },
600 { KE_END, 0 }
601};
602
587static const struct key_entry *keymap = keymap_default;603static const struct key_entry *keymap = keymap_default;
588 604
589static int fujitsu_laptop_dmi_keymap_override(const struct dmi_system_id *id)605static 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[] = { · 31 unmodified lines
621 },637 },
622 .driver_data = (void *)keymap_p8010638 .driver_data = (void *)keymap_p8010
623 },639 },
640 {
641 .callback = fujitsu_laptop_dmi_keymap_override,
642 .ident = "Fujitsu LifeBook S2110",
643 .matches = {
644 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
645 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK S2110"),
646 },
647 .driver_data = (void *)keymap_s2110
648 },
624 {}649 {}
625};650};
626 651
drivers/platform/x86/intel/pmc/arl.c+2−1
@@ -681,6 +681,7 @@ static struct pmc_info arl_pmc_info_list[] = { · 680 unmodified lines
681 681
682#define ARL_NPU_PCI_DEV 0xad1d682#define ARL_NPU_PCI_DEV 0xad1d
683#define ARL_GNA_PCI_DEV 0xae4c683#define ARL_GNA_PCI_DEV 0xae4c
684#define ARL_H_NPU_PCI_DEV 0x7d1d
684#define ARL_H_GNA_PCI_DEV 0x774c685#define ARL_H_GNA_PCI_DEV 0x774c
685/*686/*
686 * Set power state of select devices that do not have drivers to D3687 * Set power state of select devices that do not have drivers to D3
@@ -694,7 +695,7 @@ static void arl_d3_fixup(void) · 7 unmodified lines
694 695
695static void arl_h_d3_fixup(void)696static void arl_h_d3_fixup(void)
696{697{
697 pmc_core_set_device_d3(ARL_NPU_PCI_DEV);698 pmc_core_set_device_d3(ARL_H_NPU_PCI_DEV);
698 pmc_core_set_device_d3(ARL_H_GNA_PCI_DEV);699 pmc_core_set_device_d3(ARL_H_GNA_PCI_DEV);
699}700}
700 701
drivers/platform/x86/think-lmi.c+14−12
@@ -1061,8 +1061,8 @@ static ssize_t current_value_store(struct kobject *kobj, · 1060 unmodified lines
1061 ret = -EINVAL;1061 ret = -EINVAL;
1062 goto out;1062 goto out;
1063 }1063 }
1064 set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->display_name,1064 set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name,
1065 new_setting, tlmi_priv.pwd_admin->signature);1065 new_setting, tlmi_priv.pwd_admin->signature);
1066 if (!set_str) {1066 if (!set_str) {
1067 ret = -ENOMEM;1067 ret = -ENOMEM;
1068 goto out;1068 goto out;
@@ -1092,7 +1092,7 @@ static ssize_t current_value_store(struct kobject *kobj, · 23 unmodified lines
1092 goto out;1092 goto out;
1093 }1093 }
1094 1094
1095 set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,1095 set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name,
1096 new_setting);1096 new_setting);
1097 if (!set_str) {1097 if (!set_str) {
1098 ret = -ENOMEM;1098 ret = -ENOMEM;
@@ -1120,11 +1120,11 @@ static ssize_t current_value_store(struct kobject *kobj, · 21 unmodified lines
1120 }1120 }
1121 1121
1122 if (auth_str)1122 if (auth_str)
1123 set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->display_name,1123 set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name,
1124 new_setting, auth_str);1124 new_setting, auth_str);
1125 else1125 else
1126 set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,1126 set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name,
1127 new_setting);1127 new_setting);
1128 if (!set_str) {1128 if (!set_str) {
1129 ret = -ENOMEM;1129 ret = -ENOMEM;
1130 goto out;1130 goto out;
@@ -1629,9 +1629,6 @@ static int tlmi_analyze(struct wmi_device *wdev) · 498 unmodified lines
1629 continue;1629 continue;
1630 }1630 }
1631 1631
1632 /* It is not allowed to have '/' for file name. Convert it into '\'. */
1633 strreplace(item, '/', '\\');
1634
1635 /* Remove the value part */1632 /* Remove the value part */
1636 strreplace(item, ',', '\0');1633 strreplace(item, ',', '\0');
1637 1634
@@ -1644,11 +1641,16 @@ static int tlmi_analyze(struct wmi_device *wdev) · 6 unmodified lines
1644 }1641 }
1645 setting->wdev = wdev;1642 setting->wdev = wdev;
1646 setting->index = i;1643 setting->index = i;
1644
1645 strscpy(setting->name, item);
1646 /* It is not allowed to have '/' for file name. Convert it into '\'. */
1647 strreplace(item, '/', '\\');
1647 strscpy(setting->display_name, item);1648 strscpy(setting->display_name, item);
1649
1648 /* If BIOS selections supported, load those */1650 /* If BIOS selections supported, load those */
1649 if (tlmi_priv.can_get_bios_selections) {1651 if (tlmi_priv.can_get_bios_selections) {
1650 ret = tlmi_get_bios_selections(setting->display_name,1652 ret = tlmi_get_bios_selections(setting->name,
1651 &setting->possible_values);1653 &setting->possible_values);
1652 if (ret || !setting->possible_values)1654 if (ret || !setting->possible_values)
1653 pr_info("Error retrieving possible values for %d : %s\n",1655 pr_info("Error retrieving possible values for %d : %s\n",
1654 i, setting->display_name);1656 i, setting->display_name);
drivers/platform/x86/think-lmi.h+1−0
@@ -90,6 +90,7 @@ struct tlmi_attr_setting { · 89 unmodified lines
90 struct kobject kobj;90 struct kobject kobj;
91 struct wmi_device *wdev;91 struct wmi_device *wdev;
92 int index;92 int index;
93 char name[TLMI_SETTINGS_MAXLEN];
93 char display_name[TLMI_SETTINGS_MAXLEN];94 char display_name[TLMI_SETTINGS_MAXLEN];
94 char *possible_values;95 char *possible_values;
95};96};
drivers/platform/x86/thinkpad_acpi.c+5−0
@@ -231,6 +231,7 @@ enum tpacpi_hkey_event_t { · 230 unmodified lines
231 /* Thermal events */231 /* Thermal events */
232 TP_HKEY_EV_ALARM_BAT_HOT = 0x6011, /* battery too hot */232 TP_HKEY_EV_ALARM_BAT_HOT = 0x6011, /* battery too hot */
233 TP_HKEY_EV_ALARM_BAT_XHOT = 0x6012, /* battery critically hot */233 TP_HKEY_EV_ALARM_BAT_XHOT = 0x6012, /* battery critically hot */
234 TP_HKEY_EV_ALARM_BAT_LIM_CHANGE = 0x6013, /* battery charge limit changed*/
234 TP_HKEY_EV_ALARM_SENSOR_HOT = 0x6021, /* sensor too hot */235 TP_HKEY_EV_ALARM_SENSOR_HOT = 0x6021, /* sensor too hot */
235 TP_HKEY_EV_ALARM_SENSOR_XHOT = 0x6022, /* sensor critically hot */236 TP_HKEY_EV_ALARM_SENSOR_XHOT = 0x6022, /* sensor critically hot */
236 TP_HKEY_EV_THM_TABLE_CHANGED = 0x6030, /* windows; thermal table changed */237 TP_HKEY_EV_THM_TABLE_CHANGED = 0x6030, /* windows; thermal table changed */
@@ -3777,6 +3778,10 @@ static bool hotkey_notify_6xxx(const u32 hkey, bool *send_acpi_ev) · 3540 unmodified lines
3777 pr_alert("THERMAL EMERGENCY: battery is extremely hot!\n");3778 pr_alert("THERMAL EMERGENCY: battery is extremely hot!\n");
3778 /* recommended action: immediate sleep/hibernate */3779 /* recommended action: immediate sleep/hibernate */
3779 break;3780 break;
3781 case TP_HKEY_EV_ALARM_BAT_LIM_CHANGE:
3782 pr_debug("Battery Info: battery charge threshold changed\n");
3783 /* User changed charging threshold. No action needed */
3784 return true;
3780 case TP_HKEY_EV_ALARM_SENSOR_HOT:3785 case TP_HKEY_EV_ALARM_SENSOR_HOT:
3781 pr_crit("THERMAL ALARM: a sensor reports something is too hot!\n");3786 pr_crit("THERMAL ALARM: a sensor reports something is too hot!\n");
3782 /* recommended action: warn user through gui, that */3787 /* recommended action: warn user through gui, that */