mirror of https://github.com/armbian/build.git
meson64-6.17: reworked hwmon-emc2305-fixups-for-driver.patch; thanks to pyavitz
Co-authored-by: Patrick Yavitz <pyavitz@gmail.com>
This commit is contained in:
parent
bd862d0873
commit
2637ec73c5
|
|
@ -1,7 +1,7 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Yavitz <pyavitz@gmail.com>
|
||||
Date: Wed, 9 Apr 2025 04:34:27 -0400
|
||||
Subject: hwmon: emc2305: fixups for driver
|
||||
From 0d77bfb43c27fd94f58f4d6981839aee290dd694 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Sat, 16 Aug 2025 20:34:59 -0400
|
||||
Subject: [PATCH] hwmon: emc2305: fixups for driver submitted to mailing lists
|
||||
|
||||
The driver had a number of issues, checkpatch warnings/errors,
|
||||
and other limitations, so fix these up to make it usable.
|
||||
|
|
@ -33,16 +33,16 @@ As this is all downstream only, revert to u8 to match 5.15.
|
|||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 110 +++++++++-
|
||||
1 file changed, 104 insertions(+), 6 deletions(-)
|
||||
drivers/hwmon/emc2305.c | 111 ++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 107 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/hwmon/emc2305.c b/drivers/hwmon/emc2305.c
|
||||
index 111111111111..222222222222 100644
|
||||
index 60809289f816..66ba8800970c 100644
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -12,12 +12,13 @@
|
||||
#include <linux/platform_data/emc2305.h>
|
||||
#include <linux/thermal.h>
|
||||
@@ -15,12 +15,13 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/util_macros.h>
|
||||
|
||||
+#define EMC2305_REG_FAN_STATUS 0x24
|
||||
+#define EMC2305_REG_FAN_STALL_STATUS 0x25
|
||||
|
|
@ -55,7 +55,7 @@ index 111111111111..222222222222 100644
|
|||
#define EMC2305_VENDOR 0x5d
|
||||
#define EMC2305_REG_PRODUCT_ID 0xfd
|
||||
#define EMC2305_TACH_REGS_UNUSE_BITS 3
|
||||
@@ -36,6 +37,7 @@
|
||||
@@ -45,6 +46,7 @@
|
||||
#define EMC2305_RPM_FACTOR 3932160
|
||||
|
||||
#define EMC2305_REG_FAN_DRIVE(n) (0x30 + 0x10 * (n))
|
||||
|
|
@ -63,15 +63,15 @@ index 111111111111..222222222222 100644
|
|||
#define EMC2305_REG_FAN_MIN_DRIVE(n) (0x38 + 0x10 * (n))
|
||||
#define EMC2305_REG_FAN_TACH(n) (0x3e + 0x10 * (n))
|
||||
|
||||
@@ -100,6 +102,7 @@ struct emc2305_data {
|
||||
u8 pwm_num;
|
||||
@@ -117,6 +119,7 @@ struct emc2305_data {
|
||||
u8 pwm_polarity_mask;
|
||||
bool pwm_separate;
|
||||
u8 pwm_min[EMC2305_PWM_MAX];
|
||||
+ u8 pwm_max;
|
||||
u16 pwm_freq[EMC2305_PWM_MAX];
|
||||
struct emc2305_cdev_data cdev_data[EMC2305_PWM_MAX];
|
||||
};
|
||||
|
||||
@@ -112,6 +115,8 @@ static char *emc2305_fan_name[] = {
|
||||
@@ -130,6 +133,8 @@ static char *emc2305_fan_name[] = {
|
||||
"emc2305_fan5",
|
||||
};
|
||||
|
||||
|
|
@ -80,7 +80,7 @@ index 111111111111..222222222222 100644
|
|||
static int emc2305_get_max_channel(const struct emc2305_data *data)
|
||||
{
|
||||
return data->pwm_num;
|
||||
@@ -270,7 +275,7 @@ static int emc2305_set_pwm(struct device *dev, long val, int channel)
|
||||
@@ -288,7 +293,7 @@ static int emc2305_set_pwm(struct device *dev, long val, int channel)
|
||||
struct i2c_client *client = data->client;
|
||||
int ret;
|
||||
|
||||
|
|
@ -89,7 +89,7 @@ index 111111111111..222222222222 100644
|
|||
return -EINVAL;
|
||||
|
||||
ret = i2c_smbus_write_byte_data(client, EMC2305_REG_FAN_DRIVE(channel), val);
|
||||
@@ -281,6 +286,49 @@ static int emc2305_set_pwm(struct device *dev, long val, int channel)
|
||||
@@ -299,6 +304,49 @@ static int emc2305_set_pwm(struct device *dev, long val, int channel)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -136,32 +136,30 @@ index 111111111111..222222222222 100644
|
|||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int emc2305_set_single_tz(struct device *dev, int idx)
|
||||
static int emc2305_set_single_tz(struct device *dev, struct device_node *fan_node, int idx)
|
||||
{
|
||||
struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
@@ -290,9 +338,16 @@ static int emc2305_set_single_tz(struct device *dev, int idx)
|
||||
@@ -308,10 +356,16 @@ static int emc2305_set_single_tz(struct device *dev, struct device_node *fan_nod
|
||||
cdev_idx = (idx) ? idx - 1 : 0;
|
||||
pwm = data->pwm_min[cdev_idx];
|
||||
|
||||
- data->cdev_data[cdev_idx].cdev =
|
||||
- devm_thermal_of_cooling_device_register(dev, dev->of_node,
|
||||
- emc2305_fan_name[idx], data,
|
||||
+ if (dev->of_node)
|
||||
+ data->cdev_data[cdev_idx].cdev =
|
||||
+ devm_thermal_of_cooling_device_register(dev, dev->of_node,
|
||||
+ emc2305_fan_name[idx],
|
||||
+ data,
|
||||
+ &emc2305_cooling_ops);
|
||||
devm_thermal_of_cooling_device_register(dev, fan_node,
|
||||
emc2305_fan_name[idx], data,
|
||||
&emc2305_cooling_ops);
|
||||
+ else
|
||||
+ data->cdev_data[cdev_idx].cdev =
|
||||
+ thermal_cooling_device_register(emc2305_fan_name[idx],
|
||||
+ data,
|
||||
&emc2305_cooling_ops);
|
||||
+ &emc2305_cooling_ops);
|
||||
|
||||
if (IS_ERR(data->cdev_data[cdev_idx].cdev)) {
|
||||
@@ -337,9 +392,26 @@ static int emc2305_set_tz(struct device *dev)
|
||||
dev_err(dev, "Failed to register cooling device %s\n", emc2305_fan_name[idx]);
|
||||
@@ -355,9 +409,26 @@ static int emc2305_set_tz(struct device *dev)
|
||||
for (i = 0; i < data->pwm_num; i++) {
|
||||
ret = emc2305_set_single_tz(dev, i + 1);
|
||||
ret = emc2305_set_single_tz(dev, dev->of_node, i + 1);
|
||||
if (ret)
|
||||
- return ret;
|
||||
+ goto thermal_cooling_device_register_fail;
|
||||
|
|
@ -187,11 +185,25 @@ index 111111111111..222222222222 100644
|
|||
}
|
||||
|
||||
static umode_t
|
||||
@@ -561,11 +633,18 @@ static int emc2305_probe(struct i2c_client *client)
|
||||
data->pwm_separate = pdata->pwm_separate;
|
||||
for (i = 0; i < EMC2305_PWM_MAX; i++)
|
||||
data->pwm_min[i] = pdata->pwm_min[i];
|
||||
+ data->pwm_max = EMC2305_FAN_MAX;
|
||||
@@ -657,6 +728,7 @@ static int emc2305_probe(struct i2c_client *client)
|
||||
data->pwm_min[i] = pdata->pwm_min[i];
|
||||
data->pwm_freq[i] = pdata->pwm_freq[i];
|
||||
}
|
||||
+ data->pwm_max = EMC2305_FAN_MAX;
|
||||
} else {
|
||||
data->max_state = EMC2305_FAN_MAX_STATE;
|
||||
data->pwm_separate = false;
|
||||
@@ -666,12 +738,24 @@ static int emc2305_probe(struct i2c_client *client)
|
||||
data->pwm_min[i] = EMC2305_FAN_MIN;
|
||||
data->pwm_freq[i] = base_freq_table[3];
|
||||
}
|
||||
+ data->pwm_max = EMC2305_FAN_MAX;
|
||||
+ if (dev->of_node) {
|
||||
+ ret = emc2305_get_tz_of(dev);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
data->max_state = EMC2305_FAN_MAX_STATE;
|
||||
data->pwm_separate = false;
|
||||
|
|
@ -206,7 +218,7 @@ index 111111111111..222222222222 100644
|
|||
}
|
||||
|
||||
data->hwmon_dev = devm_hwmon_device_register_with_info(dev, "emc2305", data,
|
||||
@@ -586,21 +665,40 @@ static int emc2305_probe(struct i2c_client *client)
|
||||
@@ -713,21 +797,40 @@ static int emc2305_probe(struct i2c_client *client)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -248,5 +260,5 @@ index 111111111111..222222222222 100644
|
|||
};
|
||||
|
||||
--
|
||||
Armbian
|
||||
2.43.0
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue