i2c驱动debug

probe:
         device_create_file(&i2c->dev, &dev_attr_reg); 创建节点;

定义节点:

         static DEVICE_ATTR(reg, 0664, reg_show, reg_store);

创建寄存器数组,方便读取:

reg[] = {………………};

寄存器读取函数

static ssize_t reg_show(struct device *dev, struct device_attribute *attr,
                char *buf){
        int i, n;
        for(i = 0; i < 80; i++){
                n = snd_soc_component_read32(component_debug, reg[i]);
                printk("  reg 0x%x = %x\n", rt5651_reg[i].reg, n);
        }
        return 0;
}
数据转换函数:
int change(char c){
        if(c == '0')
                return 0;
        else if(c == '1')
                return 1;
        else if(c == '2')
                return 2;
        else if(c == '3')
                return 3;
        else if(c == '4')
                return 4;
        else if(c == '5')
                return 5;
        else if(c == '6')
                return 6;
        else if(c == '7')
                return 7;
        else if(c == '8')
                return 8;
        else if(c == '9')
                return 9;
        else if(c == 'a')
                return 10;
        else if(c == 'b')
                return 11;
        else if(c == 'c')
                return 12;
        else if(c == 'd')
                return 13;
        else if(c == 'e')
                return 14;
        else if(c == 'f')
                return 15;
        else
                return 0;
}
寄存器操作:(echo regval > reg, 例如写0x0001 到0x01 就echo 010001 > reg)
 

static ssize_t reg_store(struct device *dev, struct device_attribute *attr,
                const char *buf, size_t size)
{
        int reg, val;

        struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component_debug);
        printk("DICKE printk %s \n", &buf);


        reg = change(buf[0])*16 +  change(buf[1]);
        val = (change(buf[2]))*16*16*16 + (change(buf[3]))*16*16 + (change(buf[4])) * 16 +(change(buf[5]));
        printk("DICKE printk reg = 0x%x, val = %x\n", reg, val);
        if((reg == 0x01)&&(val == 0xffff)){
        rt5651_enable_micbias1_for_ovcd(component_debug);
        }else if((reg == 0x01)&&(val == 0x0000)){
        rt5651_disable_micbias1_for_ovcd(component_debug);
        }else
        regmap_write(rt5651->regmap, reg, val);
        return size;
}
两个函数返回值,最好为size。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值