From nobody Mon Feb 9 01:12:48 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0BE530505D; Wed, 15 Oct 2025 19:26:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556369; cv=none; b=UQJ10tng/NupSNyU+LivR0ygczSUUNIOwVi61gO6goPtyRPx3s9uPywOw7Qjbv6iSjGgYzdnrE0zKMqdq9lrXGeexGUcxsrzv1uoasG6qnQ6JijvuFSyrGl0w8XTHb5SeQCQuI/qi/yR6cGYbWXMOJJApO1UDWH+8ynUhpFnnhY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556369; c=relaxed/simple; bh=hjTh311Qfr8tYVMrGxn32+h/yy8kPpKZFgf0trqOPf8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NUkOjTZjDjhES/MTzb4N9CqVgbjYPVyiTatLx/E68hoDpmDDa1fF/SLVe8TsRp2LJfKoWXOJbw8T7/g35psd9GELurLeZ2fuEhZOJP0vIVcUab0Z7PsJJ5Kv+nnZxN9KJgkgVwehGG6jpMpq4p2+GfDk5KOkaR6c3f1yyPnRDmU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=a6OAHrPr; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="a6OAHrPr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760556364; x=1761161164; i=w_armin@gmx.de; bh=pWl1cLsmVfQr45d0VYdIOGnSN1VqB+3Sdwaikk//r8Y=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=a6OAHrPrgtt7loMhT00GR3Gzp8JurxbsJZ1DzOdKC7FqtPymwoWGnHzoU+oOPf/D 17VV5CQ/NZMdjRt4wWLjV2q9d8QNdYXyw8qjjHabx/kZQFXSsGQcdvx1renpnygBr 0Sh4FIG7w0SN9PdUCwN9p/sDV26Z8uGYHwsogOSrRC5PTvYD8M5vZMpkjxBtDvsxB U/KQcB4e/KRBZIOu7cLRURHsYhscGdzdi84lFnrDe0pto2qvgCSzyGGt67eLZk97/ Yx6XEy1PNWr3aKhIy7QEiXPc0MxEkcWliNACM9LUdYs3nKD95DTA43nLfEFQ9T8k0 YdajiePC27fLQ9X7lA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M4s0j-1v7Bal26jP-005vBe; Wed, 15 Oct 2025 21:26:04 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@gmail.com, faiz.faadhillah@gmail.com, rayanmargham4@gmail.com Cc: kuurtb@gmail.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/4] platform/x86: acer-wmi: Fix setting of fan behavior Date: Wed, 15 Oct 2025 21:25:48 +0200 Message-Id: <20251015192551.321200-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251015192551.321200-1-W_Armin@gmx.de> References: <20251015192551.321200-1-W_Armin@gmx.de> 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 X-Provags-ID: V03:K1:otBH/UaF05REwDZAX+nHd7tH5r9IDD/lvvba2AJJyWIhE6Qx94A jzrqI2/bczR56NUNhjXvcb1YyHMv0GNvImvjmfsOyPFce/yR/wpWmpTdmtbLXMRq3ra1KvP UTY9vifbnE/pRn/A8guaevmb5CLn4qHCmGbDjYjOw8PjShw/zNQRVZFl6gRUv88oJXPfi+v 8GFcqf4GS9Ewe5eOTUYPw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:xQFTwUoQv1g=;Cuv7cRhTczTGKyecSqeoeT2soZG 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 Content-Type: text/plain; charset="utf-8" After studying the linuwu_sense driver (https://github.com/0x7375646F/Linuwu-Sense) i was able to understand the meaning of the SetGamingFanBehavior() WMI method: - the first 16-bit are a bitmap of all fans affected by a fan behavior change request. - the next 8 bits contain four fan mode fields (2-bit), each being associated with a bit inside the fan bitmap. There are three fan modes: auto, turbo and custom. Use this newfound knowledge to fix the turbo fan handling by setting the correct bits before calling SetGamingFanBehavior(). Also check the result of the WMI method call and return an error should the ACPI firmware signal failure. Reviewed-by: Kurt Borja Signed-off-by: Armin Wolf --- drivers/platform/x86/acer-wmi.c | 73 +++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 22 deletions(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wm= i.c index 13eb22b35aa8..e24233f6e055 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -68,10 +68,18 @@ MODULE_LICENSE("GPL"); #define ACER_WMID_SET_GAMING_LED_METHODID 2 #define ACER_WMID_GET_GAMING_LED_METHODID 4 #define ACER_WMID_GET_GAMING_SYS_INFO_METHODID 5 -#define ACER_WMID_SET_GAMING_FAN_BEHAVIOR 14 +#define ACER_WMID_SET_GAMING_FAN_BEHAVIOR_METHODID 14 #define ACER_WMID_SET_GAMING_MISC_SETTING_METHODID 22 #define ACER_WMID_GET_GAMING_MISC_SETTING_METHODID 23 =20 +#define ACER_GAMING_FAN_BEHAVIOR_CPU BIT(0) +#define ACER_GAMING_FAN_BEHAVIOR_GPU BIT(3) + +#define ACER_GAMING_FAN_BEHAVIOR_STATUS_MASK GENMASK_ULL(7, 0) +#define ACER_GAMING_FAN_BEHAVIOR_ID_MASK GENMASK_ULL(15, 0) +#define ACER_GAMING_FAN_BEHAVIOR_SET_CPU_MODE_MASK GENMASK(17, 16) +#define ACER_GAMING_FAN_BEHAVIOR_SET_GPU_MODE_MASK GENMASK(23, 22) + #define ACER_GAMING_MISC_SETTING_STATUS_MASK GENMASK_ULL(7, 0) #define ACER_GAMING_MISC_SETTING_INDEX_MASK GENMASK_ULL(7, 0) #define ACER_GAMING_MISC_SETTING_VALUE_MASK GENMASK_ULL(15, 8) @@ -121,6 +129,12 @@ enum acer_wmi_predator_v4_sensor_id { ACER_WMID_SENSOR_GPU_TEMPERATURE =3D 0x0A, }; =20 +enum acer_wmi_gaming_fan_mode { + ACER_WMID_FAN_MODE_AUTO =3D 0x01, + ACER_WMID_FAN_MODE_TURBO =3D 0x02, + ACER_WMID_FAN_MODE_CUSTOM =3D 0x03, +}; + enum acer_wmi_predator_v4_oc { ACER_WMID_OC_NORMAL =3D 0x0000, ACER_WMID_OC_TURBO =3D 0x0002, @@ -1563,9 +1577,6 @@ static acpi_status WMID_gaming_set_u64(u64 value, u32= cap) case ACER_CAP_TURBO_LED: method_id =3D ACER_WMID_SET_GAMING_LED_METHODID; break; - case ACER_CAP_TURBO_FAN: - method_id =3D ACER_WMID_SET_GAMING_FAN_BEHAVIOR; - break; default: return AE_BAD_PARAMETER; } @@ -1616,25 +1627,43 @@ static int WMID_gaming_get_sys_info(u32 command, u6= 4 *out) return 0; } =20 -static void WMID_gaming_set_fan_mode(u8 fan_mode) +static int WMID_gaming_set_fan_behavior(u16 fan_bitmap, enum acer_wmi_gami= ng_fan_mode mode) { - /* fan_mode =3D 1 is used for auto, fan_mode =3D 2 used for turbo*/ - u64 gpu_fan_config1 =3D 0, gpu_fan_config2 =3D 0; - int i; + acpi_status status; + u64 input =3D 0; + u64 result; + + input |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_ID_MASK, fan_bitmap); + + if (fan_bitmap & ACER_GAMING_FAN_BEHAVIOR_CPU) + input |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_SET_CPU_MODE_MASK, mode); + + if (fan_bitmap & ACER_GAMING_FAN_BEHAVIOR_CPU) + input |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_SET_GPU_MODE_MASK, mode); + + status =3D WMI_gaming_execute_u64(ACER_WMID_SET_GAMING_FAN_BEHAVIOR_METHO= DID, input, + &result); + if (ACPI_FAILURE(status)) + return -EIO; + + /* The return status must be zero for the operation to have succeeded */ + if (FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_STATUS_MASK, result)) + return -EIO; + + return 0; +} + +static void WMID_gaming_set_fan_mode(enum acer_wmi_gaming_fan_mode mode) +{ + u16 fan_bitmap =3D 0; =20 if (quirks->cpu_fans > 0) - gpu_fan_config2 |=3D 1; - for (i =3D 0; i < (quirks->cpu_fans + quirks->gpu_fans); ++i) - gpu_fan_config2 |=3D 1 << (i + 1); - for (i =3D 0; i < quirks->gpu_fans; ++i) - gpu_fan_config2 |=3D 1 << (i + 3); - if (quirks->cpu_fans > 0) - gpu_fan_config1 |=3D fan_mode; - for (i =3D 0; i < (quirks->cpu_fans + quirks->gpu_fans); ++i) - gpu_fan_config1 |=3D fan_mode << (2 * i + 2); - for (i =3D 0; i < quirks->gpu_fans; ++i) - gpu_fan_config1 |=3D fan_mode << (2 * i + 6); - WMID_gaming_set_u64(gpu_fan_config2 | gpu_fan_config1 << 16, ACER_CAP_TUR= BO_FAN); + fan_bitmap |=3D ACER_GAMING_FAN_BEHAVIOR_CPU; + + if (quirks->gpu_fans > 0) + fan_bitmap |=3D ACER_GAMING_FAN_BEHAVIOR_GPU; + + WMID_gaming_set_fan_behavior(fan_bitmap, mode); } =20 static int WMID_gaming_set_misc_setting(enum acer_wmi_gaming_misc_setting = setting, u8 value) @@ -1921,7 +1950,7 @@ static int acer_toggle_turbo(void) WMID_gaming_set_u64(0x1, ACER_CAP_TURBO_LED); =20 /* Set FAN mode to auto */ - WMID_gaming_set_fan_mode(0x1); + WMID_gaming_set_fan_mode(ACER_WMID_FAN_MODE_AUTO); =20 /* Set OC to normal */ if (has_cap(ACER_CAP_TURBO_OC)) { @@ -1935,7 +1964,7 @@ static int acer_toggle_turbo(void) WMID_gaming_set_u64(0x10001, ACER_CAP_TURBO_LED); =20 /* Set FAN mode to turbo */ - WMID_gaming_set_fan_mode(0x2); + WMID_gaming_set_fan_mode(ACER_WMID_FAN_MODE_TURBO); =20 /* Set OC to turbo mode */ if (has_cap(ACER_CAP_TURBO_OC)) { --=20 2.39.5 From nobody Mon Feb 9 01:12:48 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFC7230CDA0; Wed, 15 Oct 2025 19:26:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556372; cv=none; b=nk9/TWLc2ST6FL1wPYqG1pEp5jrItu3VGhATMN140w8OCe6H5BnzHrcrJBndMgOB/fkYNMiF4HEsIxi588uIAhbS7IJaCayQzpOwwdyu078E8D0PYWr4WiZMoldND5rANh5CGNlg7P2ubpew2tWIbWK9n4d06yLgqbQmbdZ+23E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556372; c=relaxed/simple; bh=BeVutDlmHfyEgq29MHh/eG0rhBXlQg6FhLUHmKlvP9c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FJjbZ84nIB8vIzdbLoytWjN+P0MOpOa6aszN1ngw9oDl4JuokNY33xif6hhHihH5nMchLsIHE9GgKBHQOjA00UvjzDQhCrdk1RmBoL47spjjVvOmZ28HIIeIYjAmN7t+DxJaQz1rRbQPTGGFmiwJ24Xz0JPFeRHUO+0+NMJRvak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=Xrfh6hU4; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="Xrfh6hU4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760556366; x=1761161166; i=w_armin@gmx.de; bh=8x++w5kKtkb5L638igKLwgbhTTNSnMUOsVRa1Fazw3Y=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=Xrfh6hU48/b7VYsoOxSt+pelwWqm1FKU1mzl8skw4CTuYLBZXrsKriWQSTCscUnX qvK4lJbuPfWcgU9o/+lOouTtqzWNdtwgAkPgTXEr1d1PPoW4QxANYLHyIxfKjYrCR XAifgYspgAcdCckBCmzd7vWQ/DDYlIVh6oeBGI/PZTTimnYmt7GSCTNDDC9yXZPxF MLw9vqGeNXy8rNTEznspm34d2ZrHtHLDz2Ycxh0YF47f1tU5RIAYdkUPDLjVE66FU yjPRTmb3iP6CG/iVIH8uYfon/fB18V63mo7Qbdg0DKwEtnd2vqEQrdSC3pG3Y4CDU RisimBXqUkMM+049XA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MgNh7-1ua2hV342h-00cdJZ; Wed, 15 Oct 2025 21:26:06 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@gmail.com, faiz.faadhillah@gmail.com, rayanmargham4@gmail.com Cc: kuurtb@gmail.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/4] platform/x86: acer-wmi: Add fan control support Date: Wed, 15 Oct 2025 21:25:49 +0200 Message-Id: <20251015192551.321200-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251015192551.321200-1-W_Armin@gmx.de> References: <20251015192551.321200-1-W_Armin@gmx.de> 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 X-Provags-ID: V03:K1:zF6fSZK5c7p1EJst8KtnjLkefDzW307A/aW0RBHsbT171lcgjgr Tc1skzdh62pYiGJrEs/Z83Ip1VbNpPlfltq+LZJe7U8oDl7+0yPokfOix2IyYxJ2pEtnRnf V2Mqa1gfOEYQA/kyOq7PJhfkG0RKfSDbVdKyvGg5f2ISzB7W/kcCrkDWRGS9gL8aDeDdRu3 0lLDNb2MFJJNfyNSYfK4g== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:xFt8Ph7DB+Y=;cxgYTafd4Yny7+vtQAEqqmw6Wmg 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 PjBELjfbkxVvoPajs= Content-Type: text/plain; charset="utf-8" Add support for controlling the fan speed using the SetGamingFanSpeed() and GetGamingFanSpeed() WMI methods. This feature is only enabled if the machine has ACER_CAP_PWM enabled and depend on ACER_CAP_HWMON for detecting the number of available fans. Reviewed-by: Kurt Borja Signed-off-by: Armin Wolf --- drivers/platform/x86/acer-wmi.c | 208 +++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wm= i.c index e24233f6e055..4a408693379b 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -12,10 +12,12 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 #include +#include #include #include #include #include +#include #include #include #include @@ -69,6 +71,9 @@ MODULE_LICENSE("GPL"); #define ACER_WMID_GET_GAMING_LED_METHODID 4 #define ACER_WMID_GET_GAMING_SYS_INFO_METHODID 5 #define ACER_WMID_SET_GAMING_FAN_BEHAVIOR_METHODID 14 +#define ACER_WMID_GET_GAMING_FAN_BEHAVIOR_METHODID 15 +#define ACER_WMID_SET_GAMING_FAN_SPEED_METHODID 16 +#define ACER_WMID_GET_GAMING_FAN_SPEED_METHODID 17 #define ACER_WMID_SET_GAMING_MISC_SETTING_METHODID 22 #define ACER_WMID_GET_GAMING_MISC_SETTING_METHODID 23 =20 @@ -79,6 +84,12 @@ MODULE_LICENSE("GPL"); #define ACER_GAMING_FAN_BEHAVIOR_ID_MASK GENMASK_ULL(15, 0) #define ACER_GAMING_FAN_BEHAVIOR_SET_CPU_MODE_MASK GENMASK(17, 16) #define ACER_GAMING_FAN_BEHAVIOR_SET_GPU_MODE_MASK GENMASK(23, 22) +#define ACER_GAMING_FAN_BEHAVIOR_GET_CPU_MODE_MASK GENMASK(9, 8) +#define ACER_GAMING_FAN_BEHAVIOR_GET_GPU_MODE_MASK GENMASK(15, 14) + +#define ACER_GAMING_FAN_SPEED_STATUS_MASK GENMASK_ULL(7, 0) +#define ACER_GAMING_FAN_SPEED_ID_MASK GENMASK_ULL(7, 0) +#define ACER_GAMING_FAN_SPEED_VALUE_MASK GENMASK_ULL(15, 8) =20 #define ACER_GAMING_MISC_SETTING_STATUS_MASK GENMASK_ULL(7, 0) #define ACER_GAMING_MISC_SETTING_INDEX_MASK GENMASK_ULL(7, 0) @@ -129,6 +140,11 @@ enum acer_wmi_predator_v4_sensor_id { ACER_WMID_SENSOR_GPU_TEMPERATURE =3D 0x0A, }; =20 +enum acer_wmi_gaming_fan_id { + ACER_WMID_CPU_FAN =3D 0x01, + ACER_WMID_GPU_FAN =3D 0x04, +}; + enum acer_wmi_gaming_fan_mode { ACER_WMID_FAN_MODE_AUTO =3D 0x01, ACER_WMID_FAN_MODE_TURBO =3D 0x02, @@ -292,6 +308,7 @@ struct hotkey_function_type_aa { #define ACER_CAP_TURBO_FAN BIT(9) #define ACER_CAP_PLATFORM_PROFILE BIT(10) #define ACER_CAP_HWMON BIT(11) +#define ACER_CAP_PWM BIT(12) =20 /* * Interface type flags @@ -386,6 +403,7 @@ struct quirk_entry { u8 cpu_fans; u8 gpu_fans; u8 predator_v4; + u8 pwm; }; =20 static struct quirk_entry *quirks; @@ -405,6 +423,9 @@ static void __init set_quirks(void) if (quirks->predator_v4) interface->capability |=3D ACER_CAP_PLATFORM_PROFILE | ACER_CAP_HWMON; + + if (quirks->pwm) + interface->capability |=3D ACER_CAP_PWM; } =20 static int __init dmi_matched(const struct dmi_system_id *dmi) @@ -1653,6 +1674,41 @@ static int WMID_gaming_set_fan_behavior(u16 fan_bitm= ap, enum acer_wmi_gaming_fan return 0; } =20 +static int WMID_gaming_get_fan_behavior(u16 fan_bitmap, enum acer_wmi_gami= ng_fan_mode *mode) +{ + acpi_status status; + u32 input =3D 0; + u64 result; + int value; + + input |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_ID_MASK, fan_bitmap); + status =3D WMI_gaming_execute_u32_u64(ACER_WMID_GET_GAMING_FAN_BEHAVIOR_M= ETHODID, input, + &result); + if (ACPI_FAILURE(status)) + return -EIO; + + /* The return status must be zero for the operation to have succeeded */ + if (FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_STATUS_MASK, result)) + return -EIO; + + /* Theoretically multiple fans can be specified, but this is currently un= used */ + if (fan_bitmap & ACER_GAMING_FAN_BEHAVIOR_CPU) { + value =3D FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_GET_CPU_MODE_MASK, result); + } else { + if (fan_bitmap & ACER_GAMING_FAN_BEHAVIOR_GPU) + value =3D FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_GET_GPU_MODE_MASK, result); + else + return -EINVAL; + } + + if (value < ACER_WMID_FAN_MODE_AUTO || value > ACER_WMID_FAN_MODE_CUSTOM) + return -ENXIO; + + *mode =3D value; + + return 0; +} + static void WMID_gaming_set_fan_mode(enum acer_wmi_gaming_fan_mode mode) { u16 fan_bitmap =3D 0; @@ -1666,6 +1722,55 @@ static void WMID_gaming_set_fan_mode(enum acer_wmi_g= aming_fan_mode mode) WMID_gaming_set_fan_behavior(fan_bitmap, mode); } =20 +static int WMID_gaming_set_gaming_fan_speed(u8 fan, u8 speed) +{ + acpi_status status; + u64 input =3D 0; + u64 result; + + if (speed > 100) + return -EINVAL; + + input |=3D FIELD_PREP(ACER_GAMING_FAN_SPEED_ID_MASK, fan); + input |=3D FIELD_PREP(ACER_GAMING_FAN_SPEED_VALUE_MASK, speed); + + status =3D WMI_gaming_execute_u64(ACER_WMID_SET_GAMING_FAN_SPEED_METHODID= , input, &result); + if (ACPI_FAILURE(status)) + return -EIO; + + switch (FIELD_GET(ACER_GAMING_FAN_SPEED_STATUS_MASK, result)) { + case 0x00: + return 0; + case 0x01: + return -ENODEV; + case 0x02: + return -EINVAL; + default: + return -ENXIO; + } +} + +static int WMID_gaming_get_gaming_fan_speed(u8 fan, u8 *speed) +{ + acpi_status status; + u32 input =3D 0; + u64 result; + + input |=3D FIELD_PREP(ACER_GAMING_FAN_SPEED_ID_MASK, fan); + + status =3D WMI_gaming_execute_u32_u64(ACER_WMID_GET_GAMING_FAN_SPEED_METH= ODID, input, + &result); + if (ACPI_FAILURE(status)) + return -EIO; + + if (FIELD_GET(ACER_GAMING_FAN_SPEED_STATUS_MASK, result)) + return -ENODEV; + + *speed =3D FIELD_GET(ACER_GAMING_FAN_SPEED_VALUE_MASK, result); + + return 0; +} + static int WMID_gaming_set_misc_setting(enum acer_wmi_gaming_misc_setting = setting, u8 value) { acpi_status status; @@ -2792,6 +2897,16 @@ static const enum acer_wmi_predator_v4_sensor_id ace= r_wmi_fan_channel_to_sensor_ [1] =3D ACER_WMID_SENSOR_GPU_FAN_SPEED, }; =20 +static const enum acer_wmi_gaming_fan_id acer_wmi_fan_channel_to_fan_id[] = =3D { + [0] =3D ACER_WMID_CPU_FAN, + [1] =3D ACER_WMID_GPU_FAN, +}; + +static const u16 acer_wmi_fan_channel_to_fan_bitmap[] =3D { + [0] =3D ACER_GAMING_FAN_BEHAVIOR_CPU, + [1] =3D ACER_GAMING_FAN_BEHAVIOR_GPU, +}; + static umode_t acer_wmi_hwmon_is_visible(const void *data, enum hwmon_sensor_types type, u32 attr, int channel) @@ -2803,6 +2918,11 @@ static umode_t acer_wmi_hwmon_is_visible(const void = *data, case hwmon_temp: sensor_id =3D acer_wmi_temp_channel_to_sensor_id[channel]; break; + case hwmon_pwm: + if (!has_cap(ACER_CAP_PWM)) + return 0; + + fallthrough; case hwmon_fan: sensor_id =3D acer_wmi_fan_channel_to_sensor_id[channel]; break; @@ -2810,8 +2930,12 @@ static umode_t acer_wmi_hwmon_is_visible(const void = *data, return 0; } =20 - if (*supported_sensors & BIT(sensor_id - 1)) + if (*supported_sensors & BIT(sensor_id - 1)) { + if (type =3D=3D hwmon_pwm) + return 0644; + return 0444; + } =20 return 0; } @@ -2820,6 +2944,9 @@ static int acer_wmi_hwmon_read(struct device *dev, en= um hwmon_sensor_types type, u32 attr, int channel, long *val) { u64 command =3D ACER_WMID_CMD_GET_PREDATOR_V4_SENSOR_READING; + enum acer_wmi_gaming_fan_mode mode; + u16 fan_bitmap; + u8 fan, speed; u64 result; int ret; =20 @@ -2845,6 +2972,80 @@ static int acer_wmi_hwmon_read(struct device *dev, e= num hwmon_sensor_types type, =20 *val =3D FIELD_GET(ACER_PREDATOR_V4_SENSOR_READING_BIT_MASK, result); return 0; + case hwmon_pwm: + switch (attr) { + case hwmon_pwm_input: + fan =3D acer_wmi_fan_channel_to_fan_id[channel]; + ret =3D WMID_gaming_get_gaming_fan_speed(fan, &speed); + if (ret < 0) + return ret; + + *val =3D fixp_linear_interpolate(0, 0, 100, U8_MAX, speed); + return 0; + case hwmon_pwm_enable: + fan_bitmap =3D acer_wmi_fan_channel_to_fan_bitmap[channel]; + ret =3D WMID_gaming_get_fan_behavior(fan_bitmap, &mode); + if (ret < 0) + return ret; + + switch (mode) { + case ACER_WMID_FAN_MODE_AUTO: + *val =3D 2; + return 0; + case ACER_WMID_FAN_MODE_TURBO: + *val =3D 0; + return 0; + case ACER_WMID_FAN_MODE_CUSTOM: + *val =3D 1; + return 0; + default: + return -ENXIO; + } + default: + return -EOPNOTSUPP; + } + default: + return -EOPNOTSUPP; + } +} + +static int acer_wmi_hwmon_write(struct device *dev, enum hwmon_sensor_type= s type, + u32 attr, int channel, long val) +{ + enum acer_wmi_gaming_fan_mode mode; + u16 fan_bitmap; + u8 fan, speed; + + switch (type) { + case hwmon_pwm: + switch (attr) { + case hwmon_pwm_input: + fan =3D acer_wmi_fan_channel_to_fan_id[channel]; + speed =3D fixp_linear_interpolate(0, 0, U8_MAX, 100, + clamp_val(val, 0, U8_MAX)); + + return WMID_gaming_set_gaming_fan_speed(fan, speed); + case hwmon_pwm_enable: + fan_bitmap =3D acer_wmi_fan_channel_to_fan_bitmap[channel]; + + switch (val) { + case 0: + mode =3D ACER_WMID_FAN_MODE_TURBO; + break; + case 1: + mode =3D ACER_WMID_FAN_MODE_CUSTOM; + break; + case 2: + mode =3D ACER_WMID_FAN_MODE_AUTO; + break; + default: + return -EINVAL; + } + + return WMID_gaming_set_fan_behavior(fan_bitmap, mode); + default: + return -EOPNOTSUPP; + } default: return -EOPNOTSUPP; } @@ -2860,11 +3061,16 @@ static const struct hwmon_channel_info *const acer_= wmi_hwmon_info[] =3D { HWMON_F_INPUT, HWMON_F_INPUT ), + HWMON_CHANNEL_INFO(pwm, + HWMON_PWM_INPUT | HWMON_PWM_ENABLE, + HWMON_PWM_INPUT | HWMON_PWM_ENABLE + ), NULL }; =20 static const struct hwmon_ops acer_wmi_hwmon_ops =3D { .read =3D acer_wmi_hwmon_read, + .write =3D acer_wmi_hwmon_write, .is_visible =3D acer_wmi_hwmon_is_visible, }; =20 --=20 2.39.5 From nobody Mon Feb 9 01:12:48 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C752D30E0F5; Wed, 15 Oct 2025 19:26:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556376; cv=none; b=fRKBvoac3x3VhDCCwbxT+64tol7XU2bcOHv2H8R9LwyNrKoM+4O+vSU6rIKxktaorQqhxMJJVn+2yeOMzXA9k4a8QUX+lQ+QXmKhKFJcfYFq1kg+YTasUlpEfUDsFtk79us2PWKG1Nnuz+zVRGCXOMw9dt1UEhUP1Yke/D7blEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556376; c=relaxed/simple; bh=0VeY5uZj9Vw0jPZ/wxa6y8pDmM8f/8gA67rr+yivvH8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=E92QvrDg+ZkdoofYG3PWKfUAcOAq1paklnmU24I2QZ/9KsZYW+8yO2qm3BmtnptQL5tUDzpangO5Nadso+k3uVMH0TZK1nLsOQt07HEuVngZer54CR5NE2VMFAW/l2waInkIeFx6+bkFltIa09/86+UX3pXTdAtfbXP6hgnORIc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=EdON7tvi; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="EdON7tvi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760556369; x=1761161169; i=w_armin@gmx.de; bh=gecGssB62iyEw+0UgSTSVIacQx/1Wq4YlXl6Zbf1CtA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=EdON7tviNYEfy+K/1zGs+lEdGesmaaZRs2py8rePDRVYtVVAkTVT4py1Z8seSiWy /yxUF4hLSa45ji91HmPUJ8xR0wkPfXHWz1ueN5xkEfk8S3cx5sTfszo3jdhRA2u6n atOZj0esyG9/N3sZ7GFY0h6Iw/qzvnPhfnHI/KN8/ybXG4v1QxEOsJcS3L4O53353 2acV0MZFYYt9MLr/4g3UbSv8aWQSN8BjsS9vvIAQ/1Hp4CWOpEfqn2iS45JXF8Jfk cLwvb+0roFAunmHuiU0p2uW6tStXGeyBIantLXb16sR+baTNW1+qB9DorDJmkqOHn baFaifzzQdeAbmWFqw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MpUZ4-1uS25l0tBs-00lthz; Wed, 15 Oct 2025 21:26:09 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@gmail.com, faiz.faadhillah@gmail.com, rayanmargham4@gmail.com Cc: kuurtb@gmail.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/4] platform/x86: acer-wmi: Enable fan control for PH16-72 and PT14-51 Date: Wed, 15 Oct 2025 21:25:50 +0200 Message-Id: <20251015192551.321200-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251015192551.321200-1-W_Armin@gmx.de> References: <20251015192551.321200-1-W_Armin@gmx.de> 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 X-Provags-ID: V03:K1:E/Va/ZSunPn2Y/BfjHZx6RHbOA04e1Ns6GpcgD8j2rAuyDzZQak kxRZGQglBjD+/RpL8rwDGqy30kXOD0+SxRj/l23AedBhzGTcMjw4LXD1XprzKk33/SfIgne hk/DhHzibfclqC22mSUAXsd93jS0uAUw91U//qvh1SJzAdssWjTbpi4JilOEREPYha72Cs/ sFTcCBweUkhG2+v5RLiaQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:mZ53YjLGxls=;jcsuWhx2nzXFxdlkoPDMh9ukohw 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 Rp7vy3PO5W7D3Fv9tZexTT5ANQ= Content-Type: text/plain; charset="utf-8" Both machines support the necessary WMI methods, so enable fan control for them. Signed-off-by: Armin Wolf --- drivers/platform/x86/acer-wmi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wm= i.c index 4a408693379b..4e7d52bc1917 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -465,6 +465,7 @@ static struct quirk_entry quirk_acer_predator_ph16_72 = =3D { .cpu_fans =3D 1, .gpu_fans =3D 1, .predator_v4 =3D 1, + .pwm =3D 1, }; =20 static struct quirk_entry quirk_acer_predator_pt14_51 =3D { @@ -472,6 +473,7 @@ static struct quirk_entry quirk_acer_predator_pt14_51 = =3D { .cpu_fans =3D 1, .gpu_fans =3D 1, .predator_v4 =3D 1, + .pwm =3D 1, }; =20 static struct quirk_entry quirk_acer_predator_v4 =3D { --=20 2.39.5 From nobody Mon Feb 9 01:12:48 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 313D3312806; Wed, 15 Oct 2025 19:26:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556380; cv=none; b=GXoadhGNZnK1QkBmVl2cAhfnmv1lmu46UTq/gXZ6eO4wTeSflfTCzqoGwMnzUZe6ra5nA3QnNhXk3RVuZ281+/1nmGLEB67K1Zzff51GQBwp6WGvnF76NCBkaBgK8wssLP14D8yTwo9RBHXzeQhZegTOnf/R+4dOBMtl+U5lSwc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760556380; c=relaxed/simple; bh=xhfDdaq1Unc9cMN6QLpxDObmPMdU8+NHNrOG5vZMpdo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FcQJP4MpnCOL+KbLlpmuNlqsnMNfU0LQY5dWqASfAhMpY23NesF41Iwb4UD/UBu+SpoBs1q1QEwaI1+v8yk3LlyGlebhpFD2wRB014WaMLH0cSIqAVqV/BL2Qm/4uLwGiB3lS3LezzbA73qD80++lWtIQ01f8R2mkfhdZMMy0u0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=lQ2U3HIw; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="lQ2U3HIw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760556371; x=1761161171; i=w_armin@gmx.de; bh=ScWlLT1GiFErwwquhnT9AoBOwr4/DPgnWqg0xKL77io=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=lQ2U3HIw4BnenCAIL2dxs2JehWWf9ZCCoBUz6/TMZC/GLSTGQconYhthustLA1SI sJ/1woW4uPCyTlAFmSZHCa0yUIvXWEz0mULLBPiRcBkyN6YUrGZ5ucac/QGyUimpE 7E+i4UmkGndJjkoX9t4UAA8ZPszTO9ZhSDH2gwqmecTtc59MMHKL982EpdblSX1rw 6O6eR1cQYYFfkRD3kJPak0Ci88HOfcIE/+CvQyYNWOn/yrN2KSRhJfxgsb8KgibAd Ex5y9n4yVDm8hfwwjcs/JDP8QrweZFuCFwBEOeoFrTrZ6TBrWNhRI7U3Efw25CEEe VPIhygTc3Y3DbIV9SQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MTiU3-1uf2be1xMr-00YnHm; Wed, 15 Oct 2025 21:26:11 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@gmail.com, faiz.faadhillah@gmail.com, rayanmargham4@gmail.com Cc: kuurtb@gmail.com, ilpo.jarvinen@linux.intel.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/4] platform/x86: acer-wmi: Add support for PHN16-72 Date: Wed, 15 Oct 2025 21:25:51 +0200 Message-Id: <20251015192551.321200-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251015192551.321200-1-W_Armin@gmx.de> References: <20251015192551.321200-1-W_Armin@gmx.de> 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 X-Provags-ID: V03:K1:usPbr6ILaDvi1VkfyVjWQCvpZeu9vk27qmzwaaybndSdKEHMr5Q rntiGOJ1IO5oZL3//WcK7GtY6V1uWX/k7aMrmDqQakTeCdkhZDmIyB0TF1sMvfW/AcY7OoX 19jqSLNuouXaF4kssmUil1Mg4gT7w9MhUIDb4FM0MbMbjDrtZvqZiW2gEVTYPNVuoBtD6Gj q6lRpJjGn9lvfDfZQ382A== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:kV7mfXvo1Ig=;GHKpGFsqbwAuB9msFvhaA3GKX2G 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 ufr6Q== Content-Type: text/plain; charset="utf-8" A user reported that the config of the PH16-72 also works on the PHN16-72. Add support for this new device as well. Suggested-by: Fa-Iz Faadhillah Ibrahim Signed-off-by: Armin Wolf --- drivers/platform/x86/acer-wmi.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wm= i.c index 4e7d52bc1917..2acb854eb00a 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -692,6 +692,15 @@ static const struct dmi_system_id acer_quirks[] __init= const =3D { }, .driver_data =3D &quirk_acer_predator_ph16_72, }, + { + .callback =3D dmi_matched, + .ident =3D "Acer Predator Helios Neo 16", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_NAME, "Predator PHN16-72"), + }, + .driver_data =3D &quirk_acer_predator_ph16_72, + }, { .callback =3D dmi_matched, .ident =3D "Acer Predator PH18-71", --=20 2.39.5