1
0
mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2026-01-11 17:10:13 +00:00

platform-drivers-x86 for v6.19-2

Fixes and New HW Support
 
 - alienware-wmi-wmax: Area-51, x16, and 16X Aurora laptops support
 
 - asus-armoury:
   - Fix FA507R PPT data
   - Add TDP data for more laptop models
 
 - asus-nb-wmi: Asus Zenbook 14 display toggle key support
 
 - dell-lis3lv02d: Dell Latitude 5400 support
 
 - hp-bioscfg: Fix out-of-bounds array access in ACPI package parsing
 
 - ibm_rtl: Fix EBDA signature search pointer arithmetic
 
 - ideapad-laptop: Reassign KEY_CUT to KEY_SELECTIVE_SCREENSHOT
 
 - intel/pmt:
   - Fix kobject memory leak on init failure
   - Use valid pointers on error handling path
 
 - intel/vsec: Correct kernel doc comments
 
 - mellanox: mlxbf-pmc: Fix event names
 
 - msi-laptop: Add sysfs_remove_group()
 
 - samsumg-galaxybook: Do not cast pointer to a shorter type
 
 - think-lmi: WMI certificate thumbprint support for ThinkCenter
 
 - uniwill: Tuxedo Book BA15 Gen10 support
 
 The following is an automated shortlog grouped by driver:
 
 alienware-wmi-wmax:
  -  Add AWCC support for Alienware x16
  -  Add support for Alienware 16X Aurora
  -  Add support for new Area-51 laptops
 
 asus-armoury:
  -  add support for FA608UM
  -  add support for G615LR
  -  add support for G835LW
  -  add support for GA403WR
  -  add support for GU605CR
  -  fix ppt data for FA507R
 
 asus-nb-wmi:
  -  Add keymap for display toggle
 
 dell-lis3lv02d:
  -  Add Latitude 5400
 
 hp-bioscfg:
  -  Fix out-of-bounds array access in ACPI package parsing
 
 ibm_rtl:
  -  fix EBDA signature search pointer arithmetic
 
 ideapad-laptop:
  -  Reassign KEY_CUT to KEY_SELECTIVE_SCREENSHOT
 
 intel/pmt/discovery:
  -  use valid device pointer in dev_err_probe
 
 intel/pmt:
  -  Fix kobject memory leak on init failure
 
 intel/vsec:
  -  correct kernel-doc comments
 
 mlxbf-pmc:
  -  Remove trailing whitespaces from event names
 
 msi-laptop:
  -  add missing sysfs_remove_group()
 
 samsung-galaxybook:
  -  Fix problematic pointer cast
 
 think-lmi:
  -  Add WMI certificate thumbprint support for ThinkCenter
 
 uniwill:
  -  Add TUXEDO Book BA15 Gen10
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYIAB0WIQSCSUwRdwTNL2MhaBlZrE9hU+XOMQUCaVT4igAKCRBZrE9hU+XO
 MTB4AQCIWd1/VEyiHw7nLVraCvVcG25m+E61XkALpP3KHzuWsAD/ejev+eNcng9W
 G+TnUShOsVJ3w++juDHX1PNG7CSNqQ4=
 =tvjU
 -----END PGP SIGNATURE-----

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

Pull x86 platform driver fixes from Ilpo Järvinen:

 - alienware-wmi-wmax: Area-51, x16, and 16X Aurora laptops support

 - asus-armoury:
    - Fix FA507R PPT data
    - Add TDP data for more laptop models

 - asus-nb-wmi: Asus Zenbook 14 display toggle key support

 - dell-lis3lv02d: Dell Latitude 5400 support

 - hp-bioscfg: Fix out-of-bounds array access in ACPI package parsing

 - ibm_rtl: Fix EBDA signature search pointer arithmetic

 - ideapad-laptop: Reassign KEY_CUT to KEY_SELECTIVE_SCREENSHOT

 - intel/pmt:
    - Fix kobject memory leak on init failure
    - Use valid pointers on error handling path

 - intel/vsec: Correct kernel doc comments

 - mellanox: mlxbf-pmc: Fix event names

 - msi-laptop: Add sysfs_remove_group()

 - samsumg-galaxybook: Do not cast pointer to a shorter type

 - think-lmi: WMI certificate thumbprint support for ThinkCenter

 - uniwill: Tuxedo Book BA15 Gen10 support

* tag 'platform-drivers-x86-v6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86: (22 commits)
  platform/x86: asus-armoury: add support for G835LW
  platform/x86: asus-armoury: fix ppt data for FA507R
  platform/x86/intel/pmt/discovery: use valid device pointer in dev_err_probe
  platform/x86: hp-bioscfg: Fix out-of-bounds array access in ACPI package parsing
  platform/x86: asus-armoury: add support for G615LR
  platform/x86: asus-armoury: add support for FA608UM
  platform/x86: asus-armoury: add support for GA403WR
  platform/x86: asus-armoury: add support for GU605CR
  platform/x86: ideapad-laptop: Reassign KEY_CUT to KEY_SELECTIVE_SCREENSHOT
  platform/x86: samsung-galaxybook: Fix problematic pointer cast
  platform/x86/intel/pmt: Fix kobject memory leak on init failure
  platform/x86/intel/vsec: correct kernel-doc comments
  platform/x86: ibm_rtl: fix EBDA signature search pointer arithmetic
  platform/x86: msi-laptop: add missing sysfs_remove_group()
  platform/x86: think-lmi: Add WMI certificate thumbprint support for ThinkCenter
  platform/x86: dell-lis3lv02d: Add Latitude 5400
  platform/mellanox: mlxbf-pmc: Remove trailing whitespaces from event names
  platform/x86: asus-nb-wmi: Add keymap for display toggle
  platform/x86/uniwill: Add TUXEDO Book BA15 Gen10
  platform/x86: alienware-wmi-wmax: Add support for Alienware 16X Aurora
  ...
This commit is contained in:
Linus Torvalds 2025-12-31 12:25:22 -08:00
commit 9528d5c091
18 changed files with 265 additions and 31 deletions

View File

@ -801,18 +801,18 @@ static const struct mlxbf_pmc_events mlxbf_pmc_llt_miss_events[] = {
{11, "GDC_MISS_MACHINE_CHI_TXDAT"}, {11, "GDC_MISS_MACHINE_CHI_TXDAT"},
{12, "GDC_MISS_MACHINE_CHI_RXDAT"}, {12, "GDC_MISS_MACHINE_CHI_RXDAT"},
{13, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_0"}, {13, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_0"},
{14, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_1 "}, {14, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_1"},
{15, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_2"}, {15, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_2"},
{16, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_3 "}, {16, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC0_3"},
{17, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_0 "}, {17, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_0"},
{18, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_1 "}, {18, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_1"},
{19, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_2 "}, {19, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_2"},
{20, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_3 "}, {20, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC1_3"},
{21, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_0"}, {21, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_0"},
{22, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_1"}, {22, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_1"},
{23, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_2"}, {23, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_2"},
{24, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_3"}, {24, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE0_3"},
{25, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_0 "}, {25, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_0"},
{26, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_1"}, {26, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_1"},
{27, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_2"}, {27, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_2"},
{28, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_3"}, {28, "GDC_MISS_MACHINE_G_FIFO_FF_EXEC_DONE1_3"},

View File

@ -449,12 +449,27 @@ static const struct dmi_system_id power_limits[] = {
.ac_data = &(struct power_limits) { .ac_data = &(struct power_limits) {
.ppt_pl1_spl_min = 15, .ppt_pl1_spl_min = 15,
.ppt_pl1_spl_max = 80, .ppt_pl1_spl_max = 80,
.ppt_pl2_sppt_min = 25, .ppt_pl2_sppt_min = 35,
.ppt_pl2_sppt_max = 80, .ppt_pl2_sppt_max = 80,
.ppt_pl3_fppt_min = 35, .ppt_pl3_fppt_min = 35,
.ppt_pl3_fppt_max = 80 .ppt_pl3_fppt_max = 80,
.nv_dynamic_boost_min = 5,
.nv_dynamic_boost_max = 25,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
},
.dc_data = &(struct power_limits) {
.ppt_pl1_spl_min = 15,
.ppt_pl1_spl_def = 45,
.ppt_pl1_spl_max = 65,
.ppt_pl2_sppt_min = 35,
.ppt_pl2_sppt_def = 54,
.ppt_pl2_sppt_max = 65,
.ppt_pl3_fppt_min = 35,
.ppt_pl3_fppt_max = 65,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
}, },
.dc_data = NULL,
}, },
}, },
{ {
@ -552,6 +567,42 @@ static const struct dmi_system_id power_limits[] = {
}, },
}, },
}, },
{
.matches = {
DMI_MATCH(DMI_BOARD_NAME, "FA608UM"),
},
.driver_data = &(struct power_data) {
.ac_data = &(struct power_limits) {
.ppt_pl1_spl_min = 15,
.ppt_pl1_spl_def = 45,
.ppt_pl1_spl_max = 90,
.ppt_pl2_sppt_min = 35,
.ppt_pl2_sppt_def = 54,
.ppt_pl2_sppt_max = 90,
.ppt_pl3_fppt_min = 35,
.ppt_pl3_fppt_def = 90,
.ppt_pl3_fppt_max = 65,
.nv_dynamic_boost_min = 10,
.nv_dynamic_boost_max = 15,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
.nv_tgp_min = 55,
.nv_tgp_max = 100,
},
.dc_data = &(struct power_limits) {
.ppt_pl1_spl_min = 15,
.ppt_pl1_spl_def = 45,
.ppt_pl1_spl_max = 65,
.ppt_pl2_sppt_min = 35,
.ppt_pl2_sppt_def = 54,
.ppt_pl2_sppt_max = 65,
.ppt_pl3_fppt_min = 35,
.ppt_pl3_fppt_max = 65,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
},
},
},
{ {
.matches = { .matches = {
DMI_MATCH(DMI_BOARD_NAME, "FA608WI"), DMI_MATCH(DMI_BOARD_NAME, "FA608WI"),
@ -822,6 +873,38 @@ static const struct dmi_system_id power_limits[] = {
.requires_fan_curve = true, .requires_fan_curve = true,
}, },
}, },
{
.matches = {
DMI_MATCH(DMI_BOARD_NAME, "GA403WR"),
},
.driver_data = &(struct power_data) {
.ac_data = &(struct power_limits) {
.ppt_pl1_spl_min = 15,
.ppt_pl1_spl_max = 80,
.ppt_pl2_sppt_min = 25,
.ppt_pl2_sppt_max = 80,
.ppt_pl3_fppt_min = 35,
.ppt_pl3_fppt_max = 80,
.nv_dynamic_boost_min = 0,
.nv_dynamic_boost_max = 25,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
.nv_tgp_min = 80,
.nv_tgp_max = 95,
},
.dc_data = &(struct power_limits) {
.ppt_pl1_spl_min = 15,
.ppt_pl1_spl_max = 35,
.ppt_pl2_sppt_min = 25,
.ppt_pl2_sppt_max = 35,
.ppt_pl3_fppt_min = 35,
.ppt_pl3_fppt_max = 65,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
},
.requires_fan_curve = true,
},
},
{ {
.matches = { .matches = {
DMI_MATCH(DMI_BOARD_NAME, "GA503QR"), DMI_MATCH(DMI_BOARD_NAME, "GA503QR"),
@ -950,6 +1033,35 @@ static const struct dmi_system_id power_limits[] = {
}, },
}, },
}, },
{
.matches = {
DMI_MATCH(DMI_BOARD_NAME, "GU605CR"),
},
.driver_data = &(struct power_data) {
.ac_data = &(struct power_limits) {
.ppt_pl1_spl_min = 30,
.ppt_pl1_spl_max = 85,
.ppt_pl2_sppt_min = 38,
.ppt_pl2_sppt_max = 110,
.nv_dynamic_boost_min = 5,
.nv_dynamic_boost_max = 20,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
.nv_tgp_min = 80,
.nv_tgp_def = 90,
.nv_tgp_max = 105,
},
.dc_data = &(struct power_limits) {
.ppt_pl1_spl_min = 30,
.ppt_pl1_spl_max = 85,
.ppt_pl2_sppt_min = 38,
.ppt_pl2_sppt_max = 110,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
},
.requires_fan_curve = true,
},
},
{ {
.matches = { .matches = {
DMI_MATCH(DMI_BOARD_NAME, "GU605CW"), DMI_MATCH(DMI_BOARD_NAME, "GU605CW"),
@ -1260,6 +1372,35 @@ static const struct dmi_system_id power_limits[] = {
.requires_fan_curve = true, .requires_fan_curve = true,
}, },
}, },
{
.matches = {
DMI_MATCH(DMI_BOARD_NAME, "G615LR"),
},
.driver_data = &(struct power_data) {
.ac_data = &(struct power_limits) {
.ppt_pl1_spl_min = 28,
.ppt_pl1_spl_def = 140,
.ppt_pl1_spl_max = 175,
.ppt_pl2_sppt_min = 28,
.ppt_pl2_sppt_max = 175,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
.nv_dynamic_boost_min = 5,
.nv_dynamic_boost_max = 25,
.nv_tgp_min = 65,
.nv_tgp_max = 115,
},
.dc_data = &(struct power_limits) {
.ppt_pl1_spl_min = 25,
.ppt_pl1_spl_max = 55,
.ppt_pl2_sppt_min = 25,
.ppt_pl2_sppt_max = 70,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
},
.requires_fan_curve = true,
},
},
{ {
.matches = { .matches = {
DMI_MATCH(DMI_BOARD_NAME, "G634J"), DMI_MATCH(DMI_BOARD_NAME, "G634J"),
@ -1426,6 +1567,35 @@ static const struct dmi_system_id power_limits[] = {
.requires_fan_curve = true, .requires_fan_curve = true,
}, },
}, },
{
.matches = {
DMI_MATCH(DMI_BOARD_NAME, "G835LW"),
},
.driver_data = &(struct power_data) {
.ac_data = &(struct power_limits) {
.ppt_pl1_spl_min = 28,
.ppt_pl1_spl_def = 140,
.ppt_pl1_spl_max = 175,
.ppt_pl2_sppt_min = 28,
.ppt_pl2_sppt_max = 175,
.nv_dynamic_boost_min = 5,
.nv_dynamic_boost_max = 25,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
.nv_tgp_min = 80,
.nv_tgp_max = 150,
},
.dc_data = &(struct power_limits) {
.ppt_pl1_spl_min = 25,
.ppt_pl1_spl_max = 55,
.ppt_pl2_sppt_min = 25,
.ppt_pl2_sppt_max = 70,
.nv_temp_target_min = 75,
.nv_temp_target_max = 87,
},
.requires_fan_curve = true,
},
},
{ {
.matches = { .matches = {
DMI_MATCH(DMI_BOARD_NAME, "H7606W"), DMI_MATCH(DMI_BOARD_NAME, "H7606W"),

View File

@ -580,6 +580,7 @@ static const struct key_entry asus_nb_wmi_keymap[] = {
{ KE_KEY, 0x2a, { KEY_SELECTIVE_SCREENSHOT } }, { KE_KEY, 0x2a, { KEY_SELECTIVE_SCREENSHOT } },
{ KE_IGNORE, 0x2b, }, /* PrintScreen (also send via PS/2) on newer models */ { KE_IGNORE, 0x2b, }, /* PrintScreen (also send via PS/2) on newer models */
{ KE_IGNORE, 0x2c, }, /* CapsLock (also send via PS/2) on newer models */ { KE_IGNORE, 0x2c, }, /* CapsLock (also send via PS/2) on newer models */
{ KE_KEY, 0x2d, { KEY_DISPLAYTOGGLE } },
{ KE_KEY, 0x30, { KEY_VOLUMEUP } }, { KE_KEY, 0x30, { KEY_VOLUMEUP } },
{ KE_KEY, 0x31, { KEY_VOLUMEDOWN } }, { KE_KEY, 0x31, { KEY_VOLUMEDOWN } },
{ KE_KEY, 0x32, { KEY_MUTE } }, { KE_KEY, 0x32, { KEY_MUTE } },

View File

@ -89,6 +89,30 @@ static struct awcc_quirks generic_quirks = {
static struct awcc_quirks empty_quirks; static struct awcc_quirks empty_quirks;
static const struct dmi_system_id awcc_dmi_table[] __initconst = { static const struct dmi_system_id awcc_dmi_table[] __initconst = {
{
.ident = "Alienware 16 Area-51",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16 Area-51"),
},
.driver_data = &g_series_quirks,
},
{
.ident = "Alienware 16X Aurora",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16X Aurora"),
},
.driver_data = &g_series_quirks,
},
{
.ident = "Alienware 18 Area-51",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 18 Area-51"),
},
.driver_data = &g_series_quirks,
},
{ {
.ident = "Alienware 16 Aurora", .ident = "Alienware 16 Aurora",
.matches = { .matches = {
@ -161,6 +185,14 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
}, },
.driver_data = &generic_quirks, .driver_data = &generic_quirks,
}, },
{
.ident = "Alienware x16",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x16"),
},
.driver_data = &g_series_quirks,
},
{ {
.ident = "Alienware x17", .ident = "Alienware x17",
.matches = { .matches = {

View File

@ -44,6 +44,7 @@ static const struct dmi_system_id lis3lv02d_devices[] __initconst = {
/* /*
* Additional individual entries were added after verification. * Additional individual entries were added after verification.
*/ */
DELL_LIS3LV02D_DMI_ENTRY("Latitude 5400", 0x29),
DELL_LIS3LV02D_DMI_ENTRY("Latitude 5480", 0x29), DELL_LIS3LV02D_DMI_ENTRY("Latitude 5480", 0x29),
DELL_LIS3LV02D_DMI_ENTRY("Latitude 5500", 0x29), DELL_LIS3LV02D_DMI_ENTRY("Latitude 5500", 0x29),
DELL_LIS3LV02D_DMI_ENTRY("Latitude E6330", 0x29), DELL_LIS3LV02D_DMI_ENTRY("Latitude E6330", 0x29),

View File

@ -207,7 +207,7 @@ static int hp_populate_enumeration_elements_from_package(union acpi_object *enum
case PREREQUISITES: case PREREQUISITES:
size = min_t(u32, enum_data->common.prerequisites_size, MAX_PREREQUISITES_SIZE); size = min_t(u32, enum_data->common.prerequisites_size, MAX_PREREQUISITES_SIZE);
for (reqs = 0; reqs < size; reqs++) { for (reqs = 0; reqs < size; reqs++) {
if (elem >= enum_obj_count) { if (elem + reqs >= enum_obj_count) {
pr_err("Error enum-objects package is too small\n"); pr_err("Error enum-objects package is too small\n");
return -EINVAL; return -EINVAL;
} }
@ -255,7 +255,7 @@ static int hp_populate_enumeration_elements_from_package(union acpi_object *enum
for (pos_values = 0; pos_values < size && pos_values < MAX_VALUES_SIZE; for (pos_values = 0; pos_values < size && pos_values < MAX_VALUES_SIZE;
pos_values++) { pos_values++) {
if (elem >= enum_obj_count) { if (elem + pos_values >= enum_obj_count) {
pr_err("Error enum-objects package is too small\n"); pr_err("Error enum-objects package is too small\n");
return -EINVAL; return -EINVAL;
} }

View File

@ -227,7 +227,7 @@ static int hp_populate_integer_elements_from_package(union acpi_object *integer_
size = min_t(u32, integer_data->common.prerequisites_size, MAX_PREREQUISITES_SIZE); size = min_t(u32, integer_data->common.prerequisites_size, MAX_PREREQUISITES_SIZE);
for (reqs = 0; reqs < size; reqs++) { for (reqs = 0; reqs < size; reqs++) {
if (elem >= integer_obj_count) { if (elem + reqs >= integer_obj_count) {
pr_err("Error elem-objects package is too small\n"); pr_err("Error elem-objects package is too small\n");
return -EINVAL; return -EINVAL;
} }

View File

@ -216,6 +216,11 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
size = min_t(u32, ordered_list_data->common.prerequisites_size, size = min_t(u32, ordered_list_data->common.prerequisites_size,
MAX_PREREQUISITES_SIZE); MAX_PREREQUISITES_SIZE);
for (reqs = 0; reqs < size; reqs++) { for (reqs = 0; reqs < size; reqs++) {
if (elem + reqs >= order_obj_count) {
pr_err("Error elem-objects package is too small\n");
return -EINVAL;
}
ret = hp_convert_hexstr_to_str(order_obj[elem + reqs].string.pointer, ret = hp_convert_hexstr_to_str(order_obj[elem + reqs].string.pointer,
order_obj[elem + reqs].string.length, order_obj[elem + reqs].string.length,
&str_value, &value_len); &str_value, &value_len);

View File

@ -303,6 +303,11 @@ static int hp_populate_password_elements_from_package(union acpi_object *passwor
MAX_PREREQUISITES_SIZE); MAX_PREREQUISITES_SIZE);
for (reqs = 0; reqs < size; reqs++) { for (reqs = 0; reqs < size; reqs++) {
if (elem + reqs >= password_obj_count) {
pr_err("Error elem-objects package is too small\n");
return -EINVAL;
}
ret = hp_convert_hexstr_to_str(password_obj[elem + reqs].string.pointer, ret = hp_convert_hexstr_to_str(password_obj[elem + reqs].string.pointer,
password_obj[elem + reqs].string.length, password_obj[elem + reqs].string.length,
&str_value, &value_len); &str_value, &value_len);

View File

@ -217,7 +217,7 @@ static int hp_populate_string_elements_from_package(union acpi_object *string_ob
MAX_PREREQUISITES_SIZE); MAX_PREREQUISITES_SIZE);
for (reqs = 0; reqs < size; reqs++) { for (reqs = 0; reqs < size; reqs++) {
if (elem >= string_obj_count) { if (elem + reqs >= string_obj_count) {
pr_err("Error elem-objects package is too small\n"); pr_err("Error elem-objects package is too small\n");
return -EINVAL; return -EINVAL;
} }

View File

@ -273,7 +273,7 @@ static int __init ibm_rtl_init(void) {
/* search for the _RTL_ signature at the start of the table */ /* search for the _RTL_ signature at the start of the table */
for (i = 0 ; i < ebda_size/sizeof(unsigned int); i++) { for (i = 0 ; i < ebda_size/sizeof(unsigned int); i++) {
struct ibm_rtl_table __iomem * tmp; struct ibm_rtl_table __iomem * tmp;
tmp = (struct ibm_rtl_table __iomem *) (ebda_map+i); tmp = (struct ibm_rtl_table __iomem *) (ebda_map + i*sizeof(unsigned int));
if ((readq(&tmp->signature) & RTL_MASK) == RTL_SIGNATURE) { if ((readq(&tmp->signature) & RTL_MASK) == RTL_SIGNATURE) {
phys_addr_t addr; phys_addr_t addr;
unsigned int plen; unsigned int plen;

View File

@ -503,8 +503,10 @@ static int pmt_features_discovery(struct pmt_features_priv *priv,
ret = kobject_init_and_add(&feature->kobj, ktype, &priv->dev->kobj, ret = kobject_init_and_add(&feature->kobj, ktype, &priv->dev->kobj,
"%s", pmt_feature_names[feature->id]); "%s", pmt_feature_names[feature->id]);
if (ret) if (ret) {
kobject_put(&feature->kobj);
return ret; return ret;
}
kobject_uevent(&feature->kobj, KOBJ_ADD); kobject_uevent(&feature->kobj, KOBJ_ADD);
pmt_features_add_feat(feature); pmt_features_add_feat(feature);
@ -546,9 +548,9 @@ static int pmt_features_probe(struct auxiliary_device *auxdev, const struct auxi
priv->dev = device_create(&intel_pmt_class, &auxdev->dev, MKDEV(0, 0), priv, priv->dev = device_create(&intel_pmt_class, &auxdev->dev, MKDEV(0, 0), priv,
"%s-%s", "features", dev_name(priv->parent)); "%s-%s", "features", dev_name(priv->parent));
if (IS_ERR(priv->dev)) if (IS_ERR(priv->dev))
return dev_err_probe(priv->dev, PTR_ERR(priv->dev), return dev_err_probe(&auxdev->dev, PTR_ERR(priv->dev),
"Could not create %s-%s device node\n", "Could not create %s-%s device node\n",
"features", dev_name(priv->dev)); "features", dev_name(priv->parent));
/* Initialize each feature */ /* Initialize each feature */
for (i = 0; i < ivdev->num_resources; i++) { for (i = 0; i < ivdev->num_resources; i++) {

View File

@ -1367,7 +1367,7 @@ static const struct key_entry ideapad_keymap[] = {
/* Performance toggle also Fn+Q, handled inside ideapad_wmi_notify() */ /* Performance toggle also Fn+Q, handled inside ideapad_wmi_notify() */
{ KE_KEY, 0x3d | IDEAPAD_WMI_KEY, { KEY_PROG4 } }, { KE_KEY, 0x3d | IDEAPAD_WMI_KEY, { KEY_PROG4 } },
/* shift + prtsc */ /* shift + prtsc */
{ KE_KEY, 0x2d | IDEAPAD_WMI_KEY, { KEY_CUT } }, { KE_KEY, 0x2d | IDEAPAD_WMI_KEY, { KEY_SELECTIVE_SCREENSHOT } },
{ KE_KEY, 0x29 | IDEAPAD_WMI_KEY, { KEY_TOUCHPAD_TOGGLE } }, { KE_KEY, 0x29 | IDEAPAD_WMI_KEY, { KEY_TOUCHPAD_TOGGLE } },
{ KE_KEY, 0x2a | IDEAPAD_WMI_KEY, { KEY_ROOT_MENU } }, { KE_KEY, 0x2a | IDEAPAD_WMI_KEY, { KEY_ROOT_MENU } },

View File

@ -195,7 +195,7 @@ static const struct tlmi_cert_guids thinkpad_cert_guid = {
}; };
static const struct tlmi_cert_guids thinkcenter_cert_guid = { static const struct tlmi_cert_guids thinkcenter_cert_guid = {
.thumbprint = NULL, .thumbprint = LENOVO_CERT_THUMBPRINT_GUID, /* Same GUID as TP */
.set_bios_setting = LENOVO_TC_SET_BIOS_SETTING_CERT_GUID, .set_bios_setting = LENOVO_TC_SET_BIOS_SETTING_CERT_GUID,
.save_bios_setting = LENOVO_TC_SAVE_BIOS_SETTING_CERT_GUID, .save_bios_setting = LENOVO_TC_SAVE_BIOS_SETTING_CERT_GUID,
.cert_to_password = LENOVO_TC_CERT_TO_PASSWORD_GUID, .cert_to_password = LENOVO_TC_CERT_TO_PASSWORD_GUID,
@ -709,6 +709,10 @@ static ssize_t cert_thumbprint(char *buf, const char *arg, int count)
if (!tlmi_priv.cert_guid->thumbprint) if (!tlmi_priv.cert_guid->thumbprint)
return -EOPNOTSUPP; return -EOPNOTSUPP;
/* Older ThinkCenter BIOS may not have support */
if (!wmi_has_guid(tlmi_priv.cert_guid->thumbprint))
return -EOPNOTSUPP;
status = wmi_evaluate_method(tlmi_priv.cert_guid->thumbprint, 0, 0, &input, &output); status = wmi_evaluate_method(tlmi_priv.cert_guid->thumbprint, 0, 0, &input, &output);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
kfree(output.pointer); kfree(output.pointer);

View File

@ -1130,6 +1130,9 @@ static void __exit msi_cleanup(void)
sysfs_remove_group(&msipf_device->dev.kobj, &msipf_attribute_group); sysfs_remove_group(&msipf_device->dev.kobj, &msipf_attribute_group);
if (!quirks->old_ec_model && threeg_exists) if (!quirks->old_ec_model && threeg_exists)
device_remove_file(&msipf_device->dev, &dev_attr_threeg); device_remove_file(&msipf_device->dev, &dev_attr_threeg);
if (quirks->old_ec_model)
sysfs_remove_group(&msipf_device->dev.kobj,
&msipf_old_attribute_group);
platform_device_unregister(msipf_device); platform_device_unregister(msipf_device);
platform_driver_unregister(&msipf_driver); platform_driver_unregister(&msipf_driver);
backlight_device_unregister(msibl_device); backlight_device_unregister(msibl_device);

View File

@ -442,12 +442,13 @@ static int galaxybook_battery_ext_property_get(struct power_supply *psy,
union power_supply_propval *val) union power_supply_propval *val)
{ {
struct samsung_galaxybook *galaxybook = ext_data; struct samsung_galaxybook *galaxybook = ext_data;
u8 value;
int err; int err;
if (psp != POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD) if (psp != POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD)
return -EINVAL; return -EINVAL;
err = charge_control_end_threshold_acpi_get(galaxybook, (u8 *)&val->intval); err = charge_control_end_threshold_acpi_get(galaxybook, &value);
if (err) if (err)
return err; return err;
@ -455,8 +456,10 @@ static int galaxybook_battery_ext_property_get(struct power_supply *psy,
* device stores "no end threshold" as 0 instead of 100; * device stores "no end threshold" as 0 instead of 100;
* if device has 0, report 100 * if device has 0, report 100
*/ */
if (val->intval == 0) if (value == 0)
val->intval = 100; value = 100;
val->intval = value;
return 0; return 0;
} }

View File

@ -1844,6 +1844,13 @@ static const struct dmi_system_id uniwill_dmi_table[] __initconst = {
DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY_mLED"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY_mLED"),
}, },
}, },
{
.ident = "TUXEDO Book BA15 Gen10 AMD",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
DMI_EXACT_MATCH(DMI_BOARD_NAME, "PF5PU1G"),
},
},
{ {
.ident = "TUXEDO Pulse 14 Gen1 AMD", .ident = "TUXEDO Pulse 14 Gen1 AMD",
.matches = { .matches = {

View File

@ -80,13 +80,13 @@ enum intel_vsec_quirks {
/** /**
* struct pmt_callbacks - Callback infrastructure for PMT devices * struct pmt_callbacks - Callback infrastructure for PMT devices
* ->read_telem() when specified, called by client driver to access PMT data (instead * @read_telem: when specified, called by client driver to access PMT
* of direct copy). * data (instead of direct copy).
* @pdev: PCI device reference for the callback's use * * pdev: PCI device reference for the callback's use
* @guid: ID of data to acccss * * guid: ID of data to acccss
* @data: buffer for the data to be copied * * data: buffer for the data to be copied
* @off: offset into the requested buffer * * off: offset into the requested buffer
* @count: size of buffer * * count: size of buffer
*/ */
struct pmt_callbacks { struct pmt_callbacks {
int (*read_telem)(struct pci_dev *pdev, u32 guid, u64 *data, loff_t off, u32 count); int (*read_telem)(struct pci_dev *pdev, u32 guid, u64 *data, loff_t off, u32 count);
@ -120,7 +120,7 @@ struct intel_vsec_platform_info {
}; };
/** /**
* struct intel_sec_device - Auxbus specific device information * struct intel_vsec_device - Auxbus specific device information
* @auxdev: auxbus device struct for auxbus access * @auxdev: auxbus device struct for auxbus access
* @pcidev: pci device associated with the device * @pcidev: pci device associated with the device
* @resource: any resources shared by the parent * @resource: any resources shared by the parent
@ -128,6 +128,7 @@ struct intel_vsec_platform_info {
* @num_resources: number of resources * @num_resources: number of resources
* @id: xarray id * @id: xarray id
* @priv_data: any private data needed * @priv_data: any private data needed
* @priv_data_size: size of private data area
* @quirks: specified quirks * @quirks: specified quirks
* @base_addr: base address of entries (if specified) * @base_addr: base address of entries (if specified)
* @cap_id: the enumerated id of the vsec feature * @cap_id: the enumerated id of the vsec feature