Kernel Regmap

Regmap是什么东西?
Regmap就是对i2c/spi/spmi等总线的一层封装,同时利用了缓存及压缩技术,
以期达到操作总线更简单、操作效率更高的目标。(个人认为对IO性能优化有限)


一、关于优化IO性能

Regmap读操,如果懂合理利用cache功能,是可能能提升IO性能,因为读的只是cache内容,未真正操作外设的寄存器。



Kernel Regmap
文章图片



Regmap写操作,必须去操作外设寄存器,否则操作就达不到预期效果啦。根本没有提升IO性能。


Kernel Regmap
文章图片




基于Regmap读、写操作的实现方法,总结:
对于读非主动变化寄存器(即,此类寄存器读出来的值,就上次写进去的值。)才有优化作用。
==============》这种场景情况很少吧。



对于读主动变化寄存器(比如,状态寄存器,Sensor/TP/TPS等数据寄存器),根本不能使用缓存值,无优化作用。
=============》这才是频繁的现实需求啊。


对于写寄存器 ,如果cache的话,后面也要去主动sync到外设。
=============》这种需求很少会用吧。

二、关于regmap使用

regmap缓存及缓存压缩类型,其中REGCACHE_NONE不是缓存类型,直接操作外设寄存器。


Kernel Regmap
文章图片




regmap 初始化需要配置的重要项:寄存器位宽 ,地址位宽,寄存器总数,等 。
如果要使用cache功能,注意:前面提到的变化的状态寄存器,变化的数据寄存器,必须使用volatile_reg()用于指明。


Kernel Regmap
文章图片




使用cache功能regmap_config例子:


Kernel Regmap
文章图片




不使用cache功能regmap_config例子:


Kernel Regmap
文章图片




Regmap初始化、及操作接口


Kernel Regmap
文章图片




Kernel Regmap
文章图片




regmap_update_bits() , regmap_write_bits() 接口很方便对按位操作寄存器 。


Regmap操作i2c例子:


Kernel Regmap
文章图片




Kernel Regmap
文章图片



Regmap总结:
使用确实更简单,效率提升有限。
【Kernel Regmap】

    推荐阅读