[PATCH] hwmon: (dell-smm) Add Dell 16 DC16250 to fan control whitelist

Emanuel Ávila posted 1 patch 8 hours ago
drivers/hwmon/dell-smm-hwmon.c | 8 ++++++++
1 file changed, 8 insertions(+)
[PATCH] hwmon: (dell-smm) Add Dell 16 DC16250 to fan control whitelist
Posted by Emanuel Ávila 8 hours ago
On the Dell 16 DC16250, the BIOS keeps the CPU fan at its highest state
(~4700 RPM) even when the system is idle at 45 °C, and fan speed writes
through pwm1 are overridden by the BIOS within a few seconds.

The I8K_FAN_30A3_31A3 SMM code pair works on this machine through the
WMI-SMM backend: after writing 1 to pwm1_enable, the fan accepts all
three fan states (0, 128 and 255 via pwm1) and reports matching RPM,
and writing 2 hands control back to the BIOS.

Tested on BIOS 1.8.1 with kernel 7.1.5 (Pop!_OS 24.04).

Assisted-by: claude-opus-5-5
Signed-off-by: Emanuel Ávila <avilaemanueel@gmail.com>
---
 drivers/hwmon/dell-smm-hwmon.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index 99a58ed26..88837f028 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -1679,6 +1679,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
 		},
 		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
 	},
+	{
+		.ident = "Dell 16 DC16250",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Dell 16 DC16250"),
+		},
+		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
+	},
 	{ }
 };
 
-- 
2.43.0

Re: [PATCH] hwmon: (dell-smm) Add Dell 16 DC16250 to fan control whitelist
Posted by Pali Rohár 4 hours ago
On Thursday 24 September 2026 01:48:29 Emanuel Ávila wrote:
> On the Dell 16 DC16250, the BIOS keeps the CPU fan at its highest state
> (~4700 RPM) even when the system is idle at 45 °C, and fan speed writes
> through pwm1 are overridden by the BIOS within a few seconds.
> 
> The I8K_FAN_30A3_31A3 SMM code pair works on this machine through the
> WMI-SMM backend: after writing 1 to pwm1_enable, the fan accepts all
> three fan states (0, 128 and 255 via pwm1) and reports matching RPM,
> and writing 2 hands control back to the BIOS.
> 
> Tested on BIOS 1.8.1 with kernel 7.1.5 (Pop!_OS 24.04).
> 
> Assisted-by: claude-opus-5-5
> Signed-off-by: Emanuel Ávila <avilaemanueel@gmail.com>

Acked-by: Pali Rohár <pali@kernel.org>

> ---
>  drivers/hwmon/dell-smm-hwmon.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
> index 99a58ed26..88837f028 100644
> --- a/drivers/hwmon/dell-smm-hwmon.c
> +++ b/drivers/hwmon/dell-smm-hwmon.c
> @@ -1679,6 +1679,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
>  		},
>  		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
>  	},
> +	{
> +		.ident = "Dell 16 DC16250",
> +		.matches = {
> +			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Dell 16 DC16250"),
> +		},
> +		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
> +	},
>  	{ }
>  };
>  
> -- 
> 2.43.0
>