Skip to content

Commit 79cd892

Browse files
committed
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
2 parents eccf6f2 + f2eae58 commit 79cd892

File tree

6 files changed

+52
-18
lines changed

6 files changed

+52
-18
lines changed

drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static ssize_t current_password_store(struct kobject *kobj,
4545
int length;
4646

4747
length = strlen(buf);
48-
if (buf[length-1] == '\n')
48+
if (length && buf[length - 1] == '\n')
4949
length--;
5050

5151
/* firmware does verifiation of min/max password length,

drivers/platform/x86/fujitsu-laptop.c

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
/*
1818
* fujitsu-laptop.c - Fujitsu laptop support, providing access to additional
1919
* features made available on a range of Fujitsu laptops including the
20-
* P2xxx/P5xxx/S6xxx/S7xxx series.
20+
* P2xxx/P5xxx/S2xxx/S6xxx/S7xxx series.
2121
*
2222
* This driver implements a vendor-specific backlight control interface for
2323
* Fujitsu laptops and provides support for hotkeys present on certain Fujitsu
2424
* laptops.
2525
*
26-
* This driver has been tested on a Fujitsu Lifebook S6410, S7020 and
26+
* This driver has been tested on a Fujitsu Lifebook S2110, S6410, S7020 and
2727
* P8010. It should work on most P-series and S-series Lifebooks, but
2828
* YMMV.
2929
*
@@ -107,7 +107,11 @@
107107
#define KEY2_CODE 0x411
108108
#define KEY3_CODE 0x412
109109
#define KEY4_CODE 0x413
110-
#define KEY5_CODE 0x420
110+
#define KEY5_CODE 0x414
111+
#define KEY6_CODE 0x415
112+
#define KEY7_CODE 0x416
113+
#define KEY8_CODE 0x417
114+
#define KEY9_CODE 0x420
111115

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

591+
static 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+
587603
static const struct key_entry *keymap = keymap_default;
588604

589605
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[] = {
621637
},
622638
.driver_data = (void *)keymap_p8010
623639
},
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+
},
624649
{}
625650
};
626651

drivers/platform/x86/intel/pmc/arl.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ static struct pmc_info arl_pmc_info_list[] = {
681681

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

695696
static void arl_h_d3_fixup(void)
696697
{
697-
pmc_core_set_device_d3(ARL_NPU_PCI_DEV);
698+
pmc_core_set_device_d3(ARL_H_NPU_PCI_DEV);
698699
pmc_core_set_device_d3(ARL_H_GNA_PCI_DEV);
699700
}
700701

drivers/platform/x86/think-lmi.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,8 +1061,8 @@ static ssize_t current_value_store(struct kobject *kobj,
10611061
ret = -EINVAL;
10621062
goto out;
10631063
}
1064-
set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->display_name,
1065-
new_setting, tlmi_priv.pwd_admin->signature);
1064+
set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name,
1065+
new_setting, tlmi_priv.pwd_admin->signature);
10661066
if (!set_str) {
10671067
ret = -ENOMEM;
10681068
goto out;
@@ -1092,7 +1092,7 @@ static ssize_t current_value_store(struct kobject *kobj,
10921092
goto out;
10931093
}
10941094

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

11221122
if (auth_str)
1123-
set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->display_name,
1124-
new_setting, auth_str);
1123+
set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name,
1124+
new_setting, auth_str);
11251125
else
1126-
set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
1127-
new_setting);
1126+
set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name,
1127+
new_setting);
11281128
if (!set_str) {
11291129
ret = -ENOMEM;
11301130
goto out;
@@ -1629,9 +1629,6 @@ static int tlmi_analyze(struct wmi_device *wdev)
16291629
continue;
16301630
}
16311631

1632-
/* It is not allowed to have '/' for file name. Convert it into '\'. */
1633-
strreplace(item, '/', '\\');
1634-
16351632
/* Remove the value part */
16361633
strreplace(item, ',', '\0');
16371634

@@ -1644,11 +1641,16 @@ static int tlmi_analyze(struct wmi_device *wdev)
16441641
}
16451642
setting->wdev = wdev;
16461643
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, '/', '\\');
16471648
strscpy(setting->display_name, item);
1649+
16481650
/* If BIOS selections supported, load those */
16491651
if (tlmi_priv.can_get_bios_selections) {
1650-
ret = tlmi_get_bios_selections(setting->display_name,
1651-
&setting->possible_values);
1652+
ret = tlmi_get_bios_selections(setting->name,
1653+
&setting->possible_values);
16521654
if (ret || !setting->possible_values)
16531655
pr_info("Error retrieving possible values for %d : %s\n",
16541656
i, setting->display_name);

drivers/platform/x86/think-lmi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ struct tlmi_attr_setting {
9090
struct kobject kobj;
9191
struct wmi_device *wdev;
9292
int index;
93+
char name[TLMI_SETTINGS_MAXLEN];
9394
char display_name[TLMI_SETTINGS_MAXLEN];
9495
char *possible_values;
9596
};

drivers/platform/x86/thinkpad_acpi.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ enum tpacpi_hkey_event_t {
231231
/* Thermal events */
232232
TP_HKEY_EV_ALARM_BAT_HOT = 0x6011, /* battery too hot */
233233
TP_HKEY_EV_ALARM_BAT_XHOT = 0x6012, /* battery critically hot */
234+
TP_HKEY_EV_ALARM_BAT_LIM_CHANGE = 0x6013, /* battery charge limit changed*/
234235
TP_HKEY_EV_ALARM_SENSOR_HOT = 0x6021, /* sensor too hot */
235236
TP_HKEY_EV_ALARM_SENSOR_XHOT = 0x6022, /* sensor critically hot */
236237
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)
37773778
pr_alert("THERMAL EMERGENCY: battery is extremely hot!\n");
37783779
/* recommended action: immediate sleep/hibernate */
37793780
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;
37803785
case TP_HKEY_EV_ALARM_SENSOR_HOT:
37813786
pr_crit("THERMAL ALARM: a sensor reports something is too hot!\n");
37823787
/* recommended action: warn user through gui, that */

0 commit comments

Comments
 (0)