Linux regmap子系统分析之三 regmap bus实例分析

       在前面一章我们分析了regmap子系统的数据结构,基本上熟悉了数据结构的关联,也就大概理解了regmap子系统的实现流程,本章我们简要介绍下regmap子系统中接口的调用过程,然后介绍下regmap bus的实现及其提供的regmap的创建及注销接口。

 

一、regmap子系统接口调用关系

 

     针对regmap子系统提供的读写接口包含regmap_read、regmap_write、regmap_raw_read、regmap_raw_write等接口,此处我们主要说明regmap_read、regmap_write这两个接口的调用流程。

regmap_write接口调用

Regmap_write的调用包含如下三个大分支:

  1. 若regmap创建时提供了reg_write接口、reg_read接口,则regmap_write直接调用该reg_write接口;
  2. 若根据reg bits、reg value bits的值,确定其reg_write接口为_regmap_bus_formatted_write接口(即reg+pad+write的位数为16bits),首先对寄存器与寄存器值执行formart操作,然后调用regmp bus提供的write接口,执行写操作;
  3. 若reg bits、reg valut bits的位数均是8bits的整数倍,则针对reg、value均提供format接口,且将其写接口设置为_regmap_bus_raw_write,然后完成reg、value的format操作,并确认是否需要进行page方式访问及page选择等。然后在进行写操作时,若是异步写则调用regmap bus的异步写接口即可;若是同步写,则调用regmap bus的write/gather_write接口执行写操作。

 

 

 

regmap_read接口调用

 

针对regmap读操作,也包含如下几个大的方向:

  1. 若支持从cache中获取,则直接调用regcache_read从cache中获取值即可;
  2. 若regmap创建时提供了reg_write接口、reg_read接口,则regmap_write直接调用该reg_read接口;
  3. 调用_regmap_bus_read接口进行读操作,在读之前也需要判断是否需要进行page选择,最终也是调用regmap bus的读接口即可。

 

 

 

    以上即是regmap_read/regmap_write的调用逻辑,针对regmap_raw_read、regmap_raw_write接口的调用也大致类似,此处不再细述读者可自行查找。

 

regmap bus的实现及其提供的regmap的创建及注销接

此处我们选择iic regmap bus的创建及其提供的regmap的创建及注销接口。

iic regmap bus的定义

     如下图所示,iic regmap bus提供了read、write、gather_write接口,而read、write接口则主要调用i2c_transfer接口实现对i2c设备的读写操作,相对来说也是比较简单的。

 

iic regmap的创建接口

  iic regmap的创建接口为regmap_init_i2c,该接口即是对regmap_init接口的调用,并传递iic regmap_bus变量,这样创建的iic regmap变量中执行的regmap_bus即为regmap_i2c,然后在regmap_write、regmap_read接口的调用中,最终即调用了regmap_i2c的read、write接口,即调用regmap_i2c_read、regmap_i2c_write接口,实现与i2c设备的通信操作。

 

iic regmap的注销接口

对于iic/spi regmap的注销接口,直接调用regmap_exit接口即可。

 

 

 

regmap的使用

    在regulator子系统专栏的虚拟regulator 设备驱动的开发中,我们就已经实现了regmap的创建与注销操作,只需要在i2c设备驱动的probe接口中调用devm_regmap_init_i2c接口完成i2c regmap的创建后,即可进行regmap_write、regmap_read的调用。

 

   至此我们即完成regmap子系统的分析,regmap子系统设计也不是很复杂,我们就不大篇幅介绍。下一章我们分析下linux设备资源管理、iio子系统等内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值