From nobody Wed Dec 17 14:26:52 2025 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 76ADF10E3; Thu, 16 Oct 2025 18:00:18 +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=1760637621; cv=none; b=YYZ6Z5d/mp/gJ9wam8FjjK/ZL54oj6lrWglJmqrQRxD41NPNtPqQ5aPKrtpmW/0WK1CuV+OzgQ60FA77TIGrq2PUX91g/RZcnr3q92+2iTK9W/5/8Sv/bOKFwn9n5hzBrn8hdDwqNIQ3gPkR62AlC9CjcD2/NhcWahvNp+jV3/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637621; c=relaxed/simple; bh=3Gx3Igq+14hnHIf24ojm129hmEAMfuPZHAdEmjS+1G0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dtPYFk2Gz27bnuGofa+n8r+32R9DBmo2UNdvJ6bYMy5GeEq+LQsXpBvKq4iDZ285FpA79lyS93GXXKR+0PalZAQC3fxWaTo/0B0nHXY6n1KDjdzWw5djENLxTqo3/UZXdNojCY0L59GXvmKaFmz6xp3HY2pcxSXAJg6Yv7fefzs= 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=Q4iVrJfi; 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="Q4iVrJfi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760637616; x=1761242416; i=w_armin@gmx.de; bh=tmVbdxRvaSYbG130/KL3h85kTDGC1+fez6ZtkMzf5pM=; 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=Q4iVrJfilQ2SWlRh/yi/T5/MjTmUQoWB/WL19geq8H1L586/wZHojLG/0NJOqfij MUcCx4wLvFlMBcJRpA5UApuv/EH/CJVHGBnM6OPs1vHCyn1lw8chHis7/X1Qrw0E+ k0n8SDt+plS6WMZ24pDrE6RdoCaLSTdKELpVqmgqQdZr59W1gUVS4aXs8A+r4E5+8 WEacn3NlKqOl29GJnSVatfUV+RCMMGaZmT5aznFOmN5h1wc3CHOqiZ9q94lri7OVK VGQireq9VJMv6IPW6uQXkkLM3RJEdtp29hkU/7/thNAQ/rnkJ09UnwVhIY5A390YR 7dMEcs4ZRX8i3kP+4g== 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 1MA7GS-1v3NSU1MvC-00FtOL; Thu, 16 Oct 2025 20:00:16 +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 v4 1/4] platform/x86: acer-wmi: Fix setting of fan behavior Date: Thu, 16 Oct 2025 20:00:05 +0200 Message-Id: <20251016180008.465593-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251016180008.465593-1-W_Armin@gmx.de> References: <20251016180008.465593-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:tUhYaaCn/DO/f8qrps1zW+0UPTjq6KVcw7ajK43pFkmC2vDIteH DbKO0Q0H0ghPrO9aDqqzbQv4LEKrki0s7BuwucnopqcCcjtpGiYC67oEyJimGOfSilu2++c 3U5fjj74vXKTKjJORHRqJxFPb1AtIZZQ69hW1dnoVDBvaH6i+E5X/qIWD/G9/dNMif8OkxH wF9w1rTwKqZbklU2X40HQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:DPu97X6nut4=;vQ1na5FDbEa5YP1h27NfVcx/BJi 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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..6fdfb1d0001f 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_GPU) + 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 Wed Dec 17 14:26:52 2025 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 290FA7464; Thu, 16 Oct 2025 18:00:20 +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=1760637623; cv=none; b=YguDacq5N8NSDQkQnwSWnqyMTvl1HYHHIbMN5Y4oGrG2+SOM6sL2J/mTsA23Ve5SyGyop6lLGFcjR5SKd2gu4O9XIJrgrnaQzdkvA2LwbAXwA1W9YwQ9afYY9Llf65qo2i5Bx6YYFtDxjPRSQIyiwZL6UD42Eww6SIHkwqsJLT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637623; c=relaxed/simple; bh=JqnGziaHuNL7vOt77CIXeRzvCDvf4lgXO43CIV58ojs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cOVtzolHsZ2jqT/jghHxNQZhui/eqFIyguPxh8pM9MeR9ahNaJ5n2M2wtAY9TT1wAFF1R6WN1786Nx3x1t2QTCWdAC8Z/yO3177jKwdKCxPqylq7RxbqEUs/ksYbhsmKlDOYgzktNaFSJra90P32PipKTs7wJASwzhl2X2swZM0= 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=clscMXLz; 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="clscMXLz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760637619; x=1761242419; i=w_armin@gmx.de; bh=Bqfx/GpBcFgH7naS1WdwE1K0hdtq8LnOOEEMSfMq6Os=; 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=clscMXLzeVT9a09xxZbsRxh/e/iWAVhURFpfoiTS1SL/6uehsVDrE3/ojArVWYSX t5pHZu7GZf2pcWS1jMR1ORfqnvZu87EHRLlY8n2ujjkTv+u7yUp6MGX7CWHE91EiV ANAYij5kL5EhNlPQ3/ptdHDYh3dMy06Ah+Kj+43ggSlLi9NwxptdLY3pVFNEpZ5hh 2yvBFzch7cO11hdQNrLml+B9fuKg7+Ph1fhhzFz0PoTSYYmd08ikoK33GwOTT3Hyj 2UTfJHBFA0Tgr+HoUPRV2oMEYuYHLy6vIGn/MeZ9EfwSD2NLJ9gmpytfgT+NkJk7P 7IURKadnQFOB5iL8pw== 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 1Mkpav-1uV9Aa0AZD-00q0fa; Thu, 16 Oct 2025 20:00:19 +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 v4 2/4] platform/x86: acer-wmi: Add fan control support Date: Thu, 16 Oct 2025 20:00:06 +0200 Message-Id: <20251016180008.465593-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251016180008.465593-1-W_Armin@gmx.de> References: <20251016180008.465593-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:1xaiYtSWioftcz34FtoE9N9dx0tMSaYust93LPI9rm34KAhRAEl gz702F3PEm/jjgfZIHMvWakMFFjTVHJei4QZ2DnnbjgRX4rQRnAJxEQyq7X/norRQppPKOE gvMtPgm7eEanqhwOdmVVAezt7Q0PjpZsQ5lysEqrA9JiOe3mwz+scWkeMAnaDkOHcCR2HJY KmeI/GVY0wyXjw03p1Tbg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:8I16+4h1wKQ=;U3NV6/SRUcsd8Ax9wfGyGjmqQWD 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 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 6fdfb1d0001f..80b6b79157fd 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 Wed Dec 17 14:26:52 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (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 BC3C2224234; Thu, 16 Oct 2025 18:00:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637626; cv=none; b=d8hu7XpPfXO5tqbecRLmZOepSOHY+9D+7gTTTRI8xAwFSOZP5Zm3kAAZbElfncrK0BxNDjadj6BZs0LOmdcf+pfRL94+QxpwfhXz3PKLiYUFlsQRG07u7kQ0hk4hgP7CPOCv5gGHn4R8upm7BElkNsVKybeZvQhWTOCqjpqH9YA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637626; c=relaxed/simple; bh=nTCnopvomBbbhDEVfDMg8KHM9kp79qFjrT8iyZWqf7Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LZ/HmgfV+R99LBlbUs+iwdx8XxdiLxgYcuDd6voxhCHFJQeCvdwXHAaPdmaxUkQq2IQnfpsTfxsSdESOK0qGoYsq3cMMOY4JNZ7uWg8fKyD9+2UbHSypn1QwqyQjyh17F1JrlopfnI11fE6nWKUUvNLoAPKW0QMH3mQ5aOwzL2k= 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=tzZDCCjt; arc=none smtp.client-ip=212.227.15.18 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="tzZDCCjt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760637621; x=1761242421; i=w_armin@gmx.de; bh=ainMPm4sucZtlFZCEpg1yT6vzPovKaNnr4gi1e6aoCk=; 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=tzZDCCjtfyhqF3KWE4qdnjmALFiAdv4TLYz2mwTxzf5cuCSAe8vi1QAmydvBrBTn zcBNJyGRAOkO3ICIZtOcpdLT+nF/UOTMgjjAyR8HpWqPv5ERq4GH7u9V8gjEXkbEG udnZB1PIFKs9p+mQhJGm94PxwyehHbB/Ipi+GCYiI4wwdS6Cdw6TtfuJ7kjtq6zKu tAEU3yX2eOVpyKifLFgliNg1TwHSO4DTPVMsDJf4TyaDZYD4Ldprl3/HkeUBGN1dc b5CvyYUuhlB5DaVIWNOi8ECddPC1TsXyKEitTfHu1a0LwkTlIcOk5tN4BFdE6pnP3 yp9uzZCecHLOiBlGGA== 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 1MMofW-1ut1sn0aBA-00Nrzn; Thu, 16 Oct 2025 20:00:21 +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 v4 3/4] platform/x86: acer-wmi: Enable fan control for PH16-72 and PT14-51 Date: Thu, 16 Oct 2025 20:00:07 +0200 Message-Id: <20251016180008.465593-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251016180008.465593-1-W_Armin@gmx.de> References: <20251016180008.465593-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:NnjxcTjw2BsFNsy3arWz9wJe1JkyYtYxIDg58WdLvvf6Xf3+pxC QGHb0mXOF0jI7jZnD2jWxCcXeMCGNmSVzsyJbrfnzzRn3UihQYlhC6C3Uyq5CnMXpGH1LlZ EaePg/dNk79tpK226CyA75yhDtvfHNAQxjER2sHsDa2fqAoSxNUWFhZ7ViOQxHZeLri+o5q D+Y3rPkTSMAEF8VUf1uUA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:qvb5NBcCTLc=;xP8Hfd45dYuDzwWLSddt0qg0PpI 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 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 80b6b79157fd..8dca96c6b58c 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 Wed Dec 17 14:26:52 2025 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 57860233711; Thu, 16 Oct 2025 18:00:27 +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=1760637630; cv=none; b=iXmdTzL5Ysw4d3E1VAkgvnK96CHURcnArwQbuWXTXDAyK5E9QLtbiWH8shW1KuYl+Dcz6Yld1ezm6fPdQLw+JJ4m/sLKkaRhMB3fIPocX6yvCnYJI0eZ4YLz9jkb7MZCym4lleDqpBBZjZz/wfJlVju/5qogRxIPh/EmlHOAXF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637630; c=relaxed/simple; bh=l+173Njiv368aUOc8LDgAyvBO+GAVC5je8MVmPW2+VQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=e4R0Yl+usbT04rYuXtC7rrjndIPZ4wjwdyT+T49Mnyrh8HcRHOxe0IHS5jQbg1VCC3fYGe/WYPdZ8rkiXbuRkCvjFSxl6WS3n50LDF8lOcuWAWs+BilBSJVOGaijF2HZWbflUSR79mxCnDxdc+DWvAl7cpBMpESqHaTMtsPQKew= 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=iEa27yoH; 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="iEa27yoH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1760637623; x=1761242423; i=w_armin@gmx.de; bh=EduiAjdaZomhgAgO/2nAJCRgCfn9uKoy8lTO51vRKGs=; 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=iEa27yoHtnXJ9XBlL5Vea7MYTgAcX4x7qT/QuarqqNdvhvbeVUiFcveVyLuwnFmV Ao53pze5S2cpva6bGeYBSaW8MeHGB2C1n5x/rnbMxRTztixFtR2/VQDCeWA0KL2L0 YmtevBzyK+3xGM1qT08Hr+V1Si+WvF2cT3guSkNCTcjGz+YbklNybY1PAi0Pe80mI fC6Cpz+DgUG+H6Gm6ViG3APwvi/SnPu54lfszBzmleHmBwEEmUnsd0wh9DrHKSSE4 khR0rCcnVGgar9QA9Yr+YHIZFeOOrImPdM2ABMS4m18Ic4Kfwf/+LrfJ3jxxxrBn4 IeUeS2zfHh0qTBMALA== 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 1N49h5-1u9kxy0cDZ-014wHs; Thu, 16 Oct 2025 20:00:23 +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 v4 4/4] platform/x86: acer-wmi: Add support for PHN16-72 Date: Thu, 16 Oct 2025 20:00:08 +0200 Message-Id: <20251016180008.465593-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251016180008.465593-1-W_Armin@gmx.de> References: <20251016180008.465593-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:X1Y6Dv2d+ud2gzQ5SZctXiEYyP5phaLzMVYt04jTumOBdjhszeg nZy3bVjs2PwnWFPbL7i7BCs2xyw7Hn09stuwgGdHMW/HxCseX9ZwbFoqEtf6rrsWlNsDnua 1WOgsuqnpDWW7I/NJ7Z/ALgbDR0plH+2bqK4PUakCvHyjboI9xIjkiqD1fKawnJmcli9RuK gzvnPaoPTHcQNsCrQ4qlg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:HeMPZHTrm2Y=;Ni8TVqv61wFbc6Mt2aDiv5mjLsO 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 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 8dca96c6b58c..4ac39929a8ca 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