[PATCH 1/3] platform/x86: uniwill-laptop: Add PCSpecialist Recoil 16 AMD

From: Mohamed Jouini

Date: Fri Sep 25 2026 - 17:17:17 EST


The PCSpecialist Recoil 16 AMD is a rebadged TUXEDO Stellaris 16 Gen7 AMD
but reports sys_vendor "PCSpecialist" and board name "X6FR57TY", so the
existing entry does not match it.

Use the Stellaris 16 Gen7 AMD feature set, but with the percentage charge
limit instead of the charging profiles: on this firmware the "balanced"
profile does not limit charging (the battery still charges to full),
whereas the ACPI _BST method reads EC_ADDR_CHARGE_CTRL (CGLM) and reports
the "charge limiting" state bit while it is set to 1-99. Setting
charge_control_end_threshold to 90 on a full battery switches the
reported status from "Full" to "Not charging", and charging stops at 90%.

Signed-off-by: Mohamed Jouini <amad3v@xxxxxxxxx>
---
drivers/platform/x86/uniwill/uniwill-acpi.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c
index eeead0159..beba5a76a 100644
--- a/drivers/platform/x86/uniwill/uniwill-acpi.c
+++ b/drivers/platform/x86/uniwill/uniwill-acpi.c
@@ -2787,6 +2787,19 @@ static struct uniwill_device_descriptor tux_featureset_4_nvidia_descriptor __ini
UNIWILL_FEATURE_USB_POWERSHARE,
};

+static struct uniwill_device_descriptor pcs_recoil16_amd_descriptor __initdata = {
+ .features = UNIWILL_FEATURE_FN_LOCK |
+ UNIWILL_FEATURE_SUPER_KEY |
+ UNIWILL_FEATURE_BATTERY_CHARGE_LIMIT |
+ UNIWILL_FEATURE_CPU_TEMP |
+ UNIWILL_FEATURE_GPU_TEMP |
+ UNIWILL_FEATURE_PRIMARY_FAN |
+ UNIWILL_FEATURE_SECONDARY_FAN |
+ UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL |
+ UNIWILL_FEATURE_AC_AUTO_BOOT |
+ UNIWILL_FEATURE_USB_POWERSHARE,
+};
+
static int phxtxx1_probe(struct uniwill_data *data)
{
unsigned int value;
@@ -3268,6 +3281,14 @@ static const struct dmi_system_id uniwill_dmi_table[] __initconst = {
},
.driver_data = &tux_featureset_4_nvidia_descriptor,
},
+ {
+ .ident = "PCSpecialist Recoil 16 AMD",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "PCSpecialist"),
+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6FR57TY"),
+ },
+ .driver_data = &pcs_recoil16_amd_descriptor,
+ },
{
.ident = "TUXEDO Stellaris 16 Gen7 Intel",
.matches = {
--
2.55.0