sysfs code

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, &reg_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, &reg_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, &reg_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, &reg_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, &reg_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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值