diff --git a/.gitignore b/.gitignore index 7fb1beb..5086582 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ !Makefile !.gitignore !ina260.c +!inahwmon.c !README.md \ No newline at end of file diff --git a/Makefile b/Makefile index f76db58..f96fbb5 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,14 @@ #LML="/usr/src/linux-headers-$(shell uname -r)/" LML="/lib/modules/$(shell uname -r)/build/" # Change if required on your system -obj-m += ina260.o +obj-m += inahwmon.o -all: ina260.c +all: hwmon + +ina260: ina260.c + make -C $(LML) M=$(PWD) modules + +hwmon: inahwmon.c make -C $(LML) M=$(PWD) modules run: ina260.c diff --git a/inahwmon.c b/inahwmon.c new file mode 100644 index 0000000..a43d5e1 --- /dev/null +++ b/inahwmon.c @@ -0,0 +1,75 @@ +#include "linux/module.h" +#include "linux/kernel.h" +#include +#include "linux/i2c.h" + + +static const struct hwmon_channel_info power = { + .type = hwmon_power, + .config = HWMON_P_INPUT +}; + + +static const struct hwmon_channel_info * const ina260_info[] = { + &power, + NULL +}; + +static const struct hwmon_ops ina260_hwmon_ops = { + //.is_visible = ina238_is_visible, + .read = NULL, + .write = NULL, +}; + +static const struct hwmon_chip_info ina260_chip_info = { + .ops = &ina260_hwmon_ops, + .info = ina260_info, +}; + +static int ina260_probe_new(struct i2c_client *client){ + + hwmon_device_register_with_info(&client->dev,client->name,NULL, + &ina260_chip_info,NULL); +} + +static int ina260_remove(struct i2c_client *client){ + hwmon_device_unregister(&client->dev); + return 0; +} + + + +static const struct i2c_device_id ina260_ids[] = { + { "ina260", 0 }, + { } +}; +MODULE_DEVICE_TABLE(i2c,ina260_ids); + +static struct i2c_driver ina260_driver = { + .driver = { + .name = "ina260HWMON" + }, + .probe_new = ina260_probe_new, + .remove = ina260_remove, + .id_table = ina260_ids +}; + + +static int __init ina260_init(void){ + printk("Init\n"); + i2c_add_driver(&ina260_driver); + + return 0; +} + +static void __exit ina260_exit(void){ + printk("Quit\n"); + i2c_del_driver(&ina260_driver); +} + +module_init(ina260_init); +module_exit(ina260_exit); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Loïc Guegan"); +MODULE_DESCRIPTION("INA260 Texas Instruments"); +MODULE_VERSION("1.0");