From nobody Sun Apr 5 13:04:58 2026 Received: from mail.tuxedocomputers.com (mail.tuxedocomputers.com [157.90.84.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0E7E349B15; Tue, 24 Mar 2026 20:34:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=157.90.84.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384461; cv=none; b=IVhb+K9cKnPrRTSyRg3fWdKTBYzpL+NXK4q2PaP34GZibc6wAtYY/y1q8A5SzuJRokG1WB7VNnyV+NGMcSWjWnwBD7cRMzntZ6Gj4uIx4sTCX+4p3oYCTfx+d7qjUDEEB8BSu2iIep/dsAXr9ZJNRjfL8rjsvTuexR+G4uYR79I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384461; c=relaxed/simple; bh=fFuaXxXRcnavsSqX/KBHqCjEEt3KYioCwZ87CkBvz1k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YXmn/i5HJX2pjaODxQNLqfzb7Q57RKVprUKsUBwB+1TDiqbQ0L28+SDKMiiURvEyXZPerzvkFQkfknVEw1dr1pTC63UaGG9ExRAsZjhKnj9eRRBnv411cjgS947QMOq8+pU7SMSlPYsGMd7QtCwI4aprXOuiAQVszJDJK6jBZ1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com; spf=pass smtp.mailfrom=tuxedocomputers.com; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b=SMhn/2Am; arc=none smtp.client-ip=157.90.84.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b="SMhn/2Am" Received: from wse-pc.fritz.box (i5C75F50F.versanet.de [92.117.245.15]) (Authenticated sender: wse@tuxedocomputers.com) by mail.tuxedocomputers.com (Postfix) with ESMTPA id 071AB2FC0218; Tue, 24 Mar 2026 21:34:17 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxedocomputers.com; s=default; t=1774384457; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hA/Xh/shQGB0az6ZWD4A2njCJRUAAfWgKeI4yZ9LD+M=; b=SMhn/2AmZ/yIpF0ORYmI2NmJJgbQvf4NyGfL7vUzrr9qE5pAt/21Mr0YeY1gGu7KYlI6Px bmv8f3VSy7ekfahEW8sb/bX+2N5jTiM6iyW+wODbx58Z024v6t/8+FJeGYFD/+m7nG6BgM v32y4nrmfM3V/70gFVmH5gRFTR4SNZQ= Authentication-Results: mail.tuxedocomputers.com; auth=pass smtp.auth=wse@tuxedocomputers.com smtp.mailfrom=wse@tuxedocomputers.com From: Werner Sembach To: W_Armin@gmx.de, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Werner Sembach Subject: [PATCH v8 1/5] platform/x86: uniwill-laptop: Rework hwmon feature defines Date: Tue, 24 Mar 2026 21:32:08 +0100 Message-ID: <20260324203413.454361-2-wse@tuxedocomputers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260324203413.454361-1-wse@tuxedocomputers.com> References: <20260324203413.454361-1-wse@tuxedocomputers.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Armin Wolf Split hwmon feature define in smaller parts to accommodate for diverse hardware. You can now specify the presence of a cpu and/or a gpu temp sensor separately and if one or 2 fans exists. Signed-off-by: Armin Wolf Reviewed-by: Werner Sembach Tested-by: Werner Sembach Signed-off-by: Werner Sembach --- drivers/platform/x86/uniwill/uniwill-acpi.c | 68 ++++++++++++++++++--- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 6341dca20b76a..048b265bff374 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -319,8 +319,11 @@ #define UNIWILL_FEATURE_TOUCHPAD_TOGGLE BIT(2) #define UNIWILL_FEATURE_LIGHTBAR BIT(3) #define UNIWILL_FEATURE_BATTERY BIT(4) -#define UNIWILL_FEATURE_HWMON BIT(5) -#define UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL BIT(6) +#define UNIWILL_FEATURE_CPU_TEMP BIT(5) +#define UNIWILL_FEATURE_GPU_TEMP BIT(6) +#define UNIWILL_FEATURE_PRIMARY_FAN BIT(7) +#define UNIWILL_FEATURE_SECONDARY_FAN BIT(8) +#define UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL BIT(9) =20 struct uniwill_data { struct device *dev; @@ -427,7 +430,7 @@ static const struct key_entry uniwill_keymap[] =3D { { KE_END } }; =20 -static inline bool uniwill_device_supports(struct uniwill_data *data, +static inline bool uniwill_device_supports(const struct uniwill_data *data, unsigned int features) { return (data->features & features) =3D=3D features; @@ -937,6 +940,48 @@ static const struct attribute_group *uniwill_groups[] = =3D { NULL }; =20 +static umode_t uniwill_is_visible(const void *drvdata, enum hwmon_sensor_t= ypes type, u32 attr, + int channel) +{ + const struct uniwill_data *data =3D drvdata; + unsigned int feature; + + switch (type) { + case hwmon_temp: + switch (channel) { + case 0: + feature =3D UNIWILL_FEATURE_CPU_TEMP; + break; + case 1: + feature =3D UNIWILL_FEATURE_GPU_TEMP; + break; + default: + return 0; + } + break; + case hwmon_fan: + case hwmon_pwm: + switch (channel) { + case 0: + feature =3D UNIWILL_FEATURE_PRIMARY_FAN; + break; + case 1: + feature =3D UNIWILL_FEATURE_SECONDARY_FAN; + break; + default: + return 0; + } + break; + default: + return 0; + } + + if (uniwill_device_supports(data, feature)) + return 0444; + + return 0; +} + static int uniwill_read(struct device *dev, enum hwmon_sensor_types type, = u32 attr, int channel, long *val) { @@ -1020,7 +1065,7 @@ static int uniwill_read_string(struct device *dev, en= um hwmon_sensor_types type, } =20 static const struct hwmon_ops uniwill_ops =3D { - .visible =3D 0444, + .is_visible =3D uniwill_is_visible, .read =3D uniwill_read, .read_string =3D uniwill_read_string, }; @@ -1048,7 +1093,10 @@ static int uniwill_hwmon_init(struct uniwill_data *d= ata) { struct device *hdev; =20 - if (!uniwill_device_supports(data, UNIWILL_FEATURE_HWMON)) + if (!uniwill_device_supports(data, UNIWILL_FEATURE_CPU_TEMP) && + !uniwill_device_supports(data, UNIWILL_FEATURE_GPU_TEMP) && + !uniwill_device_supports(data, UNIWILL_FEATURE_PRIMARY_FAN) && + !uniwill_device_supports(data, UNIWILL_FEATURE_SECONDARY_FAN)) return 0; =20 hdev =3D devm_hwmon_device_register_with_info(data->dev, "uniwill", data, @@ -1687,7 +1735,10 @@ static struct uniwill_device_descriptor lapac71h_des= criptor __initdata =3D { UNIWILL_FEATURE_SUPER_KEY | UNIWILL_FEATURE_TOUCHPAD_TOGGLE | UNIWILL_FEATURE_BATTERY | - UNIWILL_FEATURE_HWMON, + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN, }; =20 static struct uniwill_device_descriptor lapkc71f_descriptor __initdata =3D= { @@ -1696,7 +1747,10 @@ static struct uniwill_device_descriptor lapkc71f_des= criptor __initdata =3D { UNIWILL_FEATURE_TOUCHPAD_TOGGLE | UNIWILL_FEATURE_LIGHTBAR | UNIWILL_FEATURE_BATTERY | - UNIWILL_FEATURE_HWMON, + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN, }; =20 static int phxarx1_phxaqf1_probe(struct uniwill_data *data) --=20 2.43.0 From nobody Sun Apr 5 13:04:58 2026 Received: from mail.tuxedocomputers.com (mail.tuxedocomputers.com [157.90.84.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03C34347FEA; Tue, 24 Mar 2026 20:34:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=157.90.84.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384461; cv=none; b=jJBR6GmAEKxjvoDHsG/Q12LfADh1gr34xYugzUH8kiOAJOUkqHC1ZzqNnD47fsXI/GlMOJ75VfE4IxiJJoACrqU1C8tTId5ro7dRbZtckkMcj6d7I2IGs4qxWG4dENzZPspSph/ghS+TZMQQS3AOs660lso7hIk67f/6aVeMXX8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384461; c=relaxed/simple; bh=3eMWHDSTktvj/cyi71V9F32r+0PgsLZoGqNn4bx1MKQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lQD9xa40iy+4C11bbel2EmsTU0nLEfDbqfaMNVRSg0/wSuCEiNH7tpjqNEYZOCmpvrxaKlLcy6FL22ridIG0qjgcabcWiXNABg8peJXo2QNB9vEwFpDiOK1n4ypg/qRpx0WUcT8ikDK3Ufri05ykPdRDq8/Wm764CgtfOJi3RGE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com; spf=pass smtp.mailfrom=tuxedocomputers.com; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b=ZHevLUCA; arc=none smtp.client-ip=157.90.84.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b="ZHevLUCA" Received: from wse-pc.fritz.box (i5C75F50F.versanet.de [92.117.245.15]) (Authenticated sender: wse@tuxedocomputers.com) by mail.tuxedocomputers.com (Postfix) with ESMTPA id 5EDEA2FC0219; Tue, 24 Mar 2026 21:34:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxedocomputers.com; s=default; t=1774384458; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9KbxUO0FX3zZS7w/BleYrxDeFt1SU62P42wYkxct2yc=; b=ZHevLUCAQ54DCxl/g0I1zHIB11pXAqyM4hyTV7Ju9qlpXQTQEKgoy91hfKwRbBwpbGtYjA aJI5OQhQdDteTonLLcVDL/DkVAuIZNU+phwJRN/qXLQq/lJwAICrrYVxzmy1FVsN0eyHic nwGVYLFbbQ/gtlzRXzvx2Wn1s6ogz/8= Authentication-Results: mail.tuxedocomputers.com; auth=pass smtp.auth=wse@tuxedocomputers.com smtp.mailfrom=wse@tuxedocomputers.com From: Werner Sembach To: W_Armin@gmx.de, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Werner Sembach Subject: [PATCH v8 2/5] platform/x86: uniwill-laptop: Implement USB-C power priority setting Date: Tue, 24 Mar 2026 21:32:09 +0100 Message-ID: <20260324203413.454361-3-wse@tuxedocomputers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260324203413.454361-1-wse@tuxedocomputers.com> References: <20260324203413.454361-1-wse@tuxedocomputers.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On some devices Uniwill offers the option to set the USB-C port to prioritise charging or performance. This patch exposes this setting to the userspace via sysfs for all TUXEDO devices supporting it. Reviewed-by: Armin Wolf Signed-off-by: Werner Sembach --- drivers/platform/x86/uniwill/uniwill-acpi.c | 145 +++++++++++++++++++- 1 file changed, 138 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 048b265bff374..48bdf43b4cb53 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -266,8 +266,8 @@ #define BATTERY_CHARGE_FULL_OVER_24H BIT(3) #define BATTERY_ERM_STATUS_REACHED BIT(4) =20 -#define EC_ADDR_CHARGE_PRIO 0x07CC -#define CHARGING_PERFORMANCE BIT(7) +#define EC_ADDR_USB_C_POWER_PRIORITY 0x07CC +#define USB_C_POWER_PRIORITY BIT(7) =20 /* Same bits as EC_ADDR_LIGHTBAR_AC_CTRL except LIGHTBAR_S3_OFF */ #define EC_ADDR_LIGHTBAR_BAT_CTRL 0x07E2 @@ -324,6 +324,12 @@ #define UNIWILL_FEATURE_PRIMARY_FAN BIT(7) #define UNIWILL_FEATURE_SECONDARY_FAN BIT(8) #define UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL BIT(9) +#define UNIWILL_FEATURE_USB_C_POWER_PRIORITY BIT(10) + +enum usb_c_power_priority_options { + USB_C_POWER_PRIORITY_CHARGING =3D 0, + USB_C_POWER_PRIORITY_PERFORMANCE, +}; =20 struct uniwill_data { struct device *dev; @@ -343,6 +349,8 @@ struct uniwill_data { struct mutex input_lock; /* Protects input sequence during notify */ struct input_dev *input_device; struct notifier_block nb; + struct mutex usb_c_power_priority_lock; /* Protects dependent bit write a= nd state safe */ + enum usb_c_power_priority_options last_usb_c_power_priority_option; }; =20 struct uniwill_battery_entry { @@ -527,6 +535,7 @@ static bool uniwill_writeable_reg(struct device *dev, u= nsigned int reg) case EC_ADDR_CTGP_DB_CTGP_OFFSET: case EC_ADDR_CTGP_DB_TPP_OFFSET: case EC_ADDR_CTGP_DB_DB_OFFSET: + case EC_ADDR_USB_C_POWER_PRIORITY: return true; default: return false; @@ -565,6 +574,7 @@ static bool uniwill_readable_reg(struct device *dev, un= signed int reg) case EC_ADDR_CTGP_DB_CTGP_OFFSET: case EC_ADDR_CTGP_DB_TPP_OFFSET: case EC_ADDR_CTGP_DB_DB_OFFSET: + case EC_ADDR_USB_C_POWER_PRIORITY: return true; default: return false; @@ -587,6 +597,7 @@ static bool uniwill_volatile_reg(struct device *dev, un= signed int reg) case EC_ADDR_TRIGGER: case EC_ADDR_SWITCH_STATUS: case EC_ADDR_CHARGE_CTRL: + case EC_ADDR_USB_C_POWER_PRIORITY: return true; default: return false; @@ -883,6 +894,104 @@ static int uniwill_nvidia_ctgp_init(struct uniwill_da= ta *data) return 0; } =20 +static const char * const usb_c_power_priority_text[] =3D { + [USB_C_POWER_PRIORITY_CHARGING] =3D "charging", + [USB_C_POWER_PRIORITY_PERFORMANCE] =3D "performance", +}; + +static const u8 usb_c_power_priority_value[] =3D { + [USB_C_POWER_PRIORITY_CHARGING] =3D 0, + [USB_C_POWER_PRIORITY_PERFORMANCE] =3D USB_C_POWER_PRIORITY, +}; + +static ssize_t usb_c_power_priority_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct uniwill_data *data =3D dev_get_drvdata(dev); + enum usb_c_power_priority_options option; + unsigned int value; + int ret; + + option =3D sysfs_match_string(usb_c_power_priority_text, buf); + if (option < 0) + return option; + + value =3D usb_c_power_priority_value[option]; + + guard(mutex)(&data->usb_c_power_priority_lock); + + ret =3D regmap_update_bits(data->regmap, EC_ADDR_USB_C_POWER_PRIORITY, + USB_C_POWER_PRIORITY, value); + if (ret < 0) + return ret; + + data->last_usb_c_power_priority_option =3D option; + + return count; +} + +static ssize_t usb_c_power_priority_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct uniwill_data *data =3D dev_get_drvdata(dev); + unsigned int value; + int ret; + + ret =3D regmap_read(data->regmap, EC_ADDR_USB_C_POWER_PRIORITY, &value); + if (ret < 0) + return ret; + + value &=3D USB_C_POWER_PRIORITY; + + if (usb_c_power_priority_value[USB_C_POWER_PRIORITY_PERFORMANCE] =3D=3D v= alue) + return sysfs_emit(buf, "%s\n", + usb_c_power_priority_text[USB_C_POWER_PRIORITY_PERFORMANCE]); + + return sysfs_emit(buf, "%s\n", usb_c_power_priority_text[USB_C_POWER_PRIO= RITY_CHARGING]); +} + +static DEVICE_ATTR_RW(usb_c_power_priority); + +static int usb_c_power_priority_restore(struct uniwill_data *data) +{ + unsigned int value; + + value =3D usb_c_power_priority_value[data->last_usb_c_power_priority_opti= on]; + + guard(mutex)(&data->usb_c_power_priority_lock); + + return regmap_update_bits(data->regmap, EC_ADDR_USB_C_POWER_PRIORITY, + USB_C_POWER_PRIORITY, value); +} + +static int usb_c_power_priority_init(struct uniwill_data *data) +{ + unsigned int value; + int ret; + + if (!uniwill_device_supports(data, UNIWILL_FEATURE_USB_C_POWER_PRIORITY)) + return 0; + + ret =3D devm_mutex_init(data->dev, &data->usb_c_power_priority_lock); + if (ret < 0) + return ret; + + ret =3D regmap_read(data->regmap, EC_ADDR_USB_C_POWER_PRIORITY, &value); + if (ret < 0) + return ret; + + value &=3D USB_C_POWER_PRIORITY; + + data->last_usb_c_power_priority_option =3D + usb_c_power_priority_value[USB_C_POWER_PRIORITY_PERFORMANCE] =3D=3D valu= e ? + USB_C_POWER_PRIORITY_PERFORMANCE : + USB_C_POWER_PRIORITY_CHARGING; + + return 0; +} + static struct attribute *uniwill_attrs[] =3D { /* Keyboard-related */ &dev_attr_fn_lock.attr, @@ -893,6 +1002,7 @@ static struct attribute *uniwill_attrs[] =3D { &dev_attr_breathing_in_suspend.attr, /* Power-management-related */ &dev_attr_ctgp_offset.attr, + &dev_attr_usb_c_power_priority.attr, NULL }; =20 @@ -927,6 +1037,11 @@ static umode_t uniwill_attr_is_visible(struct kobject= *kobj, struct attribute *a return attr->mode; } =20 + if (attr =3D=3D &dev_attr_usb_c_power_priority.attr) { + if (uniwill_device_supports(data, UNIWILL_FEATURE_USB_C_POWER_PRIORITY)) + return attr->mode; + } + return 0; } =20 @@ -1417,11 +1532,10 @@ static int uniwill_notifier_call(struct notifier_bl= ock *nb, unsigned long action =20 return NOTIFY_OK; case UNIWILL_OSD_DC_ADAPTER_CHANGED: - /* noop for the time being, will change once charging priority - * gets implemented. - */ + if (!uniwill_device_supports(data, UNIWILL_FEATURE_USB_C_POWER_PRIORITY)) + return NOTIFY_DONE; =20 - return NOTIFY_OK; + return notifier_from_errno(usb_c_power_priority_restore(data)); case UNIWILL_OSD_FN_LOCK: if (!uniwill_device_supports(data, UNIWILL_FEATURE_FN_LOCK)) return NOTIFY_DONE; @@ -1515,6 +1629,7 @@ static int uniwill_probe(struct platform_device *pdev) return PTR_ERR(regmap); =20 data->regmap =3D regmap; + ret =3D devm_mutex_init(&pdev->dev, &data->super_key_lock); if (ret < 0) return ret; @@ -1552,6 +1667,10 @@ static int uniwill_probe(struct platform_device *pde= v) if (ret < 0) return ret; =20 + ret =3D usb_c_power_priority_init(data); + if (ret < 0) + return ret; + return uniwill_input_init(data); } =20 @@ -1681,6 +1800,14 @@ static int uniwill_resume_nvidia_ctgp(struct uniwill= _data *data) CTGP_DB_DB_ENABLE | CTGP_DB_CTGP_ENABLE); } =20 +static int uniwill_resume_usb_c_power_priority(struct uniwill_data *data) +{ + if (!uniwill_device_supports(data, UNIWILL_FEATURE_USB_C_POWER_PRIORITY)) + return 0; + + return usb_c_power_priority_restore(data); +} + static int uniwill_resume(struct device *dev) { struct uniwill_data *data =3D dev_get_drvdata(dev); @@ -1704,7 +1831,11 @@ static int uniwill_resume(struct device *dev) if (ret < 0) return ret; =20 - return uniwill_resume_nvidia_ctgp(data); + ret =3D uniwill_resume_nvidia_ctgp(data); + if (ret < 0) + return ret; + + return uniwill_resume_usb_c_power_priority(data); } =20 static DEFINE_SIMPLE_DEV_PM_OPS(uniwill_pm_ops, uniwill_suspend, uniwill_r= esume); --=20 2.43.0 From nobody Sun Apr 5 13:04:58 2026 Received: from mail.tuxedocomputers.com (mail.tuxedocomputers.com [157.90.84.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B90DC3537E2; Tue, 24 Mar 2026 20:34:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=157.90.84.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384462; cv=none; b=AEBokYDsNwKTFHN5Yr2e+x/Q4aDVpAhJ/V8wkgNu8Jf3mIpIP1hNUxmHL2vzWRO9oNGLmOG12yrSPKxbTMIEiSw1HWh/pEoV0UL9+Y0k1KHQzWda7I2qk9F1hL3K//Gwroii9SIZY9kLdupjO69U9Bkh00hHT0w5E2MhKnf7+Ok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384462; c=relaxed/simple; bh=pcSWU2h5Eud16nuxpC/dgPMONSEKPURb9HUJW6cg5Ag=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d9zOi0wNWOwWablW93IPK8XuZfE6yVtTmnMr0VRjyvaqwU/SL3UAkQIENnXZ+/jDEU0gRUZUJSqpfrreQu+5dC9EUKR4srURrtFxhIHYH+3VUEt43AhVSI58bvdD1Fegnc2WFoGjvmiqX9IuGBLnlHM8wJei6nOcC+1U+449YYc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com; spf=pass smtp.mailfrom=tuxedocomputers.com; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b=D4sEg2zP; arc=none smtp.client-ip=157.90.84.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b="D4sEg2zP" Received: from wse-pc.fritz.box (i5C75F50F.versanet.de [92.117.245.15]) (Authenticated sender: wse@tuxedocomputers.com) by mail.tuxedocomputers.com (Postfix) with ESMTPA id 2F6F22FC021A; Tue, 24 Mar 2026 21:34:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxedocomputers.com; s=default; t=1774384459; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PB1hS9Blflq2gmYz3+YmA5F29GJSPiadpVMA4Mnaykk=; b=D4sEg2zPum9vJVYWRpRRN2lf8MCcp6V766y7jv4xaJc/59+gaos42WuB0dryvtCrlAXJ1p g87+kTHOv+AkhXchN5G5bd/QFRrDIsjZx+rLiDxmBIJCaTDInDwC5WQv9LjJvj0nfdMlsg cGp8tPRLSaAD+wXl1NL3exc7LjYMUTA= Authentication-Results: mail.tuxedocomputers.com; auth=pass smtp.auth=wse@tuxedocomputers.com smtp.mailfrom=wse@tuxedocomputers.com From: Werner Sembach To: W_Armin@gmx.de, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Werner Sembach Subject: [PATCH v8 3/5] platform/x86: uniwill-laptop: Fix XMG Fusion 15 (L19) entries Date: Tue, 24 Mar 2026 21:32:10 +0100 Message-ID: <20260324203413.454361-4-wse@tuxedocomputers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260324203413.454361-1-wse@tuxedocomputers.com> References: <20260324203413.454361-1-wse@tuxedocomputers.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add alternative XMG Fusion system vendor name and clarify edition in ident. Reviewed-by: Armin Wolf Signed-off-by: Werner Sembach --- drivers/platform/x86/uniwill/uniwill-acpi.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 48bdf43b4cb53..0ead71d12d587 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -1911,7 +1911,7 @@ static struct uniwill_device_descriptor empty_descrip= tor __initdata =3D {}; =20 static const struct dmi_system_id uniwill_dmi_table[] __initconst =3D { { - .ident =3D "XMG FUSION 15", + .ident =3D "XMG FUSION 15 (L19)", .matches =3D { DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71A"), @@ -1919,13 +1919,29 @@ static const struct dmi_system_id uniwill_dmi_table= [] __initconst =3D { .driver_data =3D &empty_descriptor, }, { - .ident =3D "XMG FUSION 15", + .ident =3D "XMG FUSION 15 (L19)", .matches =3D { DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71B"), }, .driver_data =3D &empty_descriptor, }, + { + .ident =3D "XMG FUSION 15 (L19)", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71A"), + }, + .driver_data =3D &empty_descriptor, + }, + { + .ident =3D "XMG FUSION 15 (L19)", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71B"), + }, + .driver_data =3D &empty_descriptor, + }, { .ident =3D "Intel NUC x15", .matches =3D { --=20 2.43.0 From nobody Sun Apr 5 13:04:58 2026 Received: from mail.tuxedocomputers.com (mail.tuxedocomputers.com [157.90.84.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15098355803; Tue, 24 Mar 2026 20:34:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=157.90.84.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384464; cv=none; b=ZNx2gafudSDWV+744D30DADCcgpSNEpplQT4pz4sPIShu8kBu1RgGWZaA6iz5yNqNDStKtaBtX1gj3NTtCUznuXp0yn3CXaRGfPd+B8lrn/H04xZJHxV/Yh3ArZFCvOgWM+7EeenXOoo5d55SdSwD/4OKYf1o46mnVlCkjDLico= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384464; c=relaxed/simple; bh=zzheDzQsLOo0cGRutE0KLnqjqsjKh8p0pihAf4s1o4I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YRdZtv1dWbvibEnawJI4yQiToC2zMjYFRDv4YKw2wxX9yZtstPs8C3KKP+jH088ZOLU5XpZFEhsepW5CS5SokqJh+cnE203FBJwZVxHU5nQ4L25yfWOzRHJWS0zctOj/WHreP92kPQT1dCxgMxhMMkSbcv7EgDgwO9nJZLdLRms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com; spf=pass smtp.mailfrom=tuxedocomputers.com; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b=MVYGlZqO; arc=none smtp.client-ip=157.90.84.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b="MVYGlZqO" Received: from wse-pc.fritz.box (i5C75F50F.versanet.de [92.117.245.15]) (Authenticated sender: wse@tuxedocomputers.com) by mail.tuxedocomputers.com (Postfix) with ESMTPA id 7FA3A2FC021C; Tue, 24 Mar 2026 21:34:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxedocomputers.com; s=default; t=1774384460; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ACN5+XiiOi34+TlgcoxJ8yKLO8fXMnptH7V3Z795ZFw=; b=MVYGlZqO3/PK99D12zxE+H8wrN9wMgBjDMxZ5zSlkeB46u6x+4r/K+GH36wQ65dZ7Yi+eO x3yzYlASMjz3mWnaukOfOd1zCnAUChzB8EKwXmfC89+a2b+bj4O6uqElSL9H2xWmbmrzaf +cKUpzK9OXK717Spf1Wz425iM8utPN0= Authentication-Results: mail.tuxedocomputers.com; auth=pass smtp.auth=wse@tuxedocomputers.com smtp.mailfrom=wse@tuxedocomputers.com From: Werner Sembach To: W_Armin@gmx.de, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Werner Sembach Subject: [PATCH v8 4/5] platform/x86: uniwill-laptop: Apply features across all TUXEDO devices Date: Tue, 24 Mar 2026 21:32:11 +0100 Message-ID: <20260324203413.454361-5-wse@tuxedocomputers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260324203413.454361-1-wse@tuxedocomputers.com> References: <20260324203413.454361-1-wse@tuxedocomputers.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Uses the more fine granular and/or new feature defines to enable more features across the TUXEDO device lineup. Also adds features to TUXEDO devices that where already present in the driver, but not tested until now. Reviewed-by: Armin Wolf Signed-off-by: Werner Sembach --- drivers/platform/x86/uniwill/uniwill-acpi.c | 210 ++++++++++++++------ 1 file changed, 154 insertions(+), 56 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 0ead71d12d587..faade4cf08bec 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -110,6 +110,8 @@ #define EC_ADDR_BAT_CYCLE_COUNT_2 0x04A7 =20 #define EC_ADDR_PROJECT_ID 0x0740 +#define PROJECT_ID_PH4TRX1 0x12 +#define PROJECT_ID_PH6TRX1 0x15 =20 #define EC_ADDR_AP_OEM 0x0741 #define ENABLE_MANUAL_CTRL BIT(0) @@ -1861,6 +1863,15 @@ static struct platform_driver uniwill_driver =3D { .shutdown =3D uniwill_shutdown, }; =20 +static struct uniwill_device_descriptor lapqc71a_lapqc71b_descriptor __ini= tdata =3D { + .features =3D UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_BATTERY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN, +}; + static struct uniwill_device_descriptor lapac71h_descriptor __initdata =3D= { .features =3D UNIWILL_FEATURE_FN_LOCK | UNIWILL_FEATURE_SUPER_KEY | @@ -1884,6 +1895,85 @@ static struct uniwill_device_descriptor lapkc71f_des= criptor __initdata =3D { UNIWILL_FEATURE_SECONDARY_FAN, }; =20 +/* + * The featuresets below reflect somewhat chronological changes: + * 1 -> 2: UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL is added to the EC firmware. + * 2 -> 3: UNIWILL_FEATURE_USB_C_POWER_PRIORITY is removed from the EC fir= mware. + * Some devices might divert from this timeline. + */ + +static struct uniwill_device_descriptor tux_featureset_1_descriptor __init= data =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN | + UNIWILL_FEATURE_USB_C_POWER_PRIORITY, +}; + +static struct uniwill_device_descriptor tux_featureset_1_nvidia_descriptor= __initdata =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN | + UNIWILL_FEATURE_USB_C_POWER_PRIORITY, +}; + +static struct uniwill_device_descriptor tux_featureset_2_nvidia_descriptor= __initdata =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN | + UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL | + UNIWILL_FEATURE_USB_C_POWER_PRIORITY, +}; + +static struct uniwill_device_descriptor tux_featureset_3_descriptor __init= data =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN, +}; + +static struct uniwill_device_descriptor tux_featureset_3_nvidia_descriptor= __initdata =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN | + UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL, +}; + +static int phxtxx1_probe(struct uniwill_data *data) +{ + unsigned int value; + int ret; + + ret =3D regmap_read(data->regmap, EC_ADDR_PROJECT_ID, &value); + if (ret < 0) + return ret; + + if (value =3D=3D PROJECT_ID_PH4TRX1 || value =3D=3D PROJECT_ID_PH6TRX1) + data->features |=3D UNIWILL_FEATURE_SECONDARY_FAN; + + return 0; +}; + +static struct uniwill_device_descriptor phxtxx1_descriptor __initdata =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_USB_C_POWER_PRIORITY, + .probe =3D phxtxx1_probe, +}; + static int phxarx1_phxaqf1_probe(struct uniwill_data *data) { unsigned int value; @@ -1894,21 +1984,29 @@ static int phxarx1_phxaqf1_probe(struct uniwill_dat= a *data) return ret; =20 if (value & HAS_GPU) - data->features |=3D UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL; + data->features |=3D UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL; =20 return 0; }; =20 static struct uniwill_device_descriptor phxarx1_phxaqf1_descriptor __initd= ata =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN | + UNIWILL_FEATURE_USB_C_POWER_PRIORITY, .probe =3D phxarx1_phxaqf1_probe, }; =20 -static struct uniwill_device_descriptor tux_featureset_1_descriptor __init= data =3D { - .features =3D UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL, +static struct uniwill_device_descriptor pf5pu1g_descriptor __initdata =3D { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN, }; =20 -static struct uniwill_device_descriptor empty_descriptor __initdata =3D {}; - static const struct dmi_system_id uniwill_dmi_table[] __initconst =3D { { .ident =3D "XMG FUSION 15 (L19)", @@ -1916,7 +2014,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71A"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &lapqc71a_lapqc71b_descriptor, }, { .ident =3D "XMG FUSION 15 (L19)", @@ -1924,7 +2022,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71B"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &lapqc71a_lapqc71b_descriptor, }, { .ident =3D "XMG FUSION 15 (L19)", @@ -1932,7 +2030,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71A"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &lapqc71a_lapqc71b_descriptor, }, { .ident =3D "XMG FUSION 15 (L19)", @@ -1940,7 +2038,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "LAPQC71B"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &lapqc71a_lapqc71b_descriptor, }, { .ident =3D "Intel NUC x15", @@ -1964,7 +2062,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PHxTxX1"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &phxtxx1_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14 Gen6 Intel", @@ -1972,7 +2070,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PHxTQx1"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14/16 Gen7 Intel", @@ -1988,7 +2086,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PH6AG01_PH6AQ71_PH6AQI1"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14/16 Gen8 Intel/Commodore Omnia-Boo= k Pro Gen 8", @@ -1996,7 +2094,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PH4PRX1_PH6PRX1"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14 Gen8 Intel/Commodore Omnia-Book P= ro Gen 8", @@ -2004,7 +2102,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PH4PG31"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 16 Gen8 Intel", @@ -2012,7 +2110,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PH6PG01_PH6PG71"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14/15 Gen9 AMD", @@ -2020,7 +2118,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GXxHRXx"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14/15 Gen9 Intel/Commodore Omnia-Boo= k 15 Gen9", @@ -2028,7 +2126,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GXxMRXx"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14/15 Gen10 AMD", @@ -2036,7 +2134,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "XxHP4NAx"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 14/15 Gen10 AMD", @@ -2044,7 +2142,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "XxKK4NAx_XxSP4NAx"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_descriptor, }, { .ident =3D "TUXEDO InfinityBook Pro 15 Gen10 Intel", @@ -2052,7 +2150,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "XxAR4NAx"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_descriptor, }, { .ident =3D "TUXEDO InfinityBook Max 15 Gen10 AMD", @@ -2060,7 +2158,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X5KK45xS_X5SP45xS"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Max 16 Gen10 AMD", @@ -2068,7 +2166,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6HP45xU"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Max 16 Gen10 AMD", @@ -2076,7 +2174,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6KK45xU_X6SP45xU"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Max 15 Gen10 Intel", @@ -2084,7 +2182,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X5AR45xS"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO InfinityBook Max 16 Gen10 Intel", @@ -2092,7 +2190,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR55xU"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15 Gen1 AMD", @@ -2100,7 +2198,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1501A1650TI"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15 Gen1 AMD", @@ -2108,7 +2206,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1501A2060"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 17 Gen1 AMD", @@ -2116,7 +2214,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1701A1650TI"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 17 Gen1 AMD", @@ -2124,7 +2222,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1701A2060"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15 Gen1 Intel", @@ -2132,7 +2230,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1501I1650TI"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15 Gen1 Intel", @@ -2140,7 +2238,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1501I2060"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 17 Gen1 Intel", @@ -2148,7 +2246,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1701I1650TI"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 17 Gen1 Intel", @@ -2156,7 +2254,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "POLARIS1701I2060"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Trinity 15 Intel Gen1", @@ -2164,7 +2262,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "TRINITY1501I"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Trinity 17 Intel Gen1", @@ -2172,7 +2270,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "TRINITY1701I"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15/17 Gen2 AMD", @@ -2180,7 +2278,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxMGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15/17 Gen2 Intel", @@ -2188,7 +2286,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxNGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris/Polaris 15/17 Gen3 AMD", @@ -2196,7 +2294,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxZGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris/Polaris 15/17 Gen3 Intel", @@ -2204,7 +2302,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxTGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris/Polaris 15/17 Gen4 AMD", @@ -2212,7 +2310,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxRGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 15 Gen4 Intel", @@ -2220,7 +2318,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxAGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Polaris 15/17 Gen5 AMD", @@ -2228,7 +2326,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxXGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_2_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16 Gen5 AMD", @@ -2236,7 +2334,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GM6XGxX"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16/17 Gen5 Intel/Commodore ORION Gen 5", @@ -2244,7 +2342,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxPXxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris Slim 15 Gen6 AMD", @@ -2252,7 +2350,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GMxHGxx"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris Slim 15 Gen6 Intel/Commodore ORION Slim 15 = Gen6", @@ -2260,7 +2358,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GM5IXxA"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16 Gen6 Intel/Commodore ORION 16 Gen6", @@ -2268,7 +2366,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GM6IXxB_MB1"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16 Gen6 Intel/Commodore ORION 16 Gen6", @@ -2276,7 +2374,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GM6IXxB_MB2"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 17 Gen6 Intel/Commodore ORION 17 Gen6", @@ -2284,7 +2382,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "GM7IXxN"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16 Gen7 AMD", @@ -2292,7 +2390,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6FR5xxY"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16 Gen7 Intel", @@ -2300,7 +2398,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Stellaris 16 Gen7 Intel", @@ -2308,7 +2406,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "X6AR5xxY_mLED"), }, - .driver_data =3D &tux_featureset_1_descriptor, + .driver_data =3D &tux_featureset_3_nvidia_descriptor, }, { .ident =3D "TUXEDO Book BA15 Gen10 AMD", @@ -2316,7 +2414,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PF5PU1G"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &pf5pu1g_descriptor, }, { .ident =3D "TUXEDO Pulse 14 Gen1 AMD", @@ -2324,7 +2422,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PULSE1401"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_descriptor, }, { .ident =3D "TUXEDO Pulse 15 Gen1 AMD", @@ -2332,7 +2430,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PULSE1501"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_descriptor, }, { .ident =3D "TUXEDO Pulse 15 Gen2 AMD", @@ -2340,7 +2438,7 @@ static const struct dmi_system_id uniwill_dmi_table[]= __initconst =3D { DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "PF5LUXG"), }, - .driver_data =3D &empty_descriptor, + .driver_data =3D &tux_featureset_1_descriptor, }, { } }; --=20 2.43.0 From nobody Sun Apr 5 13:04:59 2026 Received: from mail.tuxedocomputers.com (mail.tuxedocomputers.com [157.90.84.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC6A33542CA; Tue, 24 Mar 2026 20:34:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=157.90.84.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384465; cv=none; b=k37fKq33Bma9a7QFBOTDeKgVNPR6cCCLRdHEhyWPdMR2FrGbM+C2tIhR96Mwd6fl5qAC0QXuvvKX8kKBU/RQcFas5EczZ8mV/5QPzD4700rPg9UhE+a6ozKpBKXYmcq2i+5S6Y4jMRTzHGi5k0M0dfk2Yq2oNCA+T8bZqGFA+sk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774384465; c=relaxed/simple; bh=CRREVjplAkICap862GvWTeXaQYznsU/vQpGHzLxBLxk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ez8lu6KBTMG4g/rka16h1mV8uUAlNV2jcnxZeC0i8wWATbH6CG7zkBYMF+AO+1e9STVyJott4IRzLUKQFhRDeMxYKacJ40itxULvpTSHraQ2F6U033AuYKadOdBUX0bVzG0PhKlvQsxu003PAWILZ4rwlQ2dML/4W2ljBXyXHaU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com; spf=pass smtp.mailfrom=tuxedocomputers.com; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b=a8UMsUrS; arc=none smtp.client-ip=157.90.84.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxedocomputers.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tuxedocomputers.com header.i=@tuxedocomputers.com header.b="a8UMsUrS" Received: from wse-pc.fritz.box (i5C75F50F.versanet.de [92.117.245.15]) (Authenticated sender: wse@tuxedocomputers.com) by mail.tuxedocomputers.com (Postfix) with ESMTPA id 83B672FC021B; Tue, 24 Mar 2026 21:34:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxedocomputers.com; s=default; t=1774384461; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bYqvdUXE/4S28rBVQPTYQ+KUMNQebFsGQnNWZLJBkC8=; b=a8UMsUrSD9LowBvu/TdTsD5DnvKtqCmi69KXhXp5j5JgzEwdXDUMweEsJyEJZNloU/Z7xu O5kO1NpB7h5dCgf9swOAMcrcprcfKjty5EUzCCYdKWTS8u/VmJv/zf1mpjVmxjzfMOObxJ RZVt4gEu+Q62JeJIuWeOarqeKXlKpaw= Authentication-Results: mail.tuxedocomputers.com; auth=pass smtp.auth=wse@tuxedocomputers.com smtp.mailfrom=wse@tuxedocomputers.com From: Werner Sembach To: W_Armin@gmx.de, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, Jonathan Corbet , Shuah Khan Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Werner Sembach , linux-doc@vger.kernel.org Subject: [PATCH v8 5/5] Documentation: laptops: Update documentation for uniwill laptops Date: Tue, 24 Mar 2026 21:32:12 +0100 Message-ID: <20260324203413.454361-6-wse@tuxedocomputers.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260324203413.454361-1-wse@tuxedocomputers.com> References: <20260324203413.454361-1-wse@tuxedocomputers.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Adds short description for two new sysfs entries, ctgp_offset and usb_c_power_priority, to the documentation of uniwill laptops. Reviewed-by: Armin Wolf Reviewed-by: Shuah Khan Signed-off-by: Werner Sembach --- .../ABI/testing/sysfs-driver-uniwill-laptop | 27 +++++++++++++++++++ .../admin-guide/laptops/uniwill-laptop.rst | 12 +++++++++ 2 files changed, 39 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop b/Docume= ntation/ABI/testing/sysfs-driver-uniwill-laptop index 2df70792968f3..2397c65c969a6 100644 --- a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop +++ b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop @@ -51,3 +51,30 @@ Description: =20 Reading this file returns the current status of the breathing animation functionality. + +What: /sys/bus/platform/devices/INOU0000:XX/ctgp_offset +Date: January 2026 +KernelVersion: 7.0 +Contact: Werner Sembach +Description: + Allows userspace applications to set the configurable TGP offset on top = of the base + TGP. Base TGP and max TGP and therefore the max cTGP offset are device s= pecific. + Note that setting the maximum cTGP leaves no window open for Dynamic Boo= st as + Dynamic Boost also can not go over max TGP. Setting the cTGP to maximum = is + effectively disabling Dynamic Boost and telling the device to always pri= oritize the + GPU over the CPU. + + Reading this file returns the current configurable TGP offset. + +What: /sys/bus/platform/devices/INOU0000:XX/usb_c_power_priority +Date: February 2026 +KernelVersion: 7.1 +Contact: Werner Sembach +Description: + Allows userspace applications to choose the USB-C power distribution pro= file between + one that offers a bigger share of the power to the battery and one that = offers more + of it to the CPU. Writing "charging"/"performance" into this file select= s the + respective profile. + + Reading this file returns the profile names with the currently active on= e in + brackets. diff --git a/Documentation/admin-guide/laptops/uniwill-laptop.rst b/Documen= tation/admin-guide/laptops/uniwill-laptop.rst index aff5f57a6bd47..561334865feb7 100644 --- a/Documentation/admin-guide/laptops/uniwill-laptop.rst +++ b/Documentation/admin-guide/laptops/uniwill-laptop.rst @@ -50,6 +50,10 @@ between 1 and 100 percent are supported. Additionally the driver signals the presence of battery charging issues th= rough the standard ``health`` power supply sysfs attribute. =20 +It also lets you set whether a USB-C power source should prioritise chargi= ng the battery or +delivering immediate power to the cpu. See Documentation/ABI/testing/sysfs= -driver-uniwill-laptop for +details. + Lightbar -------- =20 @@ -58,3 +62,11 @@ LED class device. The default name of this LED class dev= ice is ``uniwill:multico =20 See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details on h= ow to control the various animation modes of the lightbar. + +Configurable TGP +---------------- + +The ``uniwill-laptop`` driver allows to set the configurable TGP for devic= es with NVIDIA GPUs that +allow it. + +See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details. --=20 2.43.0