Kernel Regmap
Regmap是什么东西?
Regmap就是对i2c/spi/spmi等总线的一层封装,同时利用了缓存及压缩技术,
以期达到操作总线更简单、操作效率更高的目标。(个人认为对IO性能优化有限)
一、关于优化IO性能
Regmap读操,如果懂合理利用cache功能,是可能能提升IO性能,因为读的只是cache内容,未真正操作外设的寄存器。
Regmap写操作,必须去操作外设寄存器,否则操作就达不到预期效果啦。根本没有提升IO性能。
基于Regmap读、写操作的实现方法,总结:
对于读非主动变化寄存器(即,此类寄存器读出来的值,就上次写进去的值。)才有优化作用。
==============》这种场景情况很少吧。
对于读主动变化寄存器(比如,状态寄存器,Sensor/TP/TPS等数据寄存器),根本不能使用缓存值,无优化作用。
=============》这才是频繁的现实需求啊。
对于写寄存器 ,如果cache的话,后面也要去主动sync到外设。
=============》这种需求很少会用吧。
二、关于regmap使用
regmap缓存及缓存压缩类型,其中REGCACHE_NONE不是缓存类型,直接操作外设寄存器。
regmap 初始化需要配置的重要项:寄存器位宽 ,地址位宽,寄存器总数,等 。
如果要使用cache功能,注意:前面提到的变化的状态寄存器,变化的数据寄存器,必须使用volatile_reg()用于指明。
使用cache功能regmap_config例子:
不使用cache功能regmap_config例子:
Regmap初始化、及操作接口
regmap_update_bits() , regmap_write_bits() 接口很方便对按位操作寄存器 。
Regmap操作i2c例子:
Regmap总结:
使用确实更简单,效率提升有限。