linux Regmap API寄存器映射抽象

RegmapAPI通过统一的接口简化了对SPI和I2C设备寄存器的读写操作,减少了冗余代码。它包括regmap_config结构体,用于配置设备的寄存器属性,并提供了如regmap_write、regmap_read等便捷函数。Regmap还支持缓存机制和多种缓存类型,优化了读取性能。

        在引入ragmap API之前,SPI内核和I2C内核是独立的,二者有需要冗余代码。在引入Regmap API之后,无论是SPI还是I2C设备,只需要初始化配置Regmap,旧可以处理所有的读写修改操作。

        Regmap API很简单,其中最重要的是两个结构struct regmap_config(代表regmap配置) 和struct regmap(代表regmap实例本身)。

1. regmap_config结构

        struct regmap_config在驱动程序生命周期内保存Regmap配置,这些设置会影响读/写操作。

struct regmap_config {
    char *name;
    int reg_bits;  // 寄存器地址的位数
    int reg_stride;
    int pad_bits;
    int val_bits; // 寄存器值的位数

    bool (*writable_reg)(struct device *dev, uint reg); // 在写入Reg之前,会调用检查是否可写
    bool (*readable_reg)(struct device *dev, uint reg);// 在写入Reg之前,会调用检查是否可读
    bool (*volatile_reg)(struct device *dev, uint reg); // 检查寄存器是否是易失的,确定是否使用缓存
    bool (*precious_reg)(struct device *dev, uint reg);
    regmap_lock lock;
    regmap_unlock unlock;
    void *lock_arg;

    int (*reg_read)(void *context, uint reg, uint *val); // 在寄存器不支持简单的I2c/SPI读取操作时,需要自定
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值