[PATCH] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist

Patrick Pepin posted 1 patch 1 week, 4 days ago
There is a newer version of this series
drivers/hwmon/dell-smm-hwmon.c | 8 ++++++++
1 file changed, 8 insertions(+)
[PATCH] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist
Posted by Patrick Pepin 1 week, 4 days ago
On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless
automatic BIOS fan control is disabled first. The same SMM code pair as
the OptiPlex 7000 (I8K_FAN_34A3_35A3) works on this machine through the
WMI-SMM backend: after writing 1 to pwm1_enable, all three fans (CPU,
front, top) accept the three fan states and report matching RPM.

Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04).

Signed-off-by: Patrick Pepin <patpep@me.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 7ed94a3db..47668634f 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -1639,6 +1639,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
 		},
 		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
 	},
+	{
+		.ident = "Dell Precision 3650 Tower",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Precision 3650 Tower"),
+		},
+		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
+	},
 	{
 		.ident = "Dell Optiplex 7090",
 		.matches = {
-- 
2.53.0
Re: [PATCH] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist
Posted by Armin Wolf 1 week, 4 days ago
Am 13.09.26 um 13:29 schrieb Patrick Pepin:

> On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless
> automatic BIOS fan control is disabled first. The same SMM code pair as
> the OptiPlex 7000 (I8K_FAN_34A3_35A3) works on this machine through the
> WMI-SMM backend: after writing 1 to pwm1_enable, all three fans (CPU,
> front, top) accept the three fan states and report matching RPM.
>
> Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04).

Hi,

can you try if I8K_FAN_30A3_31A3 works too? Those are the commands used by
recent releases of the OEM software, so i would prefer using them.

Thanks,
Armin Wolf

> Signed-off-by: Patrick Pepin <patpep@me.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 7ed94a3db..47668634f 100644
> --- a/drivers/hwmon/dell-smm-hwmon.c
> +++ b/drivers/hwmon/dell-smm-hwmon.c
> @@ -1639,6 +1639,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
>   		},
>   		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
>   	},
> +	{
> +		.ident = "Dell Precision 3650 Tower",
> +		.matches = {
> +			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Precision 3650 Tower"),
> +		},
> +		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
> +	},
>   	{
>   		.ident = "Dell Optiplex 7090",
>   		.matches = {
Re: [PATCH] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist
Posted by Pali Rohár 1 week, 4 days ago
On Sunday 13 September 2026 11:29:25 Patrick Pepin wrote:
> On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless
> automatic BIOS fan control is disabled first. The same SMM code pair as
> the OptiPlex 7000 (I8K_FAN_34A3_35A3) works on this machine through the
> WMI-SMM backend: after writing 1 to pwm1_enable, all three fans (CPU,
> front, top) accept the three fan states and report matching RPM.
> 
> Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04).
> 
> Signed-off-by: Patrick Pepin <patpep@me.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 7ed94a3db..47668634f 100644
> --- a/drivers/hwmon/dell-smm-hwmon.c
> +++ b/drivers/hwmon/dell-smm-hwmon.c
> @@ -1639,6 +1639,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
>  		},
>  		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
>  	},
> +	{
> +		.ident = "Dell Precision 3650 Tower",
> +		.matches = {
> +			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Precision 3650 Tower"),
> +		},
> +		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
> +	},
>  	{
>  		.ident = "Dell Optiplex 7090",
>  		.matches = {
> -- 
> 2.53.0
> 
[PATCH v2] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist
Posted by Patrick Pepin 1 week, 4 days ago
On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless
automatic BIOS fan control is disabled first. The I8K_FAN_30A3_31A3 SMM
code pair works on this machine through the WMI-SMM backend: after
writing 1 to pwm1_enable, all three fans (CPU, front, top) accept the
three fan states and report matching RPM, and writing 2 hands control
back to the BIOS. I8K_FAN_34A3_35A3 was tested as well and also works;
I8K_FAN_30A3_31A3 is used since it matches recent OEM software.

Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04).

Signed-off-by: Patrick Pepin <patpep@me.com>
---
v2: use I8K_FAN_30A3_31A3 instead of I8K_FAN_34A3_35A3 as suggested by
    Armin Wolf (both pairs tested working on this machine). Pali's
    Acked-by from v1 is not carried over because of this change.

 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 7ed94a3db..99a58ed26 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -1639,6 +1639,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
 		},
 		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
 	},
+	{
+		.ident = "Dell Precision 3650 Tower",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Precision 3650 Tower"),
+		},
+		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
+	},
 	{
 		.ident = "Dell Optiplex 7090",
 		.matches = {
-- 
2.53.0
Re: [PATCH v2] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist
Posted by Guenter Roeck 1 week, 1 day ago
On Mon, Sep 14, 2026 at 08:09:55AM +0000, Patrick Pepin wrote:
> On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless
> automatic BIOS fan control is disabled first. The I8K_FAN_30A3_31A3 SMM
> code pair works on this machine through the WMI-SMM backend: after
> writing 1 to pwm1_enable, all three fans (CPU, front, top) accept the
> three fan states and report matching RPM, and writing 2 hands control
> back to the BIOS. I8K_FAN_34A3_35A3 was tested as well and also works;
> I8K_FAN_30A3_31A3 is used since it matches recent OEM software.
> 
> Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04).
> 
> Signed-off-by: Patrick Pepin <patpep@me.com>
> Acked-by: Pali Rohár <pali@kernel.org>

Applied.

Thanks,
Guenter
Re: [PATCH v2] hwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelist
Posted by Pali Rohár 1 week, 4 days ago
On Monday 14 September 2026 08:09:55 Patrick Pepin wrote:
> On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless
> automatic BIOS fan control is disabled first. The I8K_FAN_30A3_31A3 SMM
> code pair works on this machine through the WMI-SMM backend: after
> writing 1 to pwm1_enable, all three fans (CPU, front, top) accept the
> three fan states and report matching RPM, and writing 2 hands control
> back to the BIOS. I8K_FAN_34A3_35A3 was tested as well and also works;
> I8K_FAN_30A3_31A3 is used since it matches recent OEM software.
> 
> Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04).
> 
> Signed-off-by: Patrick Pepin <patpep@me.com>

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

> ---
> v2: use I8K_FAN_30A3_31A3 instead of I8K_FAN_34A3_35A3 as suggested by
>     Armin Wolf (both pairs tested working on this machine). Pali's
>     Acked-by from v1 is not carried over because of this change.
> 
>  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 7ed94a3db..99a58ed26 100644
> --- a/drivers/hwmon/dell-smm-hwmon.c
> +++ b/drivers/hwmon/dell-smm-hwmon.c
> @@ -1639,6 +1639,14 @@ static const struct dmi_system_id i8k_whitelist_fan_control[] __initconst = {
>  		},
>  		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_34A3_35A3],
>  	},
> +	{
> +		.ident = "Dell Precision 3650 Tower",
> +		.matches = {
> +			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Precision 3650 Tower"),
> +		},
> +		.driver_data = (void *)&i8k_fan_control_data[I8K_FAN_30A3_31A3],
> +	},
>  	{
>  		.ident = "Dell Optiplex 7090",
>  		.matches = {
> -- 
> 2.53.0
>