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, }; -static int ina260_probe_new(struct i2c_client *client){ - hwmon_device_register_with_info(&client->dev,client->name,NULL, +/*const struct attribute_group *extra_groups[] = { + NULL +};*/ + +static int ina260_probe_new(struct i2c_client *client){ + struct device *hwmon_dev; + + 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" },