Linux中什么是 Regmap

linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 i2c/spi 设备的本质都是一样的,通过 i2c/spi 接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如 i.mx6ull的 pwm、定时器等外设初始化,最终都是要落到寄存器的设置上。
linux 下使用 i2c_transfer 来读写 i2c 设备中的寄存器,spi 接口的话使用 spi_write/spi_read等。i2c/spi 芯片又非常的多,因此 linux 内核里面就会充斥了大量的 i2c_transfer 这类的冗余代码,再者,代码的复用性也会降低。比如 icm20608 这个芯片既支持 i2c 接口,也支持 spi 接口。假设我们在产品设计阶段一开始将 icm20608 设计为 spi 接口,但是后面发现 spi 接口不够用,或者 soc 的引脚不够用,我们需要将 icm20608 改为 i2c 接口。这个时候 icm20608 的驱动就要大改,我们需要将 spi 接口函数换为 i2c 的,工作量比较大。
基于代码复用的原则,linux 内核引入了 regmap 模型,regmap 将寄存器访问的共同逻辑抽象出来,驱动开发人员不需要再去纠结使用 spi 或者 i2c 接口 api 函数,统一使用 regmapapi 函数。这样的好处就是统一使用 regmap,降低了代码冗余,提高了驱动的可以移植性。regmap 模型的重点在于:
通过 regmap 模型提供的统一接口函数来访问器件的寄存器,soc 内部的寄存器也可以使用 regmap 接口函数来访问。
regmap 是 linux 内核为了减少慢速 i/o 在驱动上的冗余开销,提供了一种通用的接口来操作硬件寄存器。另外,regmap 在驱动和硬件之间添加了 cache,降低了低速 i/o 的操作次数,提高了访问效率,缺点是实时性会降低。
什么情况下会使用 regmap:
①、硬件寄存器操作,比如选用通过 i2c/spi 接口来读写设备的内部寄存器,或者需要读写 soc 内部的硬件寄存器。
②、提高代码复用性和驱动一致性,简化驱动开发过程。
③、减少底层 i/o 操作次数,提高访问效率。

化学机械抛光工艺(Chemical Mechanical Polishing,CMP)
中国联通IP骨干网SDN化应用实践”荣获2017年度SDN、NFV评选最佳案例奖
城市大脑是AI系统结合人类智慧的混合智能系统
如何利用艾德克斯IT2800源表快速实现MOSFET器件的I-V特性测试
元老国家宣布“退群” 全球能源格局新变化
Linux中什么是 Regmap
魅族型号为M928Q的手机通过3C认证,疑似为魅族16T
机电商会与易华录推动对外投资合作高质量发展
源测量单元支持电池测试
Oracle的数据库业务每况愈下 NoSQL和AWS出尽风头
德州仪器2019Q2收入下滑9%,是否受贸易战影响?
英特尔Kaby Lake处理器上市时间曝光
物联网产业“拐点”——物的连接超越人的连接
特斯拉大扩张背后的残酷现实
Vishay推出新款TrenchFET功率MOSFET---Si8424CDB、Si8425DB
STM32单片机RTC时钟的使用方法及步骤
Windows 10 20H2功能更新已完成,将知道部署到商用设备
科创板沃尔德独立董事强桂英介绍、履历信息
小米5C值不值得买?对比小米5和红米Note 4X就知道答案
光伏组件和并网逆变器如何功率配置