summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-08-12 16:35:10 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2023-08-12 16:35:10 +0200
commitb2a6cd3c65c17e3474797095c2f61d4412f07496 (patch)
tree700d28d5d882b6258ee16c0d8442df3306014719
parent87edbc6e4f7cea130951adfd32484525461f2cbf (diff)
Minor changes
-rw-r--r--.gitignore1
-rw-r--r--Makefile10
-rw-r--r--inahwmon.c50
3 files changed, 50 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
index 5086582..7fb1beb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,5 +5,4 @@
!Makefile
!.gitignore
!ina260.c
-!inahwmon.c
!README.md \ No newline at end of file
diff --git a/Makefile b/Makefile
index f96fbb5..01757ff 100644
--- a/Makefile
+++ b/Makefile
@@ -20,10 +20,20 @@ run: ina260.c
insmod ina260.ko
echo ina260 0x41 > /sys/bus/i2c/devices/i2c-2/new_device
+run2: inahwmon.c
+ -echo 0x41 > /sys/bus/i2c/devices/i2c-2/delete_device
+ -rmmod inahwmon
+ make clean
+ make
+ insmod inahwmon.ko
+ echo ina260 0x41 > /sys/bus/i2c/devices/i2c-2/new_device
+
+
read: read.c
gcc $^ -o read
clean:
rm -f ina260*.o ina260.ko ina260.mod* Module.symvers modules.order .ina260* .Module* .modules*
+ rm -f inahwmon*.o inahwmon.ko inahwmon.mod* Module.symvers modules.order .inahwmon* .Module* .modules*
.PHONY: clean run
diff --git a/inahwmon.c b/inahwmon.c
index a43d5e1..2cbaab0 100644
--- a/inahwmon.c
+++ b/inahwmon.c
@@ -4,21 +4,41 @@
#include "linux/i2c.h"
-static const struct hwmon_channel_info power = {
- .type = hwmon_power,
- .config = HWMON_P_INPUT
-};
+static int ina260_read(struct device *dev, enum hwmon_sensor_types type,
+ u32 attr, int channel, long *val)
+{
+ return 0;
+}
+static int ina260_write(struct device *dev, enum hwmon_sensor_types type,
+ u32 attr, int channel, long val)
+{
+ return 0;
+}
-static const struct hwmon_channel_info * const ina260_info[] = {
- &power,
+static umode_t ina260_is_visible(const void *drvdata,
+ enum hwmon_sensor_types type,
+ u32 attr, int channel){
+ return 0444;
+ }
+
+#define HWMON_CHANNEL_INFO(stype, ...) \
+ (&(struct hwmon_channel_info) { \
+ .type = hwmon_##stype, \
+ .config = (u32 []) { \
+ __VA_ARGS__, 0 \
+ } \
+ })
+
+static const struct hwmon_channel_info * ina260_info[] = {
+ HWMON_CHANNEL_INFO(power,HWMON_P_INPUT),
NULL
};
static const struct hwmon_ops ina260_hwmon_ops = {
- //.is_visible = ina238_is_visible,
- .read = NULL,
- .write = NULL,
+ .is_visible = ina260_is_visible,
+ .read = ina260_read,
+ .write = ina260_write,
};
static const struct hwmon_chip_info ina260_chip_info = {
@@ -26,10 +46,19 @@ static const struct hwmon_chip_info ina260_chip_info = {
.info = ina260_info,
};
+
+/*const struct attribute_group *extra_groups[] = {
+ NULL
+};*/
+
static int ina260_probe_new(struct i2c_client *client){
+ struct device *hwmon_dev;
- hwmon_device_register_with_info(&client->dev,client->name,NULL,
+ hwmon_dev=hwmon_device_register_with_info(&client->dev,client->name,NULL,
&ina260_chip_info,NULL);
+ if (IS_ERR(hwmon_dev))
+ return PTR_ERR(hwmon_dev);
+ return 0;
}
static int ina260_remove(struct i2c_client *client){
@@ -46,6 +75,7 @@ static const struct i2c_device_id ina260_ids[] = {
MODULE_DEVICE_TABLE(i2c,ina260_ids);
static struct i2c_driver ina260_driver = {
+ .class = I2C_CLASS_HWMON,
.driver = {
.name = "ina260HWMON"
},