* [PATCH v2 0/2] hwmon: (dell-smm) Support additional attributes
@ 2021-09-24 11:45 W_Armin
2021-09-24 11:45 ` [PATCH v2 1/2] hwmon: (dell-smm) Add support for fanX_min, fanX_max and fanX_target W_Armin
2021-09-24 11:45 ` [PATCH v2 2/2] hwmon: (dell-smm) Remove unnecessary includes W_Armin
0 siblings, 2 replies; 4+ messages in thread
From: W_Armin @ 2021-09-24 11:45 UTC (permalink / raw)
To: pali; +Cc: linux, jdelvare, linux-hwmon
From: Armin Wolf <W_Armin@gmx.de>
This patch series adds support for fanX_min, fanX_max and fanX_target.
A second patch also removes some unnecessary includes.
Both patches where tested on a Dell Inspiron 3505 and
a Dell Latitude C600.
Changes in v2:
- update documentation
- prevent out-of-bounds read/write when module is loaded with
custom fan_max value
Armin Wolf (2):
hwmon: (dell-smm) Add support for fanX_min, fanX_max and fanX_target
hwmon: (dell-smm) Remove unnecessary includes
Documentation/hwmon/dell-smm-hwmon.rst | 3 ++
drivers/hwmon/dell-smm-hwmon.c | 65 ++++++++++++++++++++++----
2 files changed, 60 insertions(+), 8 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] hwmon: (dell-smm) Add support for fanX_min, fanX_max and fanX_target
2021-09-24 11:45 [PATCH v2 0/2] hwmon: (dell-smm) Support additional attributes W_Armin
@ 2021-09-24 11:45 ` W_Armin
2021-09-24 11:45 ` [PATCH v2 2/2] hwmon: (dell-smm) Remove unnecessary includes W_Armin
1 sibling, 0 replies; 4+ messages in thread
From: W_Armin @ 2021-09-24 11:45 UTC (permalink / raw)
To: pali; +Cc: linux, jdelvare, linux-hwmon
From: Armin Wolf <W_Armin@gmx.de>
The nominal speed of each fan can be obtained with
i8k_get_fan_nominal_speed(), however the result is not available
from userspace.
Change that by adding fanX_min, fanX_max and fanX_target attributes.
All are RO since fan control happens over pwm.
Tested on a Dell Inspiron 3505 and a Dell Latitude C600.
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
Documentation/hwmon/dell-smm-hwmon.rst | 3 ++
drivers/hwmon/dell-smm-hwmon.c | 63 +++++++++++++++++++++++---
2 files changed, 60 insertions(+), 6 deletions(-)
diff --git a/Documentation/hwmon/dell-smm-hwmon.rst b/Documentation/hwmon/dell-smm-hwmon.rst
index 3bf77a5df995..beec88491171 100644
--- a/Documentation/hwmon/dell-smm-hwmon.rst
+++ b/Documentation/hwmon/dell-smm-hwmon.rst
@@ -34,6 +34,9 @@ Name Perm Description
=============================== ======= =======================================
fan[1-3]_input RO Fan speed in RPM.
fan[1-3]_label RO Fan label.
+fan[1-3]_min RO Minimal Fan speed in RPM
+fan[1-3]_max RO Maximal Fan speed in RPM
+fan[1-3]_target RO Expected Fan speed in RPM
pwm[1-3] RW Control the fan PWM duty-cycle.
pwm1_enable WO Enable or disable automatic BIOS fan
control (not supported on all laptops,
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index 774c1b0715d9..d7d8da4a63db 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -76,6 +76,7 @@ struct dell_smm_data {
int temp_type[DELL_SMM_NO_TEMP];
bool fan[DELL_SMM_NO_FANS];
int fan_type[DELL_SMM_NO_FANS];
+ int *fan_nominal_speed[DELL_SMM_NO_FANS];
};
MODULE_AUTHOR("Massimo Dal Zotto (dz@debian.org)");
@@ -673,6 +674,13 @@ static umode_t dell_smm_is_visible(const void *drvdata, enum hwmon_sensor_types
if (data->fan[channel] && !data->disallow_fan_type_call)
return 0444;
+ break;
+ case hwmon_fan_min:
+ case hwmon_fan_max:
+ case hwmon_fan_target:
+ if (data->fan[channel] && data->fan_nominal_speed[channel])
+ return 0444;
+
break;
default:
break;
@@ -740,6 +748,25 @@ static int dell_smm_read(struct device *dev, enum hwmon_sensor_types type, u32 a
*val = ret;
+ return 0;
+ case hwmon_fan_min:
+ *val = data->fan_nominal_speed[channel][0];
+
+ return 0;
+ case hwmon_fan_max:
+ *val = data->fan_nominal_speed[channel][data->i8k_fan_max];
+
+ return 0;
+ case hwmon_fan_target:
+ ret = i8k_get_fan_status(data, channel);
+ if (ret < 0)
+ return ret;
+
+ if (ret > data->i8k_fan_max)
+ ret = data->i8k_fan_max;
+
+ *val = data->fan_nominal_speed[channel][ret];
+
return 0;
default:
break;
@@ -889,9 +916,12 @@ static const struct hwmon_channel_info *dell_smm_info[] = {
HWMON_T_INPUT | HWMON_T_LABEL
),
HWMON_CHANNEL_INFO(fan,
- HWMON_F_INPUT | HWMON_F_LABEL,
- HWMON_F_INPUT | HWMON_F_LABEL,
- HWMON_F_INPUT | HWMON_F_LABEL
+ HWMON_F_INPUT | HWMON_F_LABEL | HWMON_F_MIN | HWMON_F_MAX |
+ HWMON_F_TARGET,
+ HWMON_F_INPUT | HWMON_F_LABEL | HWMON_F_MIN | HWMON_F_MAX |
+ HWMON_F_TARGET,
+ HWMON_F_INPUT | HWMON_F_LABEL | HWMON_F_MIN | HWMON_F_MAX |
+ HWMON_F_TARGET
),
HWMON_CHANNEL_INFO(pwm,
HWMON_PWM_INPUT | HWMON_PWM_ENABLE,
@@ -910,7 +940,7 @@ static int __init dell_smm_init_hwmon(struct device *dev)
{
struct dell_smm_data *data = dev_get_drvdata(dev);
struct device *dell_smm_hwmon_dev;
- int i, err;
+ int i, state, err;
for (i = 0; i < DELL_SMM_NO_TEMP; i++) {
data->temp_type[i] = i8k_get_temp_type(i);
@@ -926,8 +956,29 @@ static int __init dell_smm_init_hwmon(struct device *dev)
err = i8k_get_fan_status(data, i);
if (err < 0)
err = i8k_get_fan_type(data, i);
- if (err >= 0)
- data->fan[i] = true;
+
+ if (err < 0)
+ continue;
+
+ data->fan[i] = true;
+ data->fan_nominal_speed[i] = devm_kmalloc_array(dev, data->i8k_fan_max + 1,
+ sizeof(*data->fan_nominal_speed[i]),
+ GFP_KERNEL);
+ if (!data->fan_nominal_speed[i])
+ continue;
+
+ for (state = 0; state <= data->i8k_fan_max; state++) {
+ err = i8k_get_fan_nominal_speed(data, i, state);
+ if (err < 0)
+ break;
+
+ data->fan_nominal_speed[i][state] = err;
+ }
+ /* Mark nominal speed table as invalid in case of error */
+ if (state <= data->i8k_fan_max) {
+ devm_kfree(dev, data->fan_nominal_speed[i]);
+ data->fan_nominal_speed[i] = NULL;
+ }
}
dell_smm_hwmon_dev = devm_hwmon_device_register_with_info(dev, "dell_smm", data,
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] hwmon: (dell-smm) Remove unnecessary includes
2021-09-24 11:45 [PATCH v2 0/2] hwmon: (dell-smm) Support additional attributes W_Armin
2021-09-24 11:45 ` [PATCH v2 1/2] hwmon: (dell-smm) Add support for fanX_min, fanX_max and fanX_target W_Armin
@ 2021-09-24 11:45 ` W_Armin
2021-09-24 12:05 ` Pali Rohár
1 sibling, 1 reply; 4+ messages in thread
From: W_Armin @ 2021-09-24 11:45 UTC (permalink / raw)
To: pali; +Cc: linux, jdelvare, linux-hwmon
From: Armin Wolf <W_Armin@gmx.de>
sched.h and io.h are not used anywhere in dell-smm-hwmon.c.
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
drivers/hwmon/dell-smm-hwmon.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index d7d8da4a63db..30be7e5574a3 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -26,8 +26,6 @@
#include <linux/mutex.h>
#include <linux/hwmon.h>
#include <linux/uaccess.h>
-#include <linux/io.h>
-#include <linux/sched.h>
#include <linux/ctype.h>
#include <linux/smp.h>
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] hwmon: (dell-smm) Remove unnecessary includes
2021-09-24 11:45 ` [PATCH v2 2/2] hwmon: (dell-smm) Remove unnecessary includes W_Armin
@ 2021-09-24 12:05 ` Pali Rohár
0 siblings, 0 replies; 4+ messages in thread
From: Pali Rohár @ 2021-09-24 12:05 UTC (permalink / raw)
To: W_Armin; +Cc: linux, jdelvare, linux-hwmon
On Friday 24 September 2021 13:45:05 W_Armin@gmx.de wrote:
> From: Armin Wolf <W_Armin@gmx.de>
>
> sched.h and io.h are not used anywhere in dell-smm-hwmon.c.
>
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Reviewed-by: Pali Rohár <pali@kernel.org>
sched.h is not used anymore as driver now calls smp_call_on_cpu() function.
> ---
> drivers/hwmon/dell-smm-hwmon.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
> index d7d8da4a63db..30be7e5574a3 100644
> --- a/drivers/hwmon/dell-smm-hwmon.c
> +++ b/drivers/hwmon/dell-smm-hwmon.c
> @@ -26,8 +26,6 @@
> #include <linux/mutex.h>
> #include <linux/hwmon.h>
> #include <linux/uaccess.h>
> -#include <linux/io.h>
> -#include <linux/sched.h>
> #include <linux/ctype.h>
> #include <linux/smp.h>
>
> --
> 2.20.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-09-24 12:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 11:45 [PATCH v2 0/2] hwmon: (dell-smm) Support additional attributes W_Armin
2021-09-24 11:45 ` [PATCH v2 1/2] hwmon: (dell-smm) Add support for fanX_min, fanX_max and fanX_target W_Armin
2021-09-24 11:45 ` [PATCH v2 2/2] hwmon: (dell-smm) Remove unnecessary includes W_Armin
2021-09-24 12:05 ` Pali Rohár
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).