本文转载自:http://blog.csdn.net/u011975319/article/details/52128845

本文有此处转载http://blog.csdn.net/luckywang1103/article/details/47091817

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, &regmap_i2c);或者使用 
devm_regmap_init(&i2c->dev, &regmap_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

我觉得以上的原理挺重要的,我们可以自己实现类似的接口:提供注册的机制,能够将对象以及对象的方法注册进去;当需要调用的时候,取出对应的对象和方法。

最新文章

  1. 浅谈MITM攻击之信息窃取(解密315晚会报道的免费WIFI窃取个人信息)
  2. Kali安装小问题解决及一些设置
  3. HTML学习总结
  4. 100735G
  5. 设定自动获得DNS服务器地址
  6. 边工作边刷题:70天一遍leetcode: day 80
  7. 配置hadoop-1.2.1出现localhost: Error: JAVA_HOME is not set.
  8. 学习总结 html图片热点,网页划区,拼接,表单
  9. SAE搭建WordPress教程 免费建WordPress博客站
  10. Android开发系列之AChartEngine
  11. BZOJ_1611_[Usaco2008_Feb]_Meteor_Shower流星雨_(bfs)
  12. 兄弟连王牌PHP课程送三重豪礼啦!
  13. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug
  14. extjs 时间可选择时分
  15. Android为TV端助力:intent传递消息
  16. Windows10 家庭版 关闭Windows defender
  17. php上传图片预览,放大,裁剪
  18. python面向对象-三大特性
  19. KMP算法理解(转)
  20. 【CF706D】Vasiliy's Multiset Trie+贪心

热门文章

  1. hdu 1390
  2. Spring JdbcTemplate 查询方法中的RowMapper实现汇总
  3. 关于parseDouble用法
  4. css解析规则
  5. 2-sat问题,输出方案,几种方法(赵爽的论文染色解法+其完全改进版)浅析 / POJ3683
  6. 第2章 CentOS网络配置
  7. C# 打印日志
  8. 阿里云***(java应用)
  9. TFS2018 获取所有Build变量及变量值
  10. 391. Perfect Rectangle