diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2023-07-12 17:51:15 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2023-07-12 17:51:15 +0200 |
| commit | 71ffc9684cf296876e1d28d8ef560c4ad88fdbef (patch) | |
| tree | 3572ec9c0e1f6258aa4592127b1f28aa21d71fd4 | |
| parent | 40b962ccf23876f32c8456c5a88be315e299e6df (diff) | |
Minor changes
| -rw-r--r-- | ina260.c | 96 |
1 files changed, 44 insertions, 52 deletions
@@ -215,32 +215,36 @@ static ssize_t attr_field_show(struct kobject *_kobj, static int ina260_write_field3(struct client_data *cdata, unsigned char reg, unsigned char n, int value3bits){ int mask, value; - if(value3bits>=0 && value3bits <8){ - if(ina260_read_register(cdata,reg,&value)) - return 1; - mask=~(0x7 << n); - value &= mask; // clear bits - value |= value3bits << n; - if(ina260_write_register(cdata,reg,value)) - return 1; - return 0; - } - return -EINVAL; + if(!(value3bits>=0 && value3bits <8)) + return -EINVAL; + // Fetch register value: + if(ina260_read_register(cdata,reg,&value)) + return 1; + // Write bits: + mask=~(0x7 << n); + value &= mask; // clear bits + value |= value3bits << n; + // Write register value: + if(ina260_write_register(cdata,reg,value)) + return 1; + return 0; } static int ina260_write_field1(struct client_data *cdata, unsigned char reg, unsigned char n, int bit){ int mask, value; - if(bit==0 || bit == 1){ - if(ina260_read_register(cdata,reg,&value)) - return 1; - mask=~(1<< n); - value &= mask; // clear bits - value |= bit << n; - if(ina260_write_register(cdata,reg,value)) - return 1; - return 0; - } - return -EINVAL; + if(!(bit==0 || bit == 1)) + return -EINVAL; + // Fetch register value: + if(ina260_read_register(cdata,reg,&value)) + return 1; + // Set bit: + mask=~(1<< n); + value &= mask; // clear bit + value |= bit << n; + // Write register value + if(ina260_write_register(cdata,reg,value)) + return 1; + return 0; } static ssize_t attr_field_store(struct kobject *_kobj, @@ -248,52 +252,40 @@ static ssize_t attr_field_store(struct kobject *_kobj, const char *buf, size_t count) { struct client_data *cdata=container_of(_kobj,struct client_data,kobj); - int data=0; + int data=0, ret=count; unsigned char reg=INA260_REG_CONFIGURATION; + // Extract user supplied value if(kstrtoint(buf, 10,&data)) return -EINVAL; + // Store: if(INA260_IS_ATTR(reset) && data!=0){ - if(ina260_write_register(cdata, reg, 0xFFFF)) - return -1; + ret=ina260_write_register(cdata, reg, 0xFFFF); } else if(INA260_IS_ATTR(avg)){ - if(ina260_write_field3(cdata,reg,9,data)) - return -EINVAL; + ret=ina260_write_field3(cdata,reg,9,data); } else if(INA260_IS_ATTR(mode)){ - if(ina260_write_field3(cdata,reg,0,data)) - return -EINVAL; + ret=ina260_write_field3(cdata,reg,0,data); } else if(INA260_IS_ATTR(ishct)){ - if(ina260_write_field3(cdata,reg,3,data)) - return -EINVAL; + ret=ina260_write_field3(cdata,reg,3,data); } else if(INA260_IS_ATTR(vbusct)){ - if(ina260_write_field3(cdata,reg,6,data)) - return -EINVAL; + ret=ina260_write_field3(cdata,reg,6,data); } else if(INA260_IS_ATTR(ocl)){ - if(ina260_write_field1(cdata,reg,15,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,15,data); } else if(INA260_IS_ATTR(ucl)){ - if(ina260_write_field1(cdata,reg,14,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,14,data); } else if(INA260_IS_ATTR(bol)){ - if(ina260_write_field1(cdata,reg,13,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,13,data); } else if(INA260_IS_ATTR(bul)){ - if(ina260_write_field1(cdata,reg,12,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,12,data); } else if(INA260_IS_ATTR(pol)){ - if(ina260_write_field1(cdata,reg,11,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,11,data); } else if(INA260_IS_ATTR(cnvr)){ - if(ina260_write_field1(cdata,reg,10,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,10,data); } else if(INA260_IS_ATTR(apol)){ - if(ina260_write_field1(cdata,reg,1,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,1,data); } else if(INA260_IS_ATTR(len)){ - if(ina260_write_field1(cdata,reg,0,data)) - return -EINVAL; + ret=ina260_write_field1(cdata,reg,0,data); } - - return count; + return ret ? ret: count; } @@ -472,4 +464,4 @@ module_exit(ina260_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Loïc Guegan"); MODULE_DESCRIPTION("INA260 Texas Instruments"); -MODULE_VERSION("1.0");
\ No newline at end of file +MODULE_VERSION("1.0"); |
