static ssize_t ser_main_regs_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
int i = 0;
unsigned char reg_value = 0;
struct i2c_client *client = to_i2c_client(dev);
if (buf == NULL) {
ds941_debugerr("buff is null");
return -EINVAL;
}
memset(buf, 0, PAGE_SIZE);
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "[main_reg_list:]\n");
for(i=0; i <= SER_MAIN_REG_MAXCNT; i++){
reg_value = ds941_read_reg(client, i);
if((i + 1) % 4 == 0){
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "0x%02x--0x%02x\n", i, reg_value);
}else{
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "0x%02x--0x%02x ", i, reg_value);
}
}
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "\n");
ds941_debug("%s",buf);
return strlen(buf);
}
//[reg_addr]:[reg_val]
static ssize_t ser_main_regs_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
{
unsigned int reg_addr = 0;
unsigned int reg_val = 0;
int ret = 0;
char *p = NULL;
char reg_buf[10];
int err = 0;
struct i2c_client *client = to_i2c_client(dev);
memset(reg_buf, 0, 10);
p = strchr(buf , ':');
if(p == NULL) {
ds941_debugerr("err:can not find '!'");
return -EINVAL;
}
memcpy(reg_buf,buf, p - buf);
ret = kstrtoint(reg_buf, 16, ®_addr);
if(ret != 0){
ds941_debugerr("err:%s kstrtoint failed!", reg_buf);
return -EINVAL;
}
if(reg_addr > SER_MAIN_REG_MAXCNT) {
ds941_debugerr("err:your input [%s] is too big!",reg_buf);
return -EINVAL;
}
ret = kstrtoint(p + 1, 16, ®_val);
if(ret != 0){
ds941_debugerr("err:%s kstrtoint failed!", p + 1);
return -EINVAL;
}
ds941_debug("reg[0x%x] = 0x%x", reg_addr,reg_val);
//err = c52_quadpanel_i2c_write_reg(client, client->addr, reg_addr, reg_val);
err = ds941_i2c_write_reg(client, reg_addr, reg_val);
return count;
}
static ssize_t deser_regs_show_port0(struct device *dev,
struct device_attribute *attr, char *buf)
{
int i = 0;
int ret = 0;
int err = -1;
unsigned char reg_value = 0;
unsigned char ds90ub948_7bit_addr = 0;
struct i2c_client *client = to_i2c_client(dev);
if (buf == NULL) {
ds941_debugerr("buff is null");
return -EINVAL;
}
if (NULL == client) {
ds941_debugerr("i2c client not registered!");
return -EINVAL;
}
memset(buf, 0, PAGE_SIZE);
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "[deser_reg_list:]\n");
ret = get_948_addr_from_941(client, &ds90ub948_7bit_addr);
if(ret < 0) {
ds941_debugerr("get_948_addr_from_941 failed!\n");
return -EINVAL;
}
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "deser_addr = 0x%x\n", ds90ub948_7bit_addr);
for(i=0; i <= DESER_REG_MAXCNT; i++) {
quadpanel_i2c_read_reg_addr(client, ds90ub948_7bit_addr, i, ®_value);
if((i + 1) % 4 == 0) {
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "0x%02x--0x%02x\n", i, reg_value);
} else {
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "0x%02x--0x%02x ", i, reg_value);
}
}
snprintf(buf + strlen(buf), PAGE_SIZE - strlen(buf), "\n");
ds941_debug("%s",buf);
return strlen(buf);
}
/* echo reg_addr:reg_val > deser_reg */
static ssize_t deser_regs_store_port0(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
{
unsigned int reg_addr = 0;
unsigned int reg_val = 0;
unsigned char reg_value = 0;
int ret = 0;
char *p = NULL;
char reg_buf[10];
unsigned char ds90ub948_7bit_addr = 0;
struct i2c_client *client = to_i2c_client(dev);
if (NULL == client) {
ds941_debugerr("i2c client not registered!");
return -EINVAL;
}
memset(reg_buf,0,10);
p = strchr(buf ,':');
if(p == NULL) {
ds941_debugerr("err:can not find '!'");
return -EINVAL;
}
memcpy(reg_buf, buf, p - buf);
ret = kstrtoint(reg_buf, 16, ®_addr);
if(ret != 0){
ds941_debugerr("err:%s kstrtoint failed!", reg_buf);
return -EINVAL;
}
if(reg_addr > DESER_REG_MAXCNT) {
ds941_debugerr("err:your input [%s] is too big!", reg_buf);
return -EINVAL;
}
ret = kstrtoint(p + 1, 16, ®_val);
if(ret != 0){
ds941_debugerr("err:%s kstrtoint failed!",p + 1);
return -EINVAL;
}
ds941_debug("write deser_reg[0x%x]--val[0x%x]", reg_addr, reg_val);
ret = get_948_addr_from_941(client, &ds90ub948_7bit_addr);
if(ret < 0) {
ds941_debugerr("get_948_addr_from_941 failed!");
return -EINVAL;
}
ret = quadpanel_i2c_write_reg(client, ds90ub948_7bit_addr, reg_addr, reg_val);
return count;
}
sysfs code
于 2022-03-04 21:02:11 首次发布