• devm_regmap_init_i2c【转】


    本文转载自: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

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

  • 相关阅读:
    .net core 2.x默认不支持gb2312
    获取枚举描述
    C#中DateTime.Ticks
    验证组件FluentValidation的使用示例
    python计算出现错误
    EF的导航属性
    webpack不打包指定的js文件
    递归树处理,配合vue的vueTreeselect组件使用
    elementUI 日期时间选择器el-date-picker开始时间与结束时间约束
    Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/8082265.html
Copyright © 2020-2023  润新知