当前位置:网站首页>一点点读懂regulator(三)
一点点读懂regulator(三)
2022-08-04 22:50:00 【szembed】
本节我们主要介绍Regulator Machine Driver Interface
The regulator machine driver interface用于配置regulator subsystem的board/machine特定初始化代码。
Consider the following machine:
Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V]
|
+-> [Consumer B @ 3.3V]
consumers A和B的驱动器必须映射到正确的regulator上才能控制其电源。通过为每个regulator创建一个结构体 regulator_consumer_supply就可以在machine initialisation code中实现此映射:
struct regulator_consumer_supply {
const char *dev_name; /* consumer dev_name() */
const char *supply; /* consumer supply - e.g. "vcc" */
};
e.g. for the machine above:
static struct regulator_consumer_supply regulator1_consumers[] = {
REGULATOR_SUPPLY("Vcc", "consumer B"),
};
static struct regulator_consumer_supply regulator2_consumers[] = {
REGULATOR_SUPPLY("Vcc", "consumer A"),
};
This maps Regulator-1 to the ‘Vcc’ supply for Consumer B and maps Regulator-2 to the ‘Vcc’ supply for Consumer A.
现在,可以通过为每个regulator电源域定义一个结构体regulator_init_data来注册约束。此结构还将consumers映射到其supply regulators:
static struct regulator_init_data regulator1_data = {
.constraints = {
.name = "Regulator-1",
.min_uV = 3300000,
.max_uV = 3300000,
.valid_modes_mask = REGULATOR_MODE_NORMAL,
},
.num_consumer_supplies = ARRAY_SIZE(regulator1_consumers),
.consumer_supplies = regulator1_consumers,
};
The name field should be set to something that is usefully descriptive for the board for configuration of supplies for other regulators and for use in logging and other diagnostic output. Normally the name used for the supply rail in the schematic is a good choice. If no name is provided then the subsystem will choose one.
Regulator-1 supplies power to Regulator-2. This relationship must be registered with the core so that Regulator-1 is also enabled when Consumer A enables its supply (Regulator-2). The supply regulator is set by the supply_regulator field below and co:
static struct regulator_init_data regulator2_data = {
.supply_regulator = "Regulator-1",
.constraints = {
.min_uV = 1800000,
.max_uV = 2000000,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
.valid_modes_mask = REGULATOR_MODE_NORMAL,
},
.num_consumer_supplies = ARRAY_SIZE(regulator2_consumers),
.consumer_supplies = regulator2_consumers,
};
Finally the regulator devices must be registered in the usual manner:
static struct platform_device regulator_devices[] = {
{
.name = "regulator",
.id = DCDC_1,
.dev = {
.platform_data = ®ulator1_data,
},
},
{
.name = "regulator",
.id = DCDC_2,
.dev = {
.platform_data = ®ulator2_data,
},
},
};
/* register regulator 1 device */
platform_device_register(®ulator_devices[0]);
/* register regulator 2 device */
platform_device_register(®ulator_devices[1]);
边栏推荐
猜你喜欢
promise详解
go语言的日志实现(打印日志、日志写入文件、日志切割)
【3D建模制作技巧分享】如何使用ZBrush导出效果图
【3D建模制作技巧分享】ZBrush如何重新拓扑
【论文笔记KDD2021】MixGCF: An Improved Training Method for Graph Neural Network-based Recommender Systems
后排乘客不系安全带?事故瞬间被甩出
使用代理对象执行实现类目标方法异常
各行各业都受到重创,游戏行业却如火如荼,如何加入游戏模型师职业
BUG | The interface returns abnormal data
MySQL的JSON 数据类型1
随机推荐
正则表达式绕过
the warmest home
中国的顶级黑客在国际上是一个什么样的水平?
Jbpm3.2 开发HelloWorld (简单请假流程)客户端
xss总结
MySQL的JSON 数据类型2
Go 编程语言(简介)
【无标题】
temp7777
【模拟面试-10年工作】项目多一定是优势吗?
typeScript-部分应用函数
生成回文数
文章占位 文章占位
「津津乐道播客」#397 厂长来了:怎样用科技给法律赋能?
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
enumerate()函数
未来我们还需要浏览器吗?(feat. 枫言枫语)
The Record of Reminding myself
SSM整合完整流程讲解
【游戏建模模型制作全流程】使用ZBrush制作骷髅王