分为两部分,一是稳压器的注册,二是通过customer去使用稳压器,它们的关系如下图
设备1 等可以是另外一个驱动,里面去使用注册的这个稳压器
- 稳压器部分 struct regulator_dev
这里直接参考内核的regulator样例代码 /drivers/regulator/dummy.c
主要涉及两个结构体,
(1)struct regulator_des 稳压器属性和操作的封装
操作就是struct regulator_ops 结构体,里面有很多回调函数的接口,需要按需写好;
(2)struct regulator_config 一些配置信息的封装,解析设备树后的信息就放在这里
struct regulator_config 结构体中的struct regulator_init_data 结构体用来存放一些默认的配置信息
主要存在struct regulation_constraints 结构体里面,包括设置的最大、最小电压或电流
而这些配置信息我们往往按regulator子系统的格式写好在设备树上
(3)注册
参数就是(1)(2)中的; - 使用者customer 部分
主要使用regulator子系统提供的api
(1)
通过名字otg_name 获取指向对应稳压器的struct regulator结构体变量,他们互存了一下
(2)
类似这样的api,就是通过(1)获得的struct regulator结构体变量来使用其他地方定义了的稳压器struct regulator_dev里面的ops,这些ops实现了对应的硬件操作,一般有如下几个