Kernel Regmap

Regmap是什么东西? 

Regmap就是对i2c/spi/spmi等总线的一层封装,同时利用了缓存及压缩技术,

以期达到操作总线更简单、操作效率更高的目标。(个人认为对IO性能优化有限)


一、关于优化IO性能


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


Kernel Regmap_第1张图片


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


Kernel Regmap_第2张图片


基于Regmap读、写操作的实现方法,总结:

对于读非主动变化寄存器(即,此类寄存器读出来的值,就上次写进去的值。)才有优化作用。

==============》这种场景情况很少吧。


对于读主动变化寄存器(比如,状态寄存器,Sensor/TP/TPS等数据寄存器),根本不能使用缓存值,无优化作用。

=============》这才是频繁的现实需求啊。


对于写寄存器 ,如果cache的话,后面也要去主动sync到外设。

=============》这种需求很少会用吧。


二、关于regmap使用


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


Kernel Regmap_第3张图片


regmap 初始化需要配置的重要项:寄存器位宽 ,地址位宽,寄存器总数,等 。

如果要使用cache功能,注意:前面提到的变化的状态寄存器,变化的数据寄存器,必须使用volatile_reg()用于指明。


Kernel Regmap_第4张图片


使用cache功能regmap_config例子:


Kernel Regmap_第5张图片


不使用cache功能regmap_config例子:


Kernel Regmap_第6张图片


Regmap初始化、及操作接口




Kernel Regmap_第7张图片


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


Regmap操作i2c例子:


Kernel Regmap_第8张图片


Kernel Regmap_第9张图片


Regmap总结:


使用确实更简单,效率提升有限。


你可能感兴趣的:(kernel)