mirror of
https://gitlab.com/manzerbredes/ina260-sysfs-driver.git
synced 2025-04-19 04:09:45 +00:00
Minor changes
This commit is contained in:
parent
40b962ccf2
commit
71ffc9684c
1 changed files with 44 additions and 52 deletions
96
ina260.c
96
ina260.c
|
@ -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){
|
static int ina260_write_field3(struct client_data *cdata, unsigned char reg, unsigned char n, int value3bits){
|
||||||
int mask, value;
|
int mask, value;
|
||||||
if(value3bits>=0 && value3bits <8){
|
if(!(value3bits>=0 && value3bits <8))
|
||||||
if(ina260_read_register(cdata,reg,&value))
|
return -EINVAL;
|
||||||
return 1;
|
// Fetch register value:
|
||||||
mask=~(0x7 << n);
|
if(ina260_read_register(cdata,reg,&value))
|
||||||
value &= mask; // clear bits
|
return 1;
|
||||||
value |= value3bits << n;
|
// Write bits:
|
||||||
if(ina260_write_register(cdata,reg,value))
|
mask=~(0x7 << n);
|
||||||
return 1;
|
value &= mask; // clear bits
|
||||||
return 0;
|
value |= value3bits << n;
|
||||||
}
|
// Write register value:
|
||||||
return -EINVAL;
|
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){
|
static int ina260_write_field1(struct client_data *cdata, unsigned char reg, unsigned char n, int bit){
|
||||||
int mask, value;
|
int mask, value;
|
||||||
if(bit==0 || bit == 1){
|
if(!(bit==0 || bit == 1))
|
||||||
if(ina260_read_register(cdata,reg,&value))
|
return -EINVAL;
|
||||||
return 1;
|
// Fetch register value:
|
||||||
mask=~(1<< n);
|
if(ina260_read_register(cdata,reg,&value))
|
||||||
value &= mask; // clear bits
|
return 1;
|
||||||
value |= bit << n;
|
// Set bit:
|
||||||
if(ina260_write_register(cdata,reg,value))
|
mask=~(1<< n);
|
||||||
return 1;
|
value &= mask; // clear bit
|
||||||
return 0;
|
value |= bit << n;
|
||||||
}
|
// Write register value
|
||||||
return -EINVAL;
|
if(ina260_write_register(cdata,reg,value))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t attr_field_store(struct kobject *_kobj,
|
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)
|
const char *buf, size_t count)
|
||||||
{
|
{
|
||||||
struct client_data *cdata=container_of(_kobj,struct client_data,kobj);
|
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;
|
unsigned char reg=INA260_REG_CONFIGURATION;
|
||||||
|
// Extract user supplied value
|
||||||
if(kstrtoint(buf, 10,&data))
|
if(kstrtoint(buf, 10,&data))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
// Store:
|
||||||
if(INA260_IS_ATTR(reset) && data!=0){
|
if(INA260_IS_ATTR(reset) && data!=0){
|
||||||
if(ina260_write_register(cdata, reg, 0xFFFF))
|
ret=ina260_write_register(cdata, reg, 0xFFFF);
|
||||||
return -1;
|
|
||||||
} else if(INA260_IS_ATTR(avg)){
|
} else if(INA260_IS_ATTR(avg)){
|
||||||
if(ina260_write_field3(cdata,reg,9,data))
|
ret=ina260_write_field3(cdata,reg,9,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(mode)){
|
} else if(INA260_IS_ATTR(mode)){
|
||||||
if(ina260_write_field3(cdata,reg,0,data))
|
ret=ina260_write_field3(cdata,reg,0,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(ishct)){
|
} else if(INA260_IS_ATTR(ishct)){
|
||||||
if(ina260_write_field3(cdata,reg,3,data))
|
ret=ina260_write_field3(cdata,reg,3,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(vbusct)){
|
} else if(INA260_IS_ATTR(vbusct)){
|
||||||
if(ina260_write_field3(cdata,reg,6,data))
|
ret=ina260_write_field3(cdata,reg,6,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(ocl)){
|
} else if(INA260_IS_ATTR(ocl)){
|
||||||
if(ina260_write_field1(cdata,reg,15,data))
|
ret=ina260_write_field1(cdata,reg,15,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(ucl)){
|
} else if(INA260_IS_ATTR(ucl)){
|
||||||
if(ina260_write_field1(cdata,reg,14,data))
|
ret=ina260_write_field1(cdata,reg,14,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(bol)){
|
} else if(INA260_IS_ATTR(bol)){
|
||||||
if(ina260_write_field1(cdata,reg,13,data))
|
ret=ina260_write_field1(cdata,reg,13,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(bul)){
|
} else if(INA260_IS_ATTR(bul)){
|
||||||
if(ina260_write_field1(cdata,reg,12,data))
|
ret=ina260_write_field1(cdata,reg,12,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(pol)){
|
} else if(INA260_IS_ATTR(pol)){
|
||||||
if(ina260_write_field1(cdata,reg,11,data))
|
ret=ina260_write_field1(cdata,reg,11,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(cnvr)){
|
} else if(INA260_IS_ATTR(cnvr)){
|
||||||
if(ina260_write_field1(cdata,reg,10,data))
|
ret=ina260_write_field1(cdata,reg,10,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(apol)){
|
} else if(INA260_IS_ATTR(apol)){
|
||||||
if(ina260_write_field1(cdata,reg,1,data))
|
ret=ina260_write_field1(cdata,reg,1,data);
|
||||||
return -EINVAL;
|
|
||||||
} else if(INA260_IS_ATTR(len)){
|
} else if(INA260_IS_ATTR(len)){
|
||||||
if(ina260_write_field1(cdata,reg,0,data))
|
ret=ina260_write_field1(cdata,reg,0,data);
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
|
return ret ? ret: count;
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -472,4 +464,4 @@ module_exit(ina260_exit);
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("Loïc Guegan");
|
MODULE_AUTHOR("Loïc Guegan");
|
||||||
MODULE_DESCRIPTION("INA260 Texas Instruments");
|
MODULE_DESCRIPTION("INA260 Texas Instruments");
|
||||||
MODULE_VERSION("1.0");
|
MODULE_VERSION("1.0");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue