From nobody Thu Oct 2 02:16:42 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 30E1430F549; Tue, 23 Sep 2025 21:52:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664342; cv=none; b=naew6NKI6fKZ8e8bYsP8ZqQ3kMnLXrR9RUf0wya2UYzYogzhmwNlDddty5py4rC08kLpqlUfd/GBy94g/1JtIodpuNxxEfs04rGgVf5X6fqYxvKj3MtHWrmre411fKA6mEv5tUSEHqoI+ybnnwAdX6YKaoXPAX+ocjIHi5q6V08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664342; c=relaxed/simple; bh=0Hko0YjOXc8iSttwyVz9XzJLfxo3AdthaBQwWF2NZSs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qS5kAATcBcgwgxLPvCgU3dEjPA7WCr/416O+Imqd+cBBVhcnQ4WZ1gA8LjYSQeHvghs2X1wq5nxrmnioBssJsPRluTjDjHKdMyjqc1nZjVN/y6Bz0fYof98sV6rnDAjIuImckEaiXyw5u+j2X2F+Km7MP3rjrRhS5pwgFuCPmtA= 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=KRhYAldR; arc=none smtp.client-ip=212.227.17.20 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="KRhYAldR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1758664334; x=1759269134; i=w_armin@gmx.de; bh=ncukTtGDvsvGlLf2pWf1tZEqsvu3zsxVMl4/P0oVMZY=; 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=KRhYAldRwC2Rpk6RIyJ/6oTu807u80AIrIgsKEWSV+Rn0075rCuZtTxPHGOcV1NR 63JjJ5DQRrU1ddFg89ObTP0JzJv2h4otIGayYQpjHoJ6rDTnF1S9oVZqvRKfcDJeZ NfP+Qq/33UW8GlcEU4g8GvntaiTHeYoo/2UyE56eWG/mFVT11ghZaGAGEJyyRFWNl n6wfXxelzLErx0EoRuKFIYcMI/7XgcWc91iUmLbGMaTCTxGqa3XYeNTDMREVjN2So JuCgjrFIvAjDqHKxK9AEdxV0QmWHH7tabeogQHgWc6g4IE+t1VXL20IfGiAFHGAbZ Zcgu/LOhvlKUoYkLFw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MwwZX-1u7YAv1TYp-00xthq; Tue, 23 Sep 2025 23:52:14 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@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 v2 1/4] platform/x86: acer-wmi: Fix setting of fan behavior Date: Tue, 23 Sep 2025 23:52:02 +0200 Message-Id: <20250923215205.326367-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250923215205.326367-1-W_Armin@gmx.de> References: <20250923215205.326367-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:X9l5qCZHsWbKs7qf/EpWM1DNJMEghpkhL7wIOGYnspFSsIxrM/o xRhoWBtI8dlDIj+v/CPh6di2UEoRH6V39wgsoamzTtMqttAxMrUUFMv/rqrJjBgTrZCP+02 5XZu71X+wfzNPySmgUoMdcDH31G/Vhro9tgHs4BvrtV+Tdo0r88pda+iZRwve7sdMAaX01w jBnaGXw7RO1FStlxcRJNA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:qBj0x4AvfGY=;Oc+h/QrKZd1EUvssuOMYcadDwyu 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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 | 76 +++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wm= i.c index 69336bd778ee..a41555ee8589 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -68,10 +68,19 @@ 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_ID_MASK GENMASK_ULL(15, 0) +#define ACER_GAMING_FAN_BEHAVIOR_SET_MODE_MASK GENMASK_ULL(23, 16) + +#define ACER_GAMING_FAN_BEHAVIOR_CPU BIT(0) +#define ACER_GAMING_FAN_BEHAVIOR_GPU BIT(3) + +#define ACER_GAMING_FAN_BEHAVIOR_CPU_MODE_MASK GENMASK(1, 0) +#define ACER_GAMING_FAN_BEHAVIOR_GPU_MODE_MASK GENMASK(7, 6) + #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 +130,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, @@ -1565,9 +1580,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; } @@ -1618,25 +1630,43 @@ static int WMID_gaming_get_sys_info(u32 command, u6= 4 *out) return 0; } =20 +static int WMID_gaming_set_fan_behavior(u16 fan_bitmap, u8 mode_bitmap) +{ + acpi_status status; + u64 input =3D 0; + u64 result; + + input |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_ID_MASK, fan_bitmap); + input |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_SET_MODE_MASK, mode_bitmap= ); + + 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(u8 fan_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; - - 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); + u16 mode_bitmap =3D 0; + u16 fan_bitmap =3D 0; + + if (quirks->cpu_fans > 0) { + fan_bitmap |=3D ACER_GAMING_FAN_BEHAVIOR_CPU; + mode_bitmap |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_CPU_MODE_MASK, fan_= mode); + } + + if (quirks->gpu_fans > 0) { + fan_bitmap |=3D ACER_GAMING_FAN_BEHAVIOR_GPU; + mode_bitmap |=3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_GPU_MODE_MASK, fan_= mode); + } + + WMID_gaming_set_fan_behavior(fan_bitmap, mode_bitmap); } =20 static int WMID_gaming_set_misc_setting(enum acer_wmi_gaming_misc_setting = setting, u8 value) @@ -1923,7 +1953,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)) { @@ -1937,7 +1967,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 Thu Oct 2 02:16:42 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (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 AA75030E84A; Tue, 23 Sep 2025 21:52:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664341; cv=none; b=mPEc07dmZyeeJyMi8DlTHzXhAR9hkl5jkK4ZE36x1bGGXWBCrQV8xoUShWSMK7NNP7JzASCcMfWEcDVoWC8LbjQPqOir2YPwL7b9v6N5isW36QgXVJ4mag+noDjK9FtU0teDlmV/t54s7ghDx1z3P3sslYF/cdG+TKPtlqHLwaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664341; c=relaxed/simple; bh=4+2FcMpYoV1isFVulU/5/4nG+kK10gGwl2gZX8VERNc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Llgq/iphLeT1QWLD4DzSVVnfvqH3AoKCkWnpMzgddxvvioj6A7c+Awz9PEyuT7WgRM+30V7zN9OIy3swy483ajracmz0inDq1b9KEbQoLdvAsv4lvZhXXcUP4noBReTpEWtTv/pId/xpEFFsi8l7Z+l7q7JZC5USwomaYbRlBAM= 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=uXRoY31c; arc=none smtp.client-ip=212.227.17.21 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="uXRoY31c" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1758664336; x=1759269136; i=w_armin@gmx.de; bh=beXBLL4rR2MYV0Cm2O+Z6Dc8eHAGdTeXJnBQr17Ny8E=; 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=uXRoY31cHxOgQJRUgN1l5TPS/LGJJXpmmGWmjqsBZcN/99hIa4YH24w+3iEnunSW XaVkaWjXW0ldyIvrN/zrkihlKbhjymUCM8JzSjRm07iEkHdx/yKedN8jfUGncpFRf UfJW5OeBaIF9/BXesKxzUvGyN9Ox0zGwxV5Rzai/BtGnS5yB0eeevUay3jtaXvima /Xu8ekLl84C2tJafqwsqJjJmTWqNIHtin9sJXmtrCjpHnXYijh2h+mMgM05JRq+4V ksY77wCFQm988iGOrKZ+pFmokGngU5W4yyVAQCijRBIqgdFUGl1JUkgUP7OCIoqxJ CwNVmPGwh4WHegsxYg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MIx3C-1ulImA1fuU-00JsNz; Tue, 23 Sep 2025 23:52:16 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@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 v2 2/4] platform/x86: acer-wmi: Add fan control support Date: Tue, 23 Sep 2025 23:52:03 +0200 Message-Id: <20250923215205.326367-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250923215205.326367-1-W_Armin@gmx.de> References: <20250923215205.326367-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:IGdS4Y3S7+k2KOp7hpoULEz2Xx5XT2DykOehlF3LCWhfndlAEp6 Qsm6tq9SxxyYAm+hUKymPEw6whpJ2Pik78IyQwQ9rQLKm01gVFile2Ob8bmdV3QPqKfi/yQ ewnK9aYPwhK8i/U+DVMVqvXSIZGWB7RC+HaFHQZvJroRshZoBSMkE+L+PERhWwjbzrwSTZM BJAWJPUYevu1/0LBy68tA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:nIps1Xf4KWI=;5t7c96gbVL2jKMGVajt6bLxzVbn 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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 | 221 +++++++++++++++++++++++++++++++- 1 file changed, 219 insertions(+), 2 deletions(-) diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wm= i.c index a41555ee8589..345b6e24ae31 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,11 +71,16 @@ 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 +#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_MODE_MASK GENMASK_ULL(23, 16) +#define ACER_GAMING_FAN_BEHAVIOR_GET_MODE_MASK GENMASK_ULL(23, 8) =20 #define ACER_GAMING_FAN_BEHAVIOR_CPU BIT(0) #define ACER_GAMING_FAN_BEHAVIOR_GPU BIT(3) @@ -81,6 +88,10 @@ MODULE_LICENSE("GPL"); #define ACER_GAMING_FAN_BEHAVIOR_CPU_MODE_MASK GENMASK(1, 0) #define ACER_GAMING_FAN_BEHAVIOR_GPU_MODE_MASK GENMASK(7, 6) =20 +#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) + #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) @@ -130,6 +141,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) @@ -1651,6 +1672,27 @@ static int WMID_gaming_set_fan_behavior(u16 fan_bitm= ap, u8 mode_bitmap) return 0; } =20 +static int WMID_gaming_get_fan_behavior(u16 fan_bitmap, u8 *mode_bitmap) +{ + acpi_status status; + u32 input =3D 0; + u64 result; + + 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; + + *mode_bitmap =3D FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_GET_MODE_MASK, result= ); + + return 0; +} + static void WMID_gaming_set_fan_mode(u8 fan_mode) { u16 mode_bitmap =3D 0; @@ -1669,6 +1711,55 @@ static void WMID_gaming_set_fan_mode(u8 fan_mode) WMID_gaming_set_fan_behavior(fan_bitmap, mode_bitmap); } =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; @@ -2840,6 +2931,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) @@ -2851,6 +2952,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; @@ -2858,8 +2964,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; } @@ -2868,8 +2978,10 @@ static int acer_wmi_hwmon_read(struct device *dev, e= num hwmon_sensor_types type, u32 attr, int channel, long *val) { u64 command =3D ACER_WMID_CMD_GET_PREDATOR_V4_SENSOR_READING; + u8 fan, speed, mode_bitmap; + u16 fan_bitmap; + int mode, ret; u64 result; - int ret; =20 switch (type) { case hwmon_temp: @@ -2893,6 +3005,106 @@ static int acer_wmi_hwmon_read(struct device *dev, = enum 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_bitmap); + if (ret < 0) + return ret; + + switch (channel) { + case 0: + mode =3D FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_CPU_MODE_MASK, + mode_bitmap); + break; + case 1: + mode =3D FIELD_GET(ACER_GAMING_FAN_BEHAVIOR_GPU_MODE_MASK, + mode_bitmap); + break; + default: + return -EINVAL; + } + + 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) +{ + u8 fan, speed, mode_bitmap; + u16 fan_bitmap; + int mode; + + 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; + } + + switch (channel) { + case 0: + mode_bitmap =3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_CPU_MODE_MASK, + mode); + break; + case 1: + mode_bitmap =3D FIELD_PREP(ACER_GAMING_FAN_BEHAVIOR_GPU_MODE_MASK, + mode); + break; + default: + return -EINVAL; + } + + return WMID_gaming_set_fan_behavior(fan_bitmap, mode_bitmap); + default: + return -EOPNOTSUPP; + } default: return -EOPNOTSUPP; } @@ -2908,11 +3120,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 Thu Oct 2 02:16:42 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 CB0B930F932; Tue, 23 Sep 2025 21:52:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664343; cv=none; b=BDdAwl6IkuGGXiKheMVRysX972K0CCPWJgJUQ/8n/jiGZ1UHia6UT12yf0EmX0d/+DeHtax3mam5VI5+FePDVQTEFATgeYZfDOIEIMo4ZXM0/+x0E1Ts4rxfobjIE4XFP7CK0lWYeo7OVdijsRNBDOPWBRyNKYxXOeGnjphpiU0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664343; c=relaxed/simple; bh=TybySjPSdI0AbM7DD7yiWdNvqREzv38/4l7szF/TwTw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=e5zyuzbtJPlDHmt2UpJwv/ucBa4A2dc0xz1FqVL4ZDDr2b7hdpiuvlUrxOk/xH6+aLWOX53z90RfeaOtimZcM8I8OAdHdfrKU845bMF5IJ1DGHbvZJjdzZNWH1jzU8JSVqhfMtqaXD4zYyRhg0OzaAePrfPF3kLc/tSo0MUk1rE= 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=V6Yx/ld7; arc=none smtp.client-ip=212.227.17.20 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="V6Yx/ld7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1758664338; x=1759269138; i=w_armin@gmx.de; bh=bAbCz7UgPT4LDyKJA8LMJdrOGazj+Rx3x+iekx3ff9g=; 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=V6Yx/ld70t61mYl2JnYB+MnN4SvBJqc6D/P1NaOoAIwrd4CH7BfT6zOd8lLlj3q/ HUb7oncSz4XtYgeqHWo8C5e4B49zvFe0vAdLDXhHcsF6xwS4VvMu8ZQdNMlm2tV5T uUBB6FL/elPLVJ9jzW1lEZwDMKLsZ+M1iPcufwanJuwuVVxWHr8BkoVt3+dhrSC8B 8Xu4FzaI5sO2O2kbKnkt9G87dimN7qTyrZdcDZzA5A9ZwUhvRarACPiZBudQvMKuO 7DQ7HoShxGDDdG4dkdr6ZU5AbLSC2INk/ORwuJjdnSpv8GRHMD/GM09TpRyDHZoNF jL1WhM8YfhjKLKUQ4g== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N0X8u-1u7GOE11ee-013Xf1; Tue, 23 Sep 2025 23:52:18 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@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 v2 3/4] platform/x86: acer-wmi: Enable fan control for PH16-72 and PT14-51 Date: Tue, 23 Sep 2025 23:52:04 +0200 Message-Id: <20250923215205.326367-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250923215205.326367-1-W_Armin@gmx.de> References: <20250923215205.326367-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:uDkShLKuJpFHENf99luwWWI+WoeUDUn7N1oA+BwnVuF9AOSC4tM yVChseM+mKlfTSvC0ZIdmx+8k81yHG7jtie2U3C+zoAnRMCZv2d3U5LoUFqW/GrSjfMgaBK b6JBFBvnIM/w/7bUYc+s899Qv0GY+OSBIQ3718qvq6q0WmpPBRn7Fta9sVTyouZ5p9oXx7t 0yEo6vJD6pSPaycg85VYw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:DS9sC7d8F2A=;NUvMfCKz91t1adpTrMC5flxQKJW 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 Q32BUj2IJQhGEflMK/n 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 345b6e24ae31..d2cee0bdfd16 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 Thu Oct 2 02:16:42 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (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 9A1DF3101B7; Tue, 23 Sep 2025 21:52:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664345; cv=none; b=AbIe08u1pYdZ+nq+S1CGLNkKUwsoKoiZ43H1VG0ul3e1b9mzS7v4vJfwdaRTr9KkXGC0R7R95pbJFil77gne4a9PKHE6IXSWfmV7yilOhQSgicuZ79oOWyiZASkW+6WP1ckkn8jmkX33f/OCQBdMilWnI60W/3WWGsFYBXbxhwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758664345; c=relaxed/simple; bh=vP0rfFfbX2Y5nskO8oeJ+VXjBm+1n+gBclQxeFP0wFQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JgWiu4An3nACnDMC/hEV7FBaMqUtvdPD6U3cEB0PYmoQfzeGOS96X/BYbg8wnC25RVWR+q/H945wp31o7tNURBgdK+tm2gEFes6aNMbhKguE4TyX6KNFpb/REUgFjRms5IqcaTT2n86e2wyzT5LRfO8ew5rK/FTPQ4PE1Hp0c4c= 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=D0+JZm3p; arc=none smtp.client-ip=212.227.17.21 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="D0+JZm3p" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1758664340; x=1759269140; i=w_armin@gmx.de; bh=fI7YZhteYMKWBgLic2yEZYfRR7J0OV1zamQFNTo+BTc=; 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=D0+JZm3pNRsNEP1zshcRE4JLwDIoCaDsQUAMYWQqjm2YIJBgMhx78LU0codWf1gW O4o+HBIZxQphrADbKnsuI+3+s3lmD9d7VjqoFitWfS2X0o2P437iM7Qj3PjHOxY9E AOio7kWO4NZf/EkG8yDo7mH0bj6VJcpoiiiixQTQNcMbyMIDiEg6fUgJBssV//uy6 d2gv/AtM69lh4lol96rnTji+aikhuCD8hbRdta3aBqys2EwLwWB5/7wKhGCDFB6Bw gMY0ExfCNh2YJTvYC5crYWfMS7TKJ2v68nbs41gEUjQfSE/kPRq2CiN8O0e2ERP+k hd4IqaW65UMcp3JWkw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1McH9Y-1uVQ1A1yqC-00dCEb; Tue, 23 Sep 2025 23:52:20 +0200 From: Armin Wolf To: jlee@suse.com, basak.sb2006@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 v2 4/4] platform/x86: acer-wmi: Add support for PHN16-72 Date: Tue, 23 Sep 2025 23:52:05 +0200 Message-Id: <20250923215205.326367-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250923215205.326367-1-W_Armin@gmx.de> References: <20250923215205.326367-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:D2lZe6dbkXlu0oL63/ZLSNZfW0eYkj5yRYbIl5R2KwznYOMl4i8 GLyUwaWyUQxtyKb3MAfdmJL6F5FN1K7gIQFtCtokUr7nn/zFxCnSC6X+SIxlkEjXrJdiOU+ iIQoaUvGcS88yzcsI1rAKI1wPOJXOjx/R8oFFZa3sOP3faVM2mvsNdKPdzsywvrGluKlXR0 IA18JcuTd0n2TiB4kKHFQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:vovkw9vswPQ=;A5K/KPiNoV4h0bGLMWNeSGrpMDl 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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 d2cee0bdfd16..485ed034651b 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