diff --git a/Makefile b/Makefile index abd609a..07e6bfe 100755 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ run: ina260.c - rmmod ina260 make clean make - insmod ina260 + insmod ina260.ko echo ina260 $(TEST_DEV_ADDR) > /sys/bus/i2c/devices/i2c-2/new_device run-full: ina2602.c @@ -21,7 +21,7 @@ run-full: ina2602.c - rmmod ina260_full make clean make - insmod ina260_full + insmod ina260_full.ko echo ina260 $(TEST_DEV_ADDR) > /sys/bus/i2c/devices/i2c-2/new_device clean: diff --git a/ina260.c b/ina260.c index aaed6b3..e77f377 100755 --- a/ina260.c +++ b/ina260.c @@ -28,8 +28,9 @@ static struct regmap_config ina260_regmap_config = { #define INA260_REG_SHOW(_attr,_reg) \ static ssize_t _attr##_show(struct device *dev, struct device_attribute *attr, char *buf) \ { \ - int rvalue; struct client_data *cdata=dev_get_drvdata(dev); \ - if(ina260_read_register(cdata,(_reg),&rvalue)) \ + unsigned int rvalue; \ + struct client_data *cdata=dev_get_drvdata(dev); \ + if(regmap_read(cdata->regmap, (_reg), &rvalue)) \ return -1; \ return sprintf(buf, "%x\n", rvalue); \ } @@ -37,15 +38,15 @@ static ssize_t _attr##_show(struct device *dev, struct device_attribute *attr, c #define INA260_REG_STORE(_attr,_reg) \ static ssize_t _attr##_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ { \ - int uvalue; struct client_data *cdata=dev_get_drvdata(dev); \ + int uvalue; \ + struct client_data *cdata=dev_get_drvdata(dev); \ if(kstrtoint(buf, 0,&uvalue)) \ return -EINVAL; \ - if(ina260_write_register(cdata, (_reg), uvalue)) \ + if(regmap_write(cdata->regmap, (_reg), uvalue)) \ return -1; \ return count; \ } - #define HWMON_CHANNEL_INFO(stype, ...) \ (&(struct hwmon_channel_info) { \ .type = hwmon_##stype, \ @@ -54,25 +55,6 @@ static ssize_t _attr##_store(struct device *dev, struct device_attribute *attr, } \ }) -// ina260 average modes list -static int ina260_avgs[8]={ - 1,4,16,64,128,256,512,1024 -}; - -// ina260 operating modes list -static char ina260_modes[8][42]={ - "Power-Down (or Shutdown)","Shunt Current, Triggered", - "Bus Voltage, Triggered","Shunt Current and Bus Voltage, Triggered", - "Power-Down (or Shutdown)","Shunt Current, Continuous","Bus Voltage, Continuous", - "Shunt Current and Bus Voltage, Continuous" -}; - -// ina260 conversion times list -static char ina260_ishcts_vbusct[8][9]={ - "140 µs", "204 µs","332 µs", "588 µs","1.1 ms", "2.116 ms","4.156 ms","8.244 ms" -}; - - // Data attached to i2c clients struct client_data { struct i2c_client *client; @@ -94,21 +76,8 @@ MODULE_DEVICE_TABLE(i2c,ina260_ids); * @param value register content output * @return int 0 on success, 1 on communication errors */ -static int ina260_read_register(struct client_data* cdata, unsigned char reg, int *value){ - unsigned char bytes[2]; - /*if(cdata->reg == reg){ - if(i2c_master_recv(cdata->client,bytes,2)<0) - return 1; - } else { - if(i2c_master_send(cdata->client,®,1)<0) - return 1; - cdata->reg = reg; - if(i2c_master_recv(cdata->client,bytes,2)<0) - return 1; - }*/ +static int ina260_read_register(struct client_data* cdata, unsigned char reg, unsigned int *value){ return regmap_read(cdata->regmap, reg, value); - // *value=(bytes[0]<<8) | bytes[1]; - //return 0; } /** @@ -120,13 +89,7 @@ static int ina260_read_register(struct client_data* cdata, unsigned char reg, in * @return int 0 on success, 1 on communication errors */ static int ina260_write_register(struct client_data* cdata, unsigned char reg, int value){ - unsigned char data[3]; - data[0]=reg; - data[1]=(value>>8) & 0xFF; // MSB - data[2]=value & 0xFF; // LSB - if(i2c_master_send(cdata->client,data,3)<0) - return 1; - return 0; + return regmap_write(cdata->regmap, reg, value); } @@ -136,20 +99,20 @@ static int ina260_hwmon_read(struct device *dev, enum hwmon_sensor_types type, int rvalue; struct client_data *cdata=dev_get_drvdata(dev); if(type == hwmon_power){ - if(ina260_read_register(cdata, INA260_REG_POWER,&rvalue)) + if(regmap_read(cdata->regmap, INA260_REG_POWER, &rvalue)) return -1; *val=10*rvalue*1000; } else if (type == hwmon_curr){ - if(ina260_read_register(cdata, INA260_REG_CURRENT,&rvalue)) + if(regmap_read(cdata->regmap, INA260_REG_CURRENT, &rvalue)) return -1; *val=((rvalue*25/100) + rvalue)*100+(rvalue*25%100); *val/=100; } else if (type == hwmon_in){ - if(ina260_read_register(cdata, INA260_REG_VOLTAGE,&rvalue)) + if(regmap_read(cdata->regmap, INA260_REG_VOLTAGE, &rvalue)) return -1; *val=((rvalue*25/100) + rvalue)*100+(rvalue*25%100); - *val/=100; + *val/=100; // Skip remainder here } return 0;