regmap模块
来源:互联网 发布:杭州浪尖网络 编辑:程序博客网 时间:2024/05/22 10:45
3.0linux内核版本中,codec driver是直接调用i2c的i2c_master_send函数与i2c_transfer函数来实现i2c的读写,
3.3版本,codec driver通过调用snd_soc_read和snd_soc_write函数来实现i2c的读写,这两个函数内部包裹了codec->read和codec->write,而codec->read和codec->write的赋值是在snd_soc_codec_set_cache_io中,最终也是调用了i2c_master_send函数与i2c_transfer函数
3.10版本开始出现了regmap的接口,这个regmap将i2c、spi、mmio、irq都抽象出统一的接口regmap_read、regmap_write、regmap_update_bits等接口
例如对于i2c接口
devm_regmap_init_i2c(i2c, ®map_i2c);或者使用
devm_regmap_init(&i2c->dev, ®map_i2c, &i2c->dev, config)
|
regmap_init(struct device *dev, struct regmap_bus *bus, void *bus_content, struct regmap_config *config);
1)注册方法regmap_bus和对象i2c:
通过把struct regmap_bus regmap_i2c和i2c->dev注册到regmap模块中去,而regmap_bus中已经实现了read和write函数(调用的就是i2c_master_send与i2c_transfer)
2)使用注册的对象和方法
当调用regmap_read或者regmap_write的时候,这两个函数会取出struct regmap中的content即i2c,并调用之前注册的regmap_bus中的read和write函数来实现读和写。
regmap_update_bit内部调用了regmap_read和regmap_write
我觉得以上的原理挺重要的,我们可以自己实现类似的接口:提供注册的机制,能够将对象以及对象的方法注册进去;当需要调用的时候,取出对应的对象和方法。
- regmap模块
- Kernel Regmap
- regmap机制
- regmap使用介绍
- regmap使用介绍
- regmap使用介绍
- regmap使用介绍
- regmap使用介绍
- 设备驱动中的regmap
- struct regmap *syscon;初始化
- linux syscon and regmap study note
- [RK3288][Android6.0] 控制总线通用接口regmap小结
- 内核探索:Regmap 框架:简化慢速 I/O 接口优化性能
- 内核探索:Regmap 框架:简化慢速 I/O 接口优化性能
- 模块
- 模块
- 模块
- 模块
- Linux下文件共享设置
- 自定义控件(二)自定义Dialog
- Android studio导入Eclipse项目,和一些错误的解决
- Day07_request-response
- linux c++循环缓冲区模板类
- regmap模块
- java生成验证码代码
- django 1.8 官方文档翻译: 3-6-1 中间件概览
- hdu 5296 - Annoying problem(2015 Multi-University Training Contest 1 )LCA
- 颜色直方图特征代码
- std::list与std::deque用法
- windows下安装配置solr
- Object-C中需要注意的细节
- Redis使用介绍